/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.tools.idea.navigator.nodes; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.intellij.ide.projectView.ViewSettings; import com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode; import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ContentEntry; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.SourceFolder; import com.intellij.openapi.ui.Queryable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.List; import java.util.Set; public class NonAndroidModuleNode extends ProjectViewModuleNode { public NonAndroidModuleNode(Project project, Module value, ViewSettings viewSettings) { super(project, value, viewSettings); } @NotNull @Override public Collection<AbstractTreeNode> getChildren() { Set<NonAndroidSourceType> sourceTypes = getNonEmptySourceTypes(getValue()); List<AbstractTreeNode> nodes = Lists.newArrayListWithExpectedSize(sourceTypes.size()); for (NonAndroidSourceType type : sourceTypes) { nodes.add(new NonAndroidSourceTypeNode(myProject, getValue(), getSettings(), type)); } return nodes; } private static Set<NonAndroidSourceType> getNonEmptySourceTypes(Module module) { ModuleRootManager rootManager = ModuleRootManager.getInstance(module); Set<NonAndroidSourceType> sourceTypes = Sets.newHashSetWithExpectedSize(NonAndroidSourceType.values().length); ContentEntry[] contentEntries = rootManager.getContentEntries(); for (ContentEntry entry : contentEntries) { for (NonAndroidSourceType type : NonAndroidSourceType.values()) { for (SourceFolder sourceFolder : entry.getSourceFolders(type.rootType)) { if (sourceFolder.getFile() != null) { sourceTypes.add(type); break; } } } } return sourceTypes; } @Nullable @Override public Comparable getSortKey() { return getValue().getName(); } @Nullable @Override public Comparable getTypeSortKey() { return getSortKey(); } @Nullable @Override public String toTestString(@Nullable Queryable.PrintInfo printInfo) { return String.format("%1$s (non-Android)", getValue().getName()); } @Override public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; return super.equals(o); } }