From 65de404d0d791edeccc5e421df977623b0f83eb4 Mon Sep 17 00:00:00 2001 From: Kirill Kalishev Date: Wed, 10 Mar 2010 16:06:01 +0300 Subject: [PATCH] ProjectViewBuilder: select in for fields, inner classes, anonymous classess fixed --- .../impl/ClassesTreeStructureProvider.java | 28 ++++++++++++++----- .../projectView/impl/nodes/ClassTreeNode.java | 13 +++++---- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/java/java-impl/src/com/intellij/ide/projectView/impl/ClassesTreeStructureProvider.java b/java/java-impl/src/com/intellij/ide/projectView/impl/ClassesTreeStructureProvider.java index bb6fe4ca9b22..36c8b865010a 100644 --- a/java/java-impl/src/com/intellij/ide/projectView/impl/ClassesTreeStructureProvider.java +++ b/java/java-impl/src/com/intellij/ide/projectView/impl/ClassesTreeStructureProvider.java @@ -81,12 +81,10 @@ public class ClassesTreeStructureProvider implements SelectableTreeStructureProv PsiElement current = element; while (current != null) { - if (current instanceof PsiFileSystemItem) { - break; - } - if (isTopLevelClass(current, baseRootFile)) { - break; - } + + if (isSelectable(current)) break; + if (isTopLevelClass(current, baseRootFile)) break; + current = current.getParent(); } @@ -96,7 +94,18 @@ public class ClassesTreeStructureProvider implements SelectableTreeStructureProv current = classes[0]; } } - return current instanceof PsiClass ? current : baseRootFile; + + return current != null ? current : baseRootFile; + } + + private boolean isSelectable(PsiElement element) { + if (element instanceof PsiFileSystemItem) return true; + + if (element instanceof PsiField || element instanceof PsiClass || element instanceof PsiMethod) { + return !(element.getParent() instanceof PsiAnonymousClass) && !(element instanceof PsiAnonymousClass); + } + + return false; } @Nullable @@ -113,6 +122,11 @@ public class ClassesTreeStructureProvider implements SelectableTreeStructureProv if (!(element instanceof PsiClass)) { return false; } + + if (element instanceof PsiAnonymousClass) { + return false; + } + final PsiFile parentFile = parentFileOf((PsiClass)element); // do not select JspClass return parentFile != null && parentFile.getLanguage() == baseRootFile.getLanguage(); diff --git a/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/ClassTreeNode.java b/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/ClassTreeNode.java index e2795b942249..865af940522a 100644 --- a/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/ClassTreeNode.java +++ b/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/ClassTreeNode.java @@ -159,13 +159,16 @@ public class ClassTreeNode extends BasePsiMemberNode{ return super.canRepresent(element) || canRepresent(getValue(), element); } - private static boolean canRepresent(final PsiClass psiClass, final Object element) { + private boolean canRepresent(final PsiClass psiClass, final Object element) { final PsiFile parentFile = parentFileOf(psiClass); if (parentFile != null && (parentFile == element || parentFile.getVirtualFile() == element)) return true; - if (element instanceof PsiElement) { - PsiFile elementFile = ((PsiElement)element).getContainingFile(); - if (elementFile != null && parentFile != null) { - return elementFile.equals(parentFile); + + if (!getSettings().isShowMembers()) { + if (element instanceof PsiElement) { + PsiFile elementFile = ((PsiElement)element).getContainingFile(); + if (elementFile != null && parentFile != null) { + return elementFile.equals(parentFile); + } } }