always suggest non-imported annotations (IDEA-145447)

This commit is contained in:
peter
2015-09-23 18:08:03 +02:00
parent 5440346677
commit e3657dfb11
4 changed files with 22 additions and 14 deletions
@@ -34,7 +34,6 @@ import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
import static com.intellij.patterns.PsiJavaPatterns.psiClass;
import static com.intellij.patterns.PsiJavaPatterns.psiElement;
/**
@@ -60,7 +59,7 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
}
};
result.runRemainingContributors(parameters, tracker);
final boolean empty = tracker.containsOnlyPackages || suggestMetaAnnotations(parameters);
final boolean empty = tracker.containsOnlyPackages || suggestAllAnnotations(parameters);
if (!empty && parameters.getInvocationCount() == 0) {
result.restartCompletionWhenNothingMatches();
@@ -79,10 +78,8 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
}
}
private static boolean suggestMetaAnnotations(CompletionParameters parameters) {
PsiElement position = parameters.getPosition();
return psiElement().withParents(PsiJavaCodeReferenceElement.class, PsiAnnotation.class, PsiModifierList.class, PsiClass.class).accepts( position) &&
psiElement().withSuperParent(4, psiClass().isAnnotationType()).accepts(position);
private static boolean suggestAllAnnotations(CompletionParameters parameters) {
return psiElement().withParents(PsiJavaCodeReferenceElement.class, PsiAnnotation.class).accepts(parameters.getPosition());
}
private static void delegate(CompletionParameters parameters, final CompletionResultSet result, final InheritorsHolder inheritorsHolder) {
@@ -91,7 +88,7 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
suggestCollectionUtilities(parameters, result, position);
if (parameters.getInvocationCount() <= 1 &&
(JavaCompletionContributor.mayStartClassName(result) || suggestMetaAnnotations(parameters)) &&
(JavaCompletionContributor.mayStartClassName(result) || suggestAllAnnotations(parameters)) &&
JavaCompletionContributor.isClassNamePossible(parameters)) {
suggestNonImportedClasses(parameters, result, inheritorsHolder);
return;
@@ -0,0 +1,7 @@
class Bar {
int foo(@<caret>Object o1) {
return
}
}
@interface XAnno {}
@@ -1155,6 +1155,13 @@ class XInternalError {}
assertFirstStringItems "XInternalError", "XInternalTimerServiceController"
}
public void testNonImportedAnnotationClass() {
myFixture.addClass("package foo; public @interface XAnotherAnno {}")
configure()
type('X')
assertFirstStringItems "XAnno", "XAnotherAnno"
}
public void testMetaAnnotation() {
myFixture.configureByText "a.java", "@<caret> @interface Anno {}"
myFixture.complete(CompletionType.BASIC)
@@ -28,9 +28,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement;
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory;
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList;
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotation;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrAnnotationTypeDefinition;
import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement;
import java.util.Collections;
@@ -42,16 +40,15 @@ import java.util.Set;
*/
public class GroovyNoVariantsDelegator extends CompletionContributor {
private static boolean suggestMetaAnnotations(CompletionParameters parameters) {
PsiElement position = parameters.getPosition();
return PsiJavaPatterns.psiElement().withParents(GrCodeReferenceElement.class, GrAnnotation.class, GrModifierList.class, GrAnnotationTypeDefinition.class).accepts(position);
private static boolean suggestAnnotations(CompletionParameters parameters) {
return PsiJavaPatterns.psiElement().withParents(GrCodeReferenceElement.class, GrAnnotation.class).accepts(parameters.getPosition());
}
@Override
public void fillCompletionVariants(@NotNull final CompletionParameters parameters, @NotNull CompletionResultSet result) {
JavaNoVariantsDelegator.ResultTracker tracker = new JavaNoVariantsDelegator.ResultTracker(result);
result.runRemainingContributors(parameters, tracker);
final boolean empty = tracker.containsOnlyPackages || suggestMetaAnnotations(parameters);
final boolean empty = tracker.containsOnlyPackages || suggestAnnotations(parameters);
if (!empty && parameters.getInvocationCount() == 0) {
result.restartCompletionWhenNothingMatches();
@@ -75,7 +72,7 @@ public class GroovyNoVariantsDelegator extends CompletionContributor {
private static void delegate(CompletionParameters parameters, CompletionResultSet result) {
if (parameters.getCompletionType() == CompletionType.BASIC) {
if (parameters.getInvocationCount() <= 1 &&
(JavaCompletionContributor.mayStartClassName(result) || suggestMetaAnnotations(parameters)) &&
(JavaCompletionContributor.mayStartClassName(result) || suggestAnnotations(parameters)) &&
GrMainCompletionProvider.isClassNamePossible(parameters.getPosition()) &&
!MapArgumentCompletionProvider.isMapKeyCompletion(parameters)) {
suggestNonImportedClasses(parameters, result);