Fix Java navbar for file with multiple classes

GitOrigin-RevId: 81e4fc4106dd50198384815226d33ed0a850707d
This commit is contained in:
Dmitry Jemerov
2020-01-30 19:06:53 +00:00
committed by intellij-monorepo-bot
parent fda1a479b5
commit 86729fe0cd
4 changed files with 25 additions and 1 deletions
@@ -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());
@@ -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) {