diff options
author | Tor Norbye <tnorbye@google.com> | 2014-08-19 12:53:10 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2014-08-19 12:53:10 -0700 |
commit | 02cf98d65c798d368fcec43ed64a001d513bdd4f (patch) | |
tree | e39e210ab20917b7e5ffdce14a42f5747506eed0 /java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java | |
parent | 2e5965e996aad62ab1338b09d54caaf99ff3dd6a (diff) | |
download | idea-02cf98d65c798d368fcec43ed64a001d513bdd4f.tar.gz |
Snapshot idea/138.1503 from git://git.jetbrains.org/idea/community.git
Change-Id: Ie01af1d8710ec0ff51d90301bda1a18b0b5c0faf
Diffstat (limited to 'java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java')
-rw-r--r-- | java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java b/java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java index 98f1fbeddfca..73fcc83df646 100644 --- a/java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java +++ b/java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java @@ -28,9 +28,7 @@ import com.intellij.ide.SelectInTarget; import com.intellij.ide.impl.PackagesPaneSelectInTarget; import com.intellij.ide.projectView.ProjectView; import com.intellij.ide.projectView.ViewSettings; -import com.intellij.ide.projectView.impl.nodes.PackageElement; -import com.intellij.ide.projectView.impl.nodes.PackageUtil; -import com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode; +import com.intellij.ide.projectView.impl.nodes.*; import com.intellij.ide.util.DeleteHandler; import com.intellij.ide.util.treeView.AbstractTreeBuilder; import com.intellij.ide.util.treeView.AbstractTreeNode; @@ -48,8 +46,8 @@ import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiPackage; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.util.PsiUtilBase; import com.intellij.psi.util.PsiUtilCore; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -140,14 +138,30 @@ public final class PackageViewPane extends AbstractProjectViewPSIPane { @Override public PsiDirectory[] getSelectedDirectories() { - final PackageElement packageElement = getSelectedPackageElement(); - if (packageElement != null) { - final Module module = packageElement.getModule(); - final PsiPackage aPackage = packageElement.getPackage(); - if (module != null && aPackage != null) { - return aPackage.getDirectories(GlobalSearchScope.moduleScope(module)); + List<PsiDirectory> directories = ContainerUtil.newArrayList(); + for (PackageElementNode node : getSelectedNodes(PackageElementNode.class)) { + PackageElement packageElement = node.getValue(); + PsiPackage aPackage = packageElement != null ? packageElement.getPackage() : null; + final Module module = packageElement != null ? packageElement.getModule() : null; + if (aPackage != null && module != null) { + GlobalSearchScope scope = GlobalSearchScope.moduleScope(module); + Collections.addAll(directories, aPackage.getDirectories(scope)); + + Object parentValue = node.getParent().getValue(); + PsiPackage parentNodePackage = parentValue instanceof PackageElement ? ((PackageElement)parentValue).getPackage() : null; + while (true) { + aPackage = aPackage.getParentPackage(); + if (aPackage == null || aPackage.getQualifiedName().isEmpty() || aPackage.equals(parentNodePackage)) { + break; + } + Collections.addAll(directories, aPackage.getDirectories(scope)); + } } } + if (!directories.isEmpty()) { + return directories.toArray(new PsiDirectory[directories.size()]); + } + return super.getSelectedDirectories(); } |