mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
Java: clean up LightOptimizeImportsTest
(cherry picked from commit c103b21df16a04f5c01173e1e57c943bb60a840f) GitOrigin-RevId: 661a6944f47a101bec2852d2789cda66b7330cdd
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a5d823ab1c
commit
24519bc121
@@ -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) {}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user