mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
Java: sort imports correctly when "Layout static imports separately" is disabled (IDEA-298584)
(cherry picked from commit 6656672e1ae56cffbc4f65cfbbd79d97004aef78) GitOrigin-RevId: a1065f373f4f8fa92e8f36564f6091fd99408e65
This commit is contained in:
committed by
intellij-monorepo-bot
parent
982a5b4d9c
commit
c82b457feb
@@ -175,7 +175,8 @@ public final class ImportHelper{
|
||||
PackageEntry[] entries = settings.IMPORT_LAYOUT_TABLE.getEntries();
|
||||
for (int i = 0; i < imports.size(); i++) {
|
||||
Import anImport = imports.get(i);
|
||||
entryForName[i] = findEntryIndex(ImportUtils.getPackageOrClassName(anImport.name()), anImport.isStatic(), entries);
|
||||
entryForName[i] = findEntryIndex(ImportUtils.getPackageOrClassName(anImport.name()),
|
||||
settings.LAYOUT_STATIC_IMPORTS_SEPARATELY && anImport.isStatic(), entries);
|
||||
}
|
||||
|
||||
List<Import> resultList = new ArrayList<>(imports.size());
|
||||
@@ -841,7 +842,9 @@ public final class ImportHelper{
|
||||
String className = ref.getCanonicalText();
|
||||
packageName = ImportUtils.getPackageOrClassName(className);
|
||||
}
|
||||
return findEntryIndex(packageName, statement instanceof PsiImportStaticStatement, mySettings.IMPORT_LAYOUT_TABLE.getEntries());
|
||||
return findEntryIndex(packageName,
|
||||
mySettings.LAYOUT_STATIC_IMPORTS_SEPARATELY && statement instanceof PsiImportStaticStatement,
|
||||
mySettings.IMPORT_LAYOUT_TABLE.getEntries());
|
||||
}
|
||||
|
||||
public static boolean hasConflictingOnDemandImport(@NotNull PsiJavaFile file, @NotNull PsiClass psiClass, @NotNull String referenceName) {
|
||||
|
||||
@@ -6,11 +6,71 @@ import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.PackageEntry;
|
||||
import com.intellij.psi.codeStyle.PackageEntryTable;
|
||||
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase;
|
||||
import org.intellij.lang.annotations.Language;
|
||||
|
||||
@SuppressWarnings("ALL")
|
||||
public class LightOptimizeImportsTest extends LightJavaCodeInsightFixtureTestCase {
|
||||
|
||||
public void testImportLayoutStaticAndNonStaticImportsTogether() {
|
||||
myFixture.addClass("package aaa; public class AAA {}");
|
||||
myFixture.addClass("package aaa; public class BBB {" +
|
||||
" public static void x() {}" +
|
||||
"}");
|
||||
myFixture.addClass("package aaa; public class CCC {}");
|
||||
|
||||
@Language("JAVA") String text = """
|
||||
package main;
|
||||
|
||||
import aaa.AAA;
|
||||
import aaa.CCC;
|
||||
import aaa.BBB;
|
||||
import java.util.ArrayList;
|
||||
import static aaa.BBB.x;
|
||||
|
||||
public class Main {
|
||||
void usage() {
|
||||
new ArrayList<>();
|
||||
new AAA();
|
||||
new BBB();
|
||||
new CCC();
|
||||
x();
|
||||
}
|
||||
}
|
||||
""";
|
||||
myFixture.configureByText(JavaFileType.INSTANCE, text);
|
||||
|
||||
JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject());
|
||||
javaSettings.LAYOUT_STATIC_IMPORTS_SEPARATELY = false;
|
||||
javaSettings.IMPORT_LAYOUT_TABLE = new PackageEntryTable();
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(PackageEntry.ALL_OTHER_IMPORTS_ENTRY);
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(PackageEntry.BLANK_LINE_ENTRY);
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(new PackageEntry(false, "aaa", true));
|
||||
WriteCommandAction.runWriteCommandAction(getProject(), () -> JavaCodeStyleManager.getInstance(getProject()).optimizeImports(getFile()));
|
||||
|
||||
@Language("JAVA") String result = """
|
||||
package main;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import aaa.AAA;
|
||||
import aaa.BBB;
|
||||
import static aaa.BBB.x;
|
||||
import aaa.CCC;
|
||||
|
||||
public class Main {
|
||||
void usage() {
|
||||
new ArrayList<>();
|
||||
new AAA();
|
||||
new BBB();
|
||||
new CCC();
|
||||
x();
|
||||
}
|
||||
}
|
||||
""";
|
||||
myFixture.checkResult(result);
|
||||
}
|
||||
|
||||
public void testImportLayoutWithoutSubpackages() {
|
||||
myFixture.addClass("package aaa; public class AAA {}");
|
||||
@@ -81,6 +141,7 @@ public class LightOptimizeImportsTest extends LightJavaCodeInsightFixtureTestCas
|
||||
myFixture.configureByText(JavaFileType.INSTANCE, text);
|
||||
|
||||
JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject());
|
||||
// default import layout table is at com.intellij.psi.codeStyle.JavaCodeStyleSettings.initImportsByDefault()
|
||||
javaSettings.CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND = 2;
|
||||
WriteCommandAction.runWriteCommandAction(getProject(), () -> JavaCodeStyleManager.getInstance(getProject()).optimizeImports(getFile()));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user