summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/ide/projectView/impl/PackageViewPane.java
diff options
context:
space:
mode:
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.java34
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();
}