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 5edd3c64fa32..8b171bf89da9 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 @@ -381,10 +381,14 @@ public class ImportHelper{ String packageOrClassName = getPackageOrClassName(name); final boolean implicitlyImported = JAVA_LANG_PACKAGE.equals(packageOrClassName); boolean useOnDemand = implicitlyImported || packagesOrClassesToImportOnDemand.contains(packageOrClassName); + final Pair current = Pair.create(packageOrClassName, isStatic); if (namesToUseSingle.remove(name)) { + if (useOnDemand && importedPackagesOrClasses.contains(current)) { + buffer.insert(buffer.lastIndexOf("import"), "import " + (isStatic ? "static " : "") + name + ";\n"); + continue; + } useOnDemand = false; } - final Pair current = Pair.create(packageOrClassName, isStatic); if (useOnDemand && (importedPackagesOrClasses.contains(current) || implicitlyImported)) continue; buffer.append("import "); if (isStatic) buffer.append("static "); 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 f0be2620b876..dd898f2ef30e 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 @@ -7,6 +7,7 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleSettings; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; +@SuppressWarnings("ALL") public class LightOptimizeImportsTest extends LightCodeInsightFixtureTestCase { public void testSingleImportConflictingWith2Others() throws Exception { @@ -50,4 +51,50 @@ public class LightOptimizeImportsTest extends LightCodeInsightFixtureTestCase { " };\n" + "}\n"); } + + public void testStaticImportsOrder() throws Exception { + + myFixture.addClass("package p; public class C1 {" + + " public static String Byte;\n" + + " public static String Field2;" + + "}"); + myFixture.addClass("package p; public class C2 { " + + " public static String Long;\n" + + " public static String Field4;" + + "}"); + + myFixture.configureByText(StdFileTypes.JAVA, "\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);\n" + + " System.out.println(Field2);\n" + + " System.out.println(Long);\n" + + " System.out.println(Field4);\n" + + " }\n" + + "}"); + + JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject()); + javaSettings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND = 1; + + WriteCommandAction.runWriteCommandAction(getProject(), () -> JavaCodeStyleManager.getInstance(getProject()).optimizeImports(getFile())); + + myFixture.checkResult("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);\n" + + " System.out.println(Field2);\n" + + " System.out.println(Long);\n" + + " System.out.println(Field4);\n" + + " }\n" + + "}"); + } }