mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
ProjectViewBuilder: select in for fields, inner classes, anonymous classess fixed
This commit is contained in:
+21
-7
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user