Java: order imports correctly when layout specifies package without subpackages (IDEA-360701)

(cherry picked from commit 5398813a84a6046eaad776debfe7c75c0d8527e8)

GitOrigin-RevId: aa5274b93a06f8f4bc5b381064c7aa1de238fea3
This commit is contained in:
Bas Leijdekkers
2024-10-16 14:58:22 +02:00
committed by intellij-monorepo-bot
parent 24519bc121
commit 982a5b4d9c
2 changed files with 45 additions and 1 deletions

View File

@@ -175,7 +175,7 @@ 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(anImport.name(), anImport.isStatic(), entries);
entryForName[i] = findEntryIndex(ImportUtils.getPackageOrClassName(anImport.name()), anImport.isStatic(), entries);
}
List<Import> resultList = new ArrayList<>(imports.size());

View File

@@ -12,6 +12,50 @@ import org.intellij.lang.annotations.Language;
@SuppressWarnings("ALL")
public class LightOptimizeImportsTest extends LightJavaCodeInsightFixtureTestCase {
public void testImportLayoutWithoutSubpackages() {
myFixture.addClass("package aaa; public class AAA {}");
myFixture.addClass("package bbb; public class BBB {}");
myFixture.addClass("package ccc; public class CCC {}");
@Language("JAVA") String text = """
package main;
import aaa.AAA;
import bbb.BBB;
import ccc.CCC;
public class Main {
void usage() {
new AAA();
new BBB();
new CCC();
}
}
""";
myFixture.configureByText(JavaFileType.INSTANCE, text);
JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject());
javaSettings.IMPORT_LAYOUT_TABLE.insertEntryAt(new PackageEntry(false, "bbb", false), 1);
WriteCommandAction.runWriteCommandAction(getProject(), () -> JavaCodeStyleManager.getInstance(getProject()).optimizeImports(getFile()));
@Language("JAVA") String result = """
package main;
import aaa.AAA;
import ccc.CCC;
import bbb.BBB;
public class Main {
void usage() {
new AAA();
new BBB();
new CCC();
}
}
""";
myFixture.checkResult(result);
}
public void testSingleImportConflictingWith2Others() {
myFixture.addClass("package p; public class A1 {}");
myFixture.addClass("package p; public class A2 {}");