From 24519bc1219c67fc00c0bf1b2c296ed92414f41f Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 16 Oct 2024 13:38:25 +0200 Subject: [PATCH] Java: clean up LightOptimizeImportsTest (cherry picked from commit c103b21df16a04f5c01173e1e57c943bb60a840f) GitOrigin-RevId: 661a6944f47a101bec2852d2789cda66b7330cdd --- .../impl/source/codeStyle/ImportHelper.java | 12 +- .../daemon/LightOptimizeImportsTest.java | 322 +++++++++--------- 2 files changed, 170 insertions(+), 164 deletions(-) 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 959e54c51ea7..6b788f67308d 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 @@ -1006,16 +1006,12 @@ public final class ImportHelper{ JavaResolveResult[] results = ref.multiResolve(false); if (results.length == 0) { String text = ref.getCanonicalText(); + boolean isStatic = anImport instanceof PsiImportStaticStatement; if (anImport.isOnDemand()) { - text += ".*"; - } - - Import importedName = new Import(text, anImport instanceof PsiImportStaticStatement); - if (anImport.isOnDemand()) { - unresolvedOnDemand.add(importedName); + unresolvedOnDemand.add(new Import(text + ".*", isStatic)); } else { - unresolvedNames.put(ref.getReferenceName(), importedName); + unresolvedNames.put(ref.getReferenceName(), new Import(text, isStatic)); } } } @@ -1092,4 +1088,4 @@ public final class ImportHelper{ */ @ApiStatus.Internal public record Import(@NotNull String name, boolean isStatic) {} -} +} \ No newline at end of file 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 60926be098fa..81f392969600 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 @@ -1,4 +1,4 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.java.codeInsight.daemon; import com.intellij.ide.highlighter.JavaFileType; @@ -12,54 +12,55 @@ import org.intellij.lang.annotations.Language; @SuppressWarnings("ALL") public class LightOptimizeImportsTest extends LightJavaCodeInsightFixtureTestCase { - public void testSingleImportConflictingWith2Others() throws Exception { - + public void testSingleImportConflictingWith2Others() { myFixture.addClass("package p; public class A1 {}"); myFixture.addClass("package p; public class A2 {}"); myFixture.addClass("package p; public class ArrayList {}"); myFixture.addClass("package p1; public class ArrayList {}"); @Language("JAVA") - String text = "\n" + - "import java.util.*;\n" + - "import p.*;\n" + - "import p1.ArrayList;\n" + - "import p1.ArrayList;\n" + - "public class Optimize {\n" + - " Class[] c = {\n" + - " Collection.class,\n" + - " List.class,\n" + - " ArrayList.class,\n" + - " A1.class,\n" + - " A2.class\n" + - " };\n" + - "}\n"; + String text = """ + import java.util.*; + import p.*; + import p1.ArrayList; + import p1.ArrayList; + public class Optimize { + Class[] c = { + Collection.class, + List.class, + ArrayList.class, + A1.class, + A2.class + }; + } + """; myFixture.configureByText(JavaFileType.INSTANCE, text); JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject()); javaSettings.CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND = 2; - WriteCommandAction.runWriteCommandAction(getProject(), () -> JavaCodeStyleManager.getInstance(getProject()).optimizeImports(getFile())); @Language("JAVA") - String result = "import p.*;\n" + - "import p1.ArrayList;\n" + - "\n" + - "import java.util.*;\n" + - "\n" + - "public class Optimize {\n" + - " Class[] c = {\n" + - " Collection.class,\n" + - " List.class,\n" + - " ArrayList.class,\n" + - " A1.class,\n" + - " A2.class\n" + - " };\n" + - "}\n"; + String result = """ + import p.*; + import p1.ArrayList; + + import java.util.*; + + public class Optimize { + Class[] c = { + Collection.class, + List.class, + ArrayList.class, + A1.class, + A2.class + }; + } + """; myFixture.checkResult(result); } - public void testDontExpandOnDemandStaticImports() throws Exception { + public void testDontExpandOnDemandStaticImports() { myFixture.addClass("package p; public class A1 {" + " public static void f() {}" + "}"); @@ -68,175 +69,184 @@ public class LightOptimizeImportsTest extends LightJavaCodeInsightFixtureTestCas myFixture.addClass("package p; public class A4 extends A3 {" + " public static void g() {}" + "}"); - - + @Language("JAVA") - String text = "\n" + - "import static p.A3.*;\n" + - "import static p.A4.*;\n" + - "public class Optimize {\n" + - " {f();g();}" + - "}\n"; + String text = """ + import static p.A3.*; + import static p.A4.*; + public class Optimize { + {f();g();}\ + } + """; myFixture.configureByText(JavaFileType.INSTANCE, text); JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject()); javaSettings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND = 0; - WriteCommandAction.runWriteCommandAction(getProject(), () -> JavaCodeStyleManager.getInstance(getProject()).optimizeImports(getFile())); myFixture.checkResult(text); } - public void testStaticImportsOrder() throws Exception { - - myFixture.addClass("package p; public class C1 {" + - " public static class Byte {}\n" + - " public static String Field2;" + - "}"); - myFixture.addClass("package p; public class C2 { " + - " public static class Long {}\n" + - " public static String Field4;" + - "}"); + public void testStaticImportsOrder() { + myFixture.addClass(""" + package p; public class C1 { + public static class Byte {} + public static String Field2; + }"""); + myFixture.addClass(""" + package p; public class C2 { + public static class Long {} + public static String Field4; + }"""); @Language("JAVA") - String text = "\n" + - "import static p.C1.*;\n" + - "import static p.C1.Byte;\n" + - "import static p.C2.Long;\n" + - "import static p.C2.*;\n" + - "\n" + - "public class Main {\n" + - " public static void main(String[] args) {\n" + - " System.out.println(Byte.class);\n" + - " System.out.println(Field2);\n" + - " System.out.println(Long.class);\n" + - " System.out.println(Field4);\n" + - " }\n" + - "}"; + String text = """ + import static p.C1.*; + import static p.C1.Byte; + import static p.C2.Long; + import static p.C2.*; + + public class Main { + public static void main(String[] args) { + System.out.println(Byte.class); + System.out.println(Field2); + System.out.println(Long.class); + System.out.println(Field4); + } + }"""; myFixture.configureByText(JavaFileType.INSTANCE, text); JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject()); javaSettings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND = 1; - WriteCommandAction.runWriteCommandAction(getProject(), () -> JavaCodeStyleManager.getInstance(getProject()).optimizeImports(getFile())); @Language("JAVA") - String result = "import static p.C1.Byte;\n" + - "import static p.C1.*;\n" + - "import static p.C2.Long;\n" + - "import static p.C2.*;\n" + - "\n" + - "public class Main {\n" + - " public static void main(String[] args) {\n" + - " System.out.println(Byte.class);\n" + - " System.out.println(Field2);\n" + - " System.out.println(Long.class);\n" + - " System.out.println(Field4);\n" + - " }\n" + - "}"; + String result = """ + import static p.C1.Byte; + import static p.C1.*; + import static p.C2.Long; + import static p.C2.*; + + public class Main { + public static void main(String[] args) { + System.out.println(Byte.class); + System.out.println(Field2); + System.out.println(Long.class); + System.out.println(Field4); + } + }"""; myFixture.checkResult(result); } public void testStaticImportOnMethodFromSuperClass() { - myFixture.addClass("package p; public class A {\n" + - " public static void m1() {}\n" + - " public static void m2() {}\n" + - "}"); - - myFixture.addClass("package p; public class B extends A {\n" + - " public static void m3() {}\n" + - " public static void m4() {}\n" + - "}"); + myFixture.addClass(""" + package p; public class A { + public static void m1() {} + public static void m2() {} + }"""); + myFixture.addClass(""" + package p; public class B extends A { + public static void m3() {} + public static void m4() {} + }"""); @Language("JAVA") - String text = "\n" + - "import static p.A.m1;\n" + - "import static p.A.m2;\n" + - "import static p.B.m3;\n" + - "import static p.B.m4;\n" + - "\n" + - "public class Main {\n" + - " public static void main(String[] args) {\n" + - " m1();\n" + - " m2();\n" + - " m3();\n" + - " m4();\n" + - " }\n" + - "}"; + String text = """ + + import static p.A.m1; + import static p.A.m2; + import static p.B.m3; + import static p.B.m4; + + public class Main { + public static void main(String[] args) { + m1(); + m2(); + m3(); + m4(); + } + }"""; myFixture.configureByText(JavaFileType.INSTANCE, text); JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject()); javaSettings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND = 1; - WriteCommandAction.runWriteCommandAction(getProject(), () -> JavaCodeStyleManager.getInstance(getProject()).optimizeImports(getFile())); @Language("JAVA") - String result = "import static p.A.*;\n" + - "import static p.B.*;\n" + - "\n" + - "public class Main {\n" + - " public static void main(String[] args) {\n" + - " m1();\n" + - " m2();\n" + - " m3();\n" + - " m4();\n" + - " }\n" + - "}"; + String result = """ + import static p.A.*; + import static p.B.*; + + public class Main { + public static void main(String[] args) { + m1(); + m2(); + m3(); + m4(); + } + }"""; myFixture.checkResult(result); } 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(JavaFileType.INSTANCE, "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" + - "}"); + myFixture.addClass(""" + package p.p2; + public class B{ + public enum C { None, Some, All } + public static final int JUNK = 0; + }"""); + @Language("JAVA") String text = """ + package p.p2; + import p.p1.*; + import static p.p2.B.*; + import static p.p2.B.C; + public class A { + public static void main( String[] args ) + { + new D(); + System.out.println( C.None ); + System.out.println( JUNK ); + } + }"""; + myFixture.configureByText(JavaFileType.INSTANCE, text); + 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" + - "\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" + - "}"); + @Language("JAVA") String result = """ + package p.p2; + + import p.p1.*; + + import static p.p2.B.C; + import static p.p2.B.*; + + public class A { + public static void main( String[] args ) + { + new D(); + System.out.println( C.None ); + System.out.println( JUNK ); + } + }"""; + myFixture.checkResult(result); } public void testDontOptimizeIncompleteCode() { - String fileText = "import java.util.ArrayList;\n" + - "public class A {\n" + - " public static void main( String[] args)\n" + - " {\n" + - " ArrayList\n" + - " }\n" + - "}"; + @Language("JAVA") String fileText = """ + import java.util.ArrayList; + public class A { + public static void main( String[] args) + { + ArrayList + } + }"""; myFixture.configureByText(JavaFileType.INSTANCE, fileText); + WriteCommandAction.runWriteCommandAction(getProject(), () -> JavaCodeStyleManager.getInstance(getProject()).optimizeImports(getFile())); myFixture.checkResult(fileText); } -} +} \ No newline at end of file