From bc97ae6bb8bedcfbe171a9985e397a5af49f6952 Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Fri, 14 Feb 2025 12:34:26 +0100 Subject: [PATCH] [java-import] IDEA-367539 auto-import. try to show packages GitOrigin-RevId: 536bd4376056b948cee7ae932c7c72dc1837f29c --- .../completion/JavaMethodCallElement.java | 9 +++++-- .../autoStaticImport/ShowPackage.java | 8 ++++++ .../autoStaticImport/ShowPackage_after.java | 8 ++++++ .../AutoStaticImportCompletionTest.java | 25 +++++++++++++++++++ 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/autoStaticImport/ShowPackage.java create mode 100644 java/java-tests/testData/codeInsight/completion/autoStaticImport/ShowPackage_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMethodCallElement.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMethodCallElement.java index 5312cccc1d41..5cf966da1331 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMethodCallElement.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMethodCallElement.java @@ -32,6 +32,7 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; +import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.impl.PsiImplUtil; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; @@ -556,9 +557,13 @@ public class JavaMethodCallElement extends LookupItem implements Type presentation.setIcon(DefaultLookupItemRenderer.getRawIcon(this)); presentation.setStrikeout(JavaElementLookupRenderer.isToStrikeout(this)); - + boolean isAutoImportName = myContainingClass != null && + myMethod != null && + JavaCodeStyleManager.getInstance(myMethod.getProject()) + .isStaticAutoImportName(myContainingClass.getQualifiedName() + "." + myMethod.getName()); MemberLookupHelper helper = myHelper != null ? myHelper : new MemberLookupHelper(myMethod, myContainingClass, false, false); - helper.renderElement(presentation, myHelper != null, myHelper != null && !myHelper.willBeImported(), getSubstitutor()); + boolean showPackage = myHelper != null && (!myHelper.willBeImported() || isAutoImportName); + helper.renderElement(presentation, myHelper != null, showPackage, getSubstitutor()); if (!myForcedQualifier.isEmpty()) { presentation.setItemText(myForcedQualifier + presentation.getItemText()); } diff --git a/java/java-tests/testData/codeInsight/completion/autoStaticImport/ShowPackage.java b/java/java-tests/testData/codeInsight/completion/autoStaticImport/ShowPackage.java new file mode 100644 index 000000000000..f6010bbdf2b9 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/autoStaticImport/ShowPackage.java @@ -0,0 +1,8 @@ +package org; + +class ClassTest { + + void m() { + ba + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/autoStaticImport/ShowPackage_after.java b/java/java-tests/testData/codeInsight/completion/autoStaticImport/ShowPackage_after.java new file mode 100644 index 000000000000..f6010bbdf2b9 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/autoStaticImport/ShowPackage_after.java @@ -0,0 +1,8 @@ +package org; + +class ClassTest { + + void m() { + ba + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/AutoStaticImportCompletionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/AutoStaticImportCompletionTest.java index b8b8f41590ec..b687e38fdc9c 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/AutoStaticImportCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/AutoStaticImportCompletionTest.java @@ -4,6 +4,7 @@ package com.intellij.java.codeInsight.completion; import com.intellij.JavaTestUtil; import com.intellij.codeInsight.JavaProjectCodeInsightSettings; import com.intellij.codeInsight.lookup.LookupElement; +import com.intellij.codeInsight.lookup.LookupElementPresentation; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.PsiMethod; import com.intellij.psi.codeStyle.JavaCodeStyleSettings; @@ -338,6 +339,30 @@ public class AutoStaticImportCompletionTest extends NormalCompletionTestCase { } } + @NeedsIndex.Full + public void testShowPackage() { + addStaticAutoImport("org.example.Foo.bar"); + myFixture.addClass(""" + package org.example; + public final class Foo { + public static void bar() {} + } + """); + configure(); + LookupElement[] elements = myFixture.getLookupElements(); + if (elements != null) { + LookupElement element = ContainerUtil.find(elements, e -> + e.getLookupString().equals("bar") && + e.getPsiElement() instanceof PsiMethod method && + method.getContainingClass().getQualifiedName().equals("org.example.Foo")); + assertNotNull(element); + LookupElementPresentation presentation = new LookupElementPresentation(); + element.renderElement(presentation); + assertTrue(presentation.getTailText().contains("org.example")); + } + checkResult(); + } + private void addStaticAutoImport(@NotNull String name) { JavaProjectCodeInsightSettings.getSettings(getProject()).includedAutoStaticNames.add(name); }