java/groovy completion: suggest non-imported classes after new (IDEA-164468)

This commit is contained in:
peter
2016-12-02 14:32:31 +01:00
parent 54b8baaf47
commit 23cdae45fb
4 changed files with 26 additions and 3 deletions
@@ -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());
}
@@ -1735,4 +1735,11 @@ class Bar {
assert 'Class<? extends Number>' == LookupElementPresentation.renderElement(myFixture.lookupElements[0]).typeText
}
void testNonImportedClassAfterNew() {
def uClass = myFixture.addClass('package foo; public class U {}')
myFixture.configureByText('a.java', 'class X {{ new U<caret>x }}')
myFixture.completeBasic()
assert myFixture.lookupElements[0].object == uClass
}
}
@@ -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 &&
@@ -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<String> {
}
''', '', 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 U<caret>x')
myFixture.completeBasic()
assert myFixture.lookupElements[0].object == uClass
}
}