mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-13 06:59:44 +07:00
[java-imports] IDEA-368382 incorrect place for module import
- support editorconfig - more tests (cherry picked from commit d7fd604e95b1dd197a3efbdbfcd54e81564b2490) IJ-CR-156496 GitOrigin-RevId: 141bae22ad1f263d06b28618bf425a68e8d3cac6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f82340ac1c
commit
3a00f15d33
@@ -2,6 +2,7 @@
|
||||
package com.intellij.psi.codeStyle;
|
||||
|
||||
import com.intellij.application.options.codeStyle.properties.ValueListPropertyAccessor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -16,9 +17,11 @@ public class JavaPackageEntryTableAccessor extends ValueListPropertyAccessor<Pac
|
||||
public static final char BLANK_LINE_CHAR = '|';
|
||||
public static final String STATIC_PREFIX = "$";
|
||||
public static final String MODULE_PREFIX = "@";
|
||||
private final Field myField;
|
||||
|
||||
public JavaPackageEntryTableAccessor(@NotNull Object object, @NotNull Field field) {
|
||||
super(object, field);
|
||||
myField = field;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -66,6 +69,11 @@ public class JavaPackageEntryTableAccessor extends ValueListPropertyAccessor<Pac
|
||||
}
|
||||
}
|
||||
}
|
||||
if ("imports_layout".equals(getPropertyName()) &&
|
||||
JavaCodeStyleSettings.class.equals(myField.getDeclaringClass()) &&
|
||||
!ContainerUtil.exists(entryTable.getEntries(), entry -> entry == PackageEntry.ALL_MODULE_IMPORTS)) {
|
||||
entryTable.insertEntryAt(PackageEntry.ALL_MODULE_IMPORTS, 0);
|
||||
}
|
||||
return entryTable;
|
||||
}
|
||||
|
||||
|
||||
@@ -955,10 +955,10 @@ public final class ImportHelper {
|
||||
if (entry == PackageEntry.ALL_OTHER_STATIC_IMPORTS_ENTRY) {
|
||||
allOtherStaticIndex = i;
|
||||
}
|
||||
if (entry == PackageEntry.ALL_OTHER_IMPORTS_ENTRY) {
|
||||
if (!isModule && entry == PackageEntry.ALL_OTHER_IMPORTS_ENTRY) {
|
||||
allOtherIndex = i;
|
||||
}
|
||||
if (entry.isBetterMatchForPackageThan(bestEntry, packageName, isStatic)) {
|
||||
if (!isModule && entry.isBetterMatchForPackageThan(bestEntry, packageName, isStatic)) {
|
||||
bestEntry = entry;
|
||||
bestEntryIndex = i;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.example;
|
||||
|
||||
|
||||
import ccc.CCC;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
|
||||
class IncorrectOrderWithoutModuleImport {
|
||||
public static void main(String[] args) {
|
||||
List<String> a = new ArrayList<String>();
|
||||
a.add("a");
|
||||
final List<String> list = asList(args);
|
||||
new CCC();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package org.example;
|
||||
|
||||
|
||||
import ccc.CCC;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import module java.base;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
|
||||
class IncorrectOrderWithoutModuleImport {
|
||||
public static void main(String[] args) {
|
||||
List<String> a = new ArrayList<String>();
|
||||
a.add("a");
|
||||
final List<String> list = asList(args);
|
||||
new CCC();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.example;
|
||||
|
||||
|
||||
import module java.base;
|
||||
import ccc.CCC;
|
||||
import static java.util.Arrays.asList;
|
||||
|
||||
class IncorrectOrderWithoutModuleImport {
|
||||
public static void main(String[] args) {
|
||||
List<String> a = new ArrayList<String>();
|
||||
a.add("a");
|
||||
final List<String> list = asList(args);
|
||||
new CCC();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.example;
|
||||
|
||||
|
||||
import ccc.CCC;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
|
||||
class IncorrectOrderWithoutModuleImport {
|
||||
public static void main(String[] args) {
|
||||
List<String> a = new ArrayList<String>();
|
||||
a.add("a");
|
||||
final List<String> list = asList(args);
|
||||
new CCC();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.example;
|
||||
|
||||
|
||||
import ccc.CCC;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import static java.util.Arrays.asList;
|
||||
|
||||
class IncorrectOrderWithoutModuleImport {
|
||||
public static void main(String[] args) {
|
||||
List<String> a = new ArrayList<String>();
|
||||
a.add("a");
|
||||
final List<String> list = asList(args);
|
||||
new CCC();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.example;
|
||||
|
||||
|
||||
import ccc.CCC;
|
||||
import static java.util.Arrays.asList;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
class IncorrectOrderWithoutModuleImport {
|
||||
public static void main(String[] args) {
|
||||
List<String> a = new ArrayList<String>();
|
||||
a.add("a");
|
||||
final List<String> list = asList(args);
|
||||
new CCC();
|
||||
}
|
||||
}
|
||||
@@ -599,6 +599,51 @@ public class OptimizeImportsTest extends OptimizeImportsTestCase {
|
||||
});
|
||||
}
|
||||
|
||||
public void testIncorrectOrderWithoutModuleImport() {
|
||||
|
||||
myFixture.addClass("package ccc; public class CCC {}");
|
||||
JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject());
|
||||
|
||||
javaSettings.IMPORT_LAYOUT_TABLE = new PackageEntryTable();
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(PackageEntry.ALL_OTHER_IMPORTS_ENTRY);
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(PackageEntry.ALL_OTHER_STATIC_IMPORTS_ENTRY);
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(PackageEntry.BLANK_LINE_ENTRY);
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(new PackageEntry(false, "java", true));
|
||||
javaSettings.setPreserveModuleImports(true);
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testIncorrectOrderWithoutModuleImportConfigWithModule() {
|
||||
IdeaTestUtil.withLevel(getModule(), JavaFeature.PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS.getMinimumLevel(), () -> {
|
||||
|
||||
myFixture.addClass("package ccc; public class CCC {}");
|
||||
JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject());
|
||||
|
||||
javaSettings.IMPORT_LAYOUT_TABLE = new PackageEntryTable();
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(PackageEntry.ALL_OTHER_IMPORTS_ENTRY);
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(PackageEntry.ALL_OTHER_STATIC_IMPORTS_ENTRY);
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(PackageEntry.BLANK_LINE_ENTRY);
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(new PackageEntry(false, "java", true));
|
||||
javaSettings.setPreserveModuleImports(true);
|
||||
doTest();
|
||||
});
|
||||
}
|
||||
|
||||
public void testIncorrectOrderWithoutModuleImportMixStaticAndNonStatic() {
|
||||
IdeaTestUtil.withLevel(getModule(), JavaFeature.PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS.getMinimumLevel(), () -> {
|
||||
|
||||
myFixture.addClass("package ccc; public class CCC {}");
|
||||
JavaCodeStyleSettings javaSettings = JavaCodeStyleSettings.getInstance(getProject());
|
||||
|
||||
javaSettings.IMPORT_LAYOUT_TABLE = new PackageEntryTable();
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(PackageEntry.BLANK_LINE_ENTRY);
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(PackageEntry.ALL_OTHER_IMPORTS_ENTRY);
|
||||
javaSettings.IMPORT_LAYOUT_TABLE.addEntry(PackageEntry.ALL_OTHER_STATIC_IMPORTS_ENTRY);
|
||||
javaSettings.setPreserveModuleImports(true);
|
||||
doTest();
|
||||
});
|
||||
}
|
||||
|
||||
public void testImportModuleOverOtherImports() {
|
||||
IdeaTestUtil.withLevel(getModule(), JavaFeature.PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS.getMinimumLevel(), () -> {
|
||||
myFixture.addClass("package aaa; public class AAA {}");
|
||||
|
||||
@@ -112,11 +112,12 @@ public class JavaCodeStyleSettingsTest extends CodeStyleTestCase {
|
||||
assertEquals(2, commonJavaSettings.getIndentOptions().INDENT_SIZE);
|
||||
assertTrue(javaSettings.JD_ALIGN_PARAM_COMMENTS);
|
||||
PackageEntryTable importsTable = javaSettings.getImportLayoutTable();
|
||||
assertEquals(new PackageEntry(false, "com.jetbrains", false), importsTable.getEntryAt(0));
|
||||
assertEquals(PackageEntry.BLANK_LINE_ENTRY, importsTable.getEntryAt(1));
|
||||
assertEquals(new PackageEntry(false, "org.eclipse.bar", false), importsTable.getEntryAt(2));
|
||||
assertEquals(PackageEntry.ALL_OTHER_STATIC_IMPORTS_ENTRY, importsTable.getEntryAt(3));
|
||||
assertEquals(new PackageEntry(true, "org.eclipse.foo", true), importsTable.getEntryAt(4));
|
||||
assertEquals(PackageEntry.ALL_MODULE_IMPORTS, importsTable.getEntryAt(0));
|
||||
assertEquals(new PackageEntry(false, "com.jetbrains", false), importsTable.getEntryAt(1));
|
||||
assertEquals(PackageEntry.BLANK_LINE_ENTRY, importsTable.getEntryAt(2));
|
||||
assertEquals(new PackageEntry(false, "org.eclipse.bar", false), importsTable.getEntryAt(3));
|
||||
assertEquals(PackageEntry.ALL_OTHER_STATIC_IMPORTS_ENTRY, importsTable.getEntryAt(4));
|
||||
assertEquals(new PackageEntry(true, "org.eclipse.foo", true), importsTable.getEntryAt(5));
|
||||
List<String> repeatAnno = javaSettings.getRepeatAnnotations();
|
||||
assertEquals(2, repeatAnno.size());
|
||||
assertEquals("com.jetbrains.First", repeatAnno.get(0));
|
||||
|
||||
Reference in New Issue
Block a user