Merge branch 'master' of git@git.labs.intellij.net:idea/community
authorKirill Kalishev <kirill.kalishev@jetbrains.com>
Wed, 10 Mar 2010 13:18:06 +0000 (16:18 +0300)
committerKirill Kalishev <kirill.kalishev@jetbrains.com>
Wed, 10 Mar 2010 13:18:06 +0000 (16:18 +0300)
java/java-impl/src/com/intellij/ide/projectView/impl/ClassesTreeStructureProvider.java
java/java-impl/src/com/intellij/ide/projectView/impl/nodes/ClassTreeNode.java

index bb6fe4ca9b226177a6502f2fca25c9ab93ed9daa..36c8b865010a0cab753b014eb1e3bc670830111c 100644 (file)
@@ -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();
index e2795b94224935745202cf63ef53c0ce4f85ade8..865af940522a37268cd084bb677d376275e7c8bd 100644 (file)
@@ -159,13 +159,16 @@ public class ClassTreeNode extends BasePsiMemberNode<PsiClass>{
     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);
+        }
       }
     }