Completion in multi-catch

This commit is contained in:
Roman Shevchenko
2011-03-10 16:40:50 +01:00
parent 74f50e196a
commit 9593bfc3f1
12 changed files with 92 additions and 15 deletions
@@ -67,7 +67,6 @@ public class JavaClassNameCompletionContributor extends CompletionContributor {
});
}
});
}
public static void addAllClasses(CompletionParameters parameters, final CompletionResultSet result, @NotNull final Consumer<LookupElement> consumer) {
@@ -76,10 +75,12 @@ public class JavaClassNameCompletionContributor extends CompletionContributor {
final ElementFilter filter =
or(JavaSmartCompletionContributor.AFTER_THROW_NEW,
JavaCompletionContributor.INSIDE_METHOD_THROWS_CLAUSE,
JavaCompletionContributor.IN_CATCH_TYPE).accepts(insertedElement) ? new AssignableFromFilter(CommonClassNames.JAVA_LANG_THROWABLE) :
IN_TYPE_PARAMETER.accepts(insertedElement) ? new ExcludeDeclaredFilter(new ClassFilter(PsiTypeParameter.class)) :
TrueFilter.INSTANCE;
JavaCompletionContributor.IN_CATCH_TYPE,
JavaCompletionContributor.IN_MULTI_CATCH_TYPE).accepts(insertedElement)
? new AssignableFromFilter(CommonClassNames.JAVA_LANG_THROWABLE)
: IN_TYPE_PARAMETER.accepts(insertedElement)
? new ExcludeDeclaredFilter(new ClassFilter(PsiTypeParameter.class))
: TrueFilter.INSTANCE;
final boolean inJavaContext = parameters.getPosition() instanceof PsiIdentifier;
if (AFTER_NEW.accepts(insertedElement)) {
@@ -90,6 +90,9 @@ public class JavaCompletionContributor extends CompletionContributor {
psiElement().withParent(psiElement(PsiJavaCodeReferenceElement.class).withParent(PsiImportStatementBase.class));
static final PsiJavaElementPattern.Capture<PsiElement> IN_CATCH_TYPE =
psiElement().afterLeaf(psiElement().withText("(").withParent(PsiCatchSection.class));
static final ElementPattern<PsiElement> IN_MULTI_CATCH_TYPE =
or(psiElement().afterLeaf(psiElement().withText("|").withParent(PsiTypeElement.class).withSuperParent(2, PsiCatchSection.class)),
psiElement().afterLeaf(psiElement().withText("|").withParent(PsiTypeElement.class).withSuperParent(2, PsiParameter.class).withSuperParent(3, PsiCatchSection.class)));
static final PsiJavaElementPattern.Capture<PsiElement> INSIDE_METHOD_THROWS_CLAUSE = psiElement().afterLeaf(PsiKeyword.THROWS, ",").inside(
PsiMethod.class).andNot(psiElement().inside(PsiCodeBlock.class)).andNot(psiElement().inside(PsiParameterList.class));
@@ -128,7 +131,7 @@ public class JavaCompletionContributor extends CompletionContributor {
return ElementClassFilter.VARIABLE;
}
if (IN_CATCH_TYPE.accepts(position)) {
if (IN_CATCH_TYPE.accepts(position) || IN_MULTI_CATCH_TYPE.accepts(position)) {
return new AssignableFromFilter(CommonClassNames.JAVA_LANG_THROWABLE);
}