mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
move annotation filtering logic to completion contributors
This commit is contained in:
+4
-1
@@ -30,6 +30,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.filters.ClassFilter;
|
||||
import com.intellij.psi.filters.ElementFilter;
|
||||
import com.intellij.psi.filters.TrueFilter;
|
||||
import com.intellij.psi.filters.classes.AnnotationTypeFilter;
|
||||
import com.intellij.psi.filters.element.ExcludeDeclaredFilter;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
@@ -85,7 +86,9 @@ public class JavaClassNameCompletionContributor extends CompletionContributor {
|
||||
final PsiElement insertedElement = parameters.getPosition();
|
||||
|
||||
final ElementFilter filter =
|
||||
IN_TYPE_PARAMETER.accepts(insertedElement) ? new ExcludeDeclaredFilter(new ClassFilter(PsiTypeParameter.class)) : TrueFilter.INSTANCE;
|
||||
IN_TYPE_PARAMETER.accepts(insertedElement) ? new ExcludeDeclaredFilter(new ClassFilter(PsiTypeParameter.class)) :
|
||||
JavaCompletionContributor.ANNOTATION_NAME.accepts(insertedElement) ? new AnnotationTypeFilter() :
|
||||
TrueFilter.INSTANCE;
|
||||
|
||||
final boolean inJavaContext = parameters.getPosition() instanceof PsiIdentifier;
|
||||
final boolean afterNew = AFTER_NEW.accepts(insertedElement);
|
||||
|
||||
@@ -39,6 +39,7 @@ import com.intellij.patterns.PsiNameValuePairPattern;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.filters.*;
|
||||
import com.intellij.psi.filters.classes.AnnotationTypeFilter;
|
||||
import com.intellij.psi.filters.classes.AssignableFromContextFilter;
|
||||
import com.intellij.psi.filters.element.ExcludeDeclaredFilter;
|
||||
import com.intellij.psi.filters.element.ModifierFilter;
|
||||
@@ -75,6 +76,9 @@ public class JavaCompletionContributor extends CompletionContributor {
|
||||
ourCompletionData.put(LanguageLevel.JDK_1_3, new JavaCompletionData());
|
||||
}
|
||||
|
||||
public static final ElementPattern<PsiElement> ANNOTATION_NAME = psiElement().
|
||||
withParents(PsiJavaCodeReferenceElement.class, PsiAnnotation.class).afterLeaf("@");
|
||||
|
||||
private static JavaCompletionData getCompletionData(LanguageLevel level) {
|
||||
final Set<Map.Entry<LanguageLevel, JavaCompletionData>> entries = ourCompletionData.entrySet();
|
||||
for (Map.Entry<LanguageLevel, JavaCompletionData> entry : entries) {
|
||||
@@ -113,6 +117,10 @@ public class JavaCompletionContributor extends CompletionContributor {
|
||||
return new AndFilter(ElementClassFilter.CLASS, new NotFilter(new AssignableFromContextFilter()));
|
||||
}
|
||||
|
||||
if (ANNOTATION_NAME.accepts(position)) {
|
||||
return new AnnotationTypeFilter();
|
||||
}
|
||||
|
||||
if (JavaCompletionData.DECLARATION_START.accepts(position) ||
|
||||
JavaCompletionData.isInsideParameterList(position) ||
|
||||
psiElement().inside(psiElement(PsiJavaCodeReferenceElement.class).withParent(psiAnnotation())).accepts(position)) {
|
||||
|
||||
+2
-12
@@ -24,7 +24,6 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleSettingsFacade;
|
||||
import com.intellij.psi.filters.*;
|
||||
import com.intellij.psi.filters.classes.AnnotationTypeFilter;
|
||||
import com.intellij.psi.filters.element.ModifierFilter;
|
||||
import com.intellij.psi.impl.CheckUtil;
|
||||
import com.intellij.psi.impl.DebugUtil;
|
||||
@@ -805,11 +804,11 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme
|
||||
}
|
||||
switch (getKind()) {
|
||||
case CLASS_OR_PACKAGE_NAME_KIND:
|
||||
addClassFilter(filter);
|
||||
filter.addFilter(ElementClassFilter.CLASS);
|
||||
filter.addFilter(ElementClassFilter.PACKAGE_FILTER);
|
||||
break;
|
||||
case CLASS_NAME_KIND:
|
||||
addClassFilter(filter);
|
||||
filter.addFilter(ElementClassFilter.CLASS);
|
||||
if (isQualified()) {
|
||||
filter.addFilter(ElementClassFilter.PACKAGE_FILTER);
|
||||
}
|
||||
@@ -867,15 +866,6 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme
|
||||
return false;
|
||||
}
|
||||
|
||||
private void addClassFilter(final OrFilter filter) {
|
||||
if (getParent() instanceof PsiAnnotation) {
|
||||
filter.addFilter(new AnnotationTypeFilter());
|
||||
}
|
||||
else {
|
||||
filter.addFilter(ElementClassFilter.CLASS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement getReferenceNameElement() {
|
||||
return SourceTreeToPsiMap.treeElementToPsi(getReferenceNameNode());
|
||||
|
||||
Reference in New Issue
Block a user