Java: clean up LightOptimizeImportsTest

(cherry picked from commit c103b21df16a04f5c01173e1e57c943bb60a840f)

GitOrigin-RevId: 661a6944f47a101bec2852d2789cda66b7330cdd
This commit is contained in:
Bas Leijdekkers
2024-10-16 13:38:25 +02:00
committed by intellij-monorepo-bot
parent a5d823ab1c
commit 24519bc121
2 changed files with 170 additions and 164 deletions

View File

@@ -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) {}
}
}

View File

@@ -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);
}
}
}