From 4749a91268ab845f4393fff6a17d8a4bd9d0c3c0 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 25 Nov 2016 18:55:37 +0100 Subject: [PATCH] optimize imports: resolve conflicts with inner classes on-demand imports (IDEA-59199; IDEA-78746) --- .../impl/source/codeStyle/ImportHelper.java | 13 +++++--- .../ConflictingWithJavaLang.java | 33 +++++++++++++++++++ .../ConflictingWithJavaLang_after.java | 30 +++++++++++++++++ .../com/intellij/psi/OptimizeImportsTest.java | 4 +++ 4 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/psi/optimizeImports/ConflictingWithJavaLang.java create mode 100644 java/java-tests/testData/psi/optimizeImports/ConflictingWithJavaLang_after.java 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 fbb9eee75896..c5ba0e3bd652 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 @@ -311,10 +311,15 @@ public class ImportHelper{ Set set = Arrays.stream(aPackage.getClasses(resolveScope)).map(PsiClass::getName).collect(toSet()); classNames.put(onDemand, set); } - else if (isStatic && (aClass = facade.findClass(onDemand, resolveScope)) != null) { // import static foo.package1.Class1.*; - PsiMember[][] membersArray = {aClass.getInnerClasses(), aClass.getMethods(), aClass.getFields()}; - Set set = Arrays.stream(membersArray).flatMap(Arrays::stream).map(PsiMember::getName).collect(toSet()); - classNames.put(onDemand, set); + else if ((aClass = facade.findClass(onDemand, resolveScope)) != null) { // import static foo.package1.Class1.*; + if (isStatic) { + PsiMember[][] membersArray = {aClass.getInnerClasses(), aClass.getMethods(), aClass.getFields()}; + Set set = Arrays.stream(membersArray).flatMap(Arrays::stream).map(PsiMember::getName).collect(toSet()); + classNames.put(onDemand, set); + } + else { + classNames.put(onDemand, Arrays.stream(aClass.getInnerClasses()).map(PsiClass::getName).collect(toSet())); + } } else { onDemands.remove(i); diff --git a/java/java-tests/testData/psi/optimizeImports/ConflictingWithJavaLang.java b/java/java-tests/testData/psi/optimizeImports/ConflictingWithJavaLang.java new file mode 100644 index 000000000000..89e6039a0436 --- /dev/null +++ b/java/java-tests/testData/psi/optimizeImports/ConflictingWithJavaLang.java @@ -0,0 +1,33 @@ +package foo; + +import foo.A.Person; +import foo.A.OtherClass; +import foo.A.OtherClass1; +import foo.A.OtherClass2; +import foo.A.OtherClass3; +import foo.A.OtherClass4; + +class Client { + public void method(OtherClass otherClass) { + OtherClass1 o1; + OtherClass2 o2; + OtherClass3 o3; + OtherClass4 o4; + Person person = null; + } + + @Override + public String toString() { + return super.toString(); + } +} + +class A { + public interface Person {} + public static class OtherClass {} + public static class OtherClass1 {} + public static class OtherClass2 {} + public static class OtherClass3 {} + public static class OtherClass4 {} + public static class Override {} +} \ No newline at end of file diff --git a/java/java-tests/testData/psi/optimizeImports/ConflictingWithJavaLang_after.java b/java/java-tests/testData/psi/optimizeImports/ConflictingWithJavaLang_after.java new file mode 100644 index 000000000000..440e62ce0d3a --- /dev/null +++ b/java/java-tests/testData/psi/optimizeImports/ConflictingWithJavaLang_after.java @@ -0,0 +1,30 @@ +package foo; + +import foo.A.*; + +import java.lang.Override; + +class Client { + public void method(OtherClass otherClass) { + OtherClass1 o1; + OtherClass2 o2; + OtherClass3 o3; + OtherClass4 o4; + Person person = null; + } + + @Override + public String toString() { + return super.toString(); + } +} + +class A { + public interface Person {} + public static class OtherClass {} + public static class OtherClass1 {} + public static class OtherClass2 {} + public static class OtherClass3 {} + public static class OtherClass4 {} + public static class Override {} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/psi/OptimizeImportsTest.java b/java/java-tests/testSrc/com/intellij/psi/OptimizeImportsTest.java index a817cff824c0..18998d1b1a51 100644 --- a/java/java-tests/testSrc/com/intellij/psi/OptimizeImportsTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/OptimizeImportsTest.java @@ -49,6 +49,10 @@ public class OptimizeImportsTest extends OptimizeImportsTestCase { doTest(); } + public void testConflictingWithJavaLang() throws Exception { + doTest(); + } + private void doTest() throws Exception { doTest(".java"); }