From 93d37fa7f90d81f47ed9350c15748cf92e765da8 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 11 Jul 2014 16:07:54 +0200 Subject: [PATCH] don't auto-import classes where class references are prohibited syntactically (IDEA-127190) --- .../daemon/impl/quickfix/ImportClassFix.java | 13 ++++ .../impl/quickfix/ImportClassFixBase.java | 13 +++- .../intention/AddImportActionTest.groovy | 60 +++++++++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java index b5de7b73e318..cc7a0e1352e3 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java @@ -30,6 +30,7 @@ import com.intellij.psi.*; import com.intellij.psi.util.ClassUtil; import org.jetbrains.annotations.NotNull; +import java.util.Collections; import java.util.List; public class ImportClassFix extends ImportClassFixBase { @@ -107,9 +108,21 @@ public class ImportClassFix extends ImportClassFixBase filterByContext(@NotNull List candidates, @NotNull PsiJavaCodeReferenceElement ref) { + if (ref instanceof PsiReferenceExpression) { + return Collections.emptyList(); + } + PsiElement typeElement = ref.getParent(); if (typeElement instanceof PsiTypeElement) { PsiElement var = typeElement.getParent(); diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java index 8047486d93ba..2fbe85bc7b25 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java @@ -102,14 +102,19 @@ public abstract class ImportClassFixBase classList = new ArrayList(classes.length); boolean isAnnotationReference = myElement.getParent() instanceof PsiAnnotation; @@ -140,6 +145,10 @@ public abstract class ImportClassFixBase filterByRequiredMemberName(List classList) { final String memberName = getRequiredMemberName(myElement); if (memberName != null) { diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/intention/AddImportActionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/intention/AddImportActionTest.groovy index ead75a2936e2..4b169fcc9249 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/intention/AddImportActionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/intention/AddImportActionTest.groovy @@ -177,6 +177,66 @@ class Test { ''' } + public void "test import class in class reference expression"() { + myFixture.configureByText 'a.java', ''' +class Test { + { + equals(Collection.class); + } +} +''' + importClass(); + myFixture.checkResult '''import java.util.Collection; + +class Test { + { + equals(Collection.class); + } +} +''' + } + + public void "test import class in qualifier expression"() { + myFixture.configureByText 'a.java', ''' +class Test { + { + equals(Collections.emptySet()); + } +} +''' + importClass(); + myFixture.checkResult '''import java.util.Collections; + +class Test { + { + equals(Collections.emptySet()); + } +} +''' + } + + public void "test don't import class in method call argument"() { + myFixture.configureByText 'a.java', ''' +class Test { + { + equals(Collection); + } +} +''' + assert !myFixture.filterAvailableIntentions("Import Class") + } + + public void "test don't import class in assignment"() { + myFixture.configureByText 'a.java', ''' +class Test { + { + Collection = 2; + } +} +''' + assert !myFixture.filterAvailableIntentions("Import Class") + } + private def importClass() { myFixture.launchAction(myFixture.findSingleIntention("Import Class")) }