ProjectViewBuilder: select in for fields, inner classes, anonymous classess fixed

This commit is contained in:
Kirill Kalishev
2010-03-10 16:06:01 +03:00
parent 8c5f3ddcce
commit 65de404d0d
2 changed files with 29 additions and 12 deletions
@@ -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();
@@ -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);
}
}
}