diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java index aa69cb91909b..302b3a886e4a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java @@ -76,12 +76,17 @@ public class JavaNoVariantsDelegator extends CompletionContributor { parameters.getInvocationCount() <= 1 && JavaCompletionContributor.mayStartClassName(result) && JavaCompletionContributor.isClassNamePossible(parameters) && - !JavaSmartCompletionContributor.AFTER_NEW.accepts(parameters.getPosition())) { + !areNonImportedInheritorsAlreadySuggested(parameters)) { suggestNonImportedClasses(parameters, JavaCompletionSorting.addJavaSorting(parameters, result.withPrefixMatcher(tracker.betterMatcher)), session); } } } + private static boolean areNonImportedInheritorsAlreadySuggested(@NotNull CompletionParameters parameters) { + return JavaSmartCompletionContributor.AFTER_NEW.accepts(parameters.getPosition()) && + JavaSmartCompletionContributor.getExpectedTypes(parameters).length > 0; + } + private static boolean suggestAllAnnotations(CompletionParameters parameters) { return psiElement().withParents(PsiJavaCodeReferenceElement.class, PsiAnnotation.class).accepts(parameters.getPosition()); } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index 2baf0de8f1bc..4bfd4c8b3d33 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -1735,4 +1735,11 @@ class Bar { assert 'Class' == LookupElementPresentation.renderElement(myFixture.lookupElements[0]).typeText } + void testNonImportedClassAfterNew() { + def uClass = myFixture.addClass('package foo; public class U {}') + myFixture.configureByText('a.java', 'class X {{ new Ux }}') + myFixture.completeBasic() + assert myFixture.lookupElements[0].object == uClass + } + } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java index 1bd71ae750cb..c805ffb0fb57 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java @@ -64,13 +64,18 @@ public class GroovyNoVariantsDelegator extends CompletionContributor { JavaCompletionContributor.mayStartClassName(result) && GrMainCompletionProvider.isClassNamePossible(parameters.getPosition()) && !MapArgumentCompletionProvider.isMapKeyCompletion(parameters) && - !GroovySmartCompletionContributor.AFTER_NEW.accepts(parameters.getPosition())) { + !areNonImportedInheritorsAlreadySuggested(parameters)) { result = result.withPrefixMatcher(tracker.betterMatcher); suggestNonImportedClasses(parameters, result); } } } + private static boolean areNonImportedInheritorsAlreadySuggested(@NotNull CompletionParameters parameters) { + return GroovySmartCompletionContributor.AFTER_NEW.accepts(parameters.getPosition()) && + GroovySmartCompletionContributor.getExpectedTypes(parameters).length > 0; + } + private static void delegate(CompletionParameters parameters, CompletionResultSet result) { if (parameters.getCompletionType() == CompletionType.BASIC) { if (parameters.getInvocationCount() <= 1 && diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy index af1e3eefa40c..355aab38a3cf 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy @@ -33,7 +33,6 @@ import org.jetbrains.plugins.groovy.codeStyle.GrReferenceAdjuster import org.jetbrains.plugins.groovy.codeStyle.GroovyCodeStyleSettings import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement import org.jetbrains.plugins.groovy.util.TestUtils - /** * @author Maxim.Medvedev */ @@ -1955,4 +1954,11 @@ class C implements T { } ''', '', CompletionType.BASIC, CompletionResult.contain, 1, 'public String quack') } + + void "test non-imported class after new"() { + def uClass = myFixture.addClass('package foo; public class U {}') + configure('new Ux') + myFixture.completeBasic() + assert myFixture.lookupElements[0].object == uClass + } }