mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fix Java navbar for file with multiple classes
GitOrigin-RevId: 81e4fc4106dd50198384815226d33ed0a850707d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
fda1a479b5
commit
86729fe0cd
@@ -112,4 +112,12 @@ public class JavaNavBarExtension extends StructureAwareNavBarModelExtension {
|
||||
protected List<NodeProvider<?>> getApplicableNodeProviders() {
|
||||
return myNodeProviders;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean acceptParentFromModel(@Nullable PsiElement psiElement) {
|
||||
if (psiElement instanceof PsiJavaFile) {
|
||||
return ((PsiJavaFile) psiElement).getClasses().length > 1;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
public class Foo {
|
||||
|
||||
}
|
||||
|
||||
class Bar {
|
||||
<caret>
|
||||
}
|
||||
@@ -32,6 +32,11 @@ public class JavaNavBarTest extends LightJavaCodeInsightFixtureTestCase {
|
||||
assertNavBarModel("src", "LambdaExpression", "foo", "Lambda");
|
||||
}
|
||||
|
||||
public void testMultipleClasses() {
|
||||
myFixture.configureByFile("multipleClasses.java");
|
||||
assertNavBarModel("src", "multipleClasses.java", "Bar");
|
||||
}
|
||||
|
||||
public void assertNavBarModel(String... expectedItems) {
|
||||
NavBarModel model = new NavBarModel(myFixture.getProject());
|
||||
model.updateModel(((EditorEx)myFixture.getEditor()).getDataContext());
|
||||
|
||||
+5
-1
@@ -60,7 +60,7 @@ abstract class StructureAwareNavBarModelExtension : AbstractNavBarModelExtension
|
||||
val model = buildStructureViewModel(file)
|
||||
if (model != null) {
|
||||
val parentInModel = findParentInModel(model.root, psiElement)
|
||||
if (parentInModel !is PsiFile) {
|
||||
if (acceptParentFromModel(parentInModel)) {
|
||||
return parentInModel
|
||||
}
|
||||
}
|
||||
@@ -68,6 +68,10 @@ abstract class StructureAwareNavBarModelExtension : AbstractNavBarModelExtension
|
||||
return super.getParent(psiElement)
|
||||
}
|
||||
|
||||
protected open fun acceptParentFromModel(psiElement: PsiElement?): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
private fun findParentInModel(root: StructureViewTreeElement, psiElement: PsiElement): PsiElement? {
|
||||
for (child in childrenFromNodeAndProviders(root)) {
|
||||
if ((child as StructureViewTreeElement).value == psiElement) {
|
||||
|
||||
Reference in New Issue
Block a user