From d206e26bb77d56bf13601962cb6ef9801ede2c73 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Tue, 31 Jul 2018 17:11:38 +0200 Subject: [PATCH] optimize imports: ensure qualifiers are participating in single import vs onDemand conflict detection (IDEA-161989) --- .../impl/source/codeStyle/ImportHelper.java | 1 + .../daemon/LightOptimizeImportsTest.java | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ImportHelper.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ImportHelper.java index 7ea1b877031f..205a0c5d5d21 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ImportHelper.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ImportHelper.java @@ -358,6 +358,7 @@ public class ImportHelper{ file.accept(new JavaRecursiveElementVisitor() { @Override public void visitReferenceElement(PsiJavaCodeReferenceElement reference) { + super.visitReferenceElement(reference); if (reference.getQualifier() != null) return; PsiElement element = reference.resolve(); if (element instanceof PsiClass && conflicts.contains(((PsiClass)element).getName())) { diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightOptimizeImportsTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightOptimizeImportsTest.java index 994a483e64cf..c36a66ee2778 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightOptimizeImportsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightOptimizeImportsTest.java @@ -5,6 +5,7 @@ import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleSettings; +import com.intellij.psi.codeStyle.PackageEntry; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; @SuppressWarnings("ALL") @@ -141,4 +142,45 @@ public class LightOptimizeImportsTest extends LightCodeInsightFixtureTestCase { " }\n" + "}"); } + + public void testConflictingSingleImportUsedInReferenceQualifier() { + myFixture.addClass("package p.p1; public class C {}"); + myFixture.addClass("package p.p1; public class D {}"); + myFixture.addClass("package p.p2;\n" + + "public class B{\n" + + " public enum C { None, Some, All }\n" + + " public static final int JUNK = 0;\n" + + "}"); + myFixture.configureByText(StdFileTypes.JAVA, "package p.p2;\n" + + "import p.p1.*;\n" + + "import static p.p2.B.*;\n" + + "import static p.p2.B.C;\n" + + "public class A {\n" + + " public static void main( String[] args )\n" + + " {\n" + + " new D();\n" + + " System.out.println( C.None );\n" + + " System.out.println( JUNK );\n" + + " }\n" + + "}"); + JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject()); + javaSettings.PACKAGES_TO_USE_IMPORT_ON_DEMAND.addEntry(new PackageEntry(false, "p", true)); + + WriteCommandAction.runWriteCommandAction(getProject(), () -> JavaCodeStyleManager.getInstance(getProject()).optimizeImports(getFile())); + + myFixture.checkResult("package p.p2;\n" + + "\n" + + "import p.p1.*;\n" + + "\n" + + "import static p.p2.B.C;\n" + + "import static p.p2.B.*;\n" + + "public class A {\n" + + " public static void main( String[] args )\n" + + " {\n" + + " new D();\n" + + " System.out.println( C.None );\n" + + " System.out.println( JUNK );\n" + + " }\n" + + "}"); + } }