Fix error keyword completion in modifier lists in parameters

This commit is contained in:
Nikolay Krasko
2012-09-07 18:41:28 +04:00
parent 4f72cd2fee
commit e043a6c699
3 changed files with 22 additions and 7 deletions
@@ -133,7 +133,8 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
@Override @Override
public boolean isAcceptable(Object element, PsiElement context) { public boolean isAcceptable(Object element, PsiElement context) {
//noinspection unchecked //noinspection unchecked
return PsiTreeUtil.getParentOfType(context, JetFile.class, false, JetClassBody.class, JetBlockExpression.class, JetFunction.class) != null && return PsiTreeUtil.getParentOfType(context, JetFile.class, false, JetClass.class, JetClassBody.class, JetBlockExpression.class,
JetFunction.class) != null &&
PsiTreeUtil.getParentOfType(context, JetParameterList.class, JetTypeParameterList.class, JetClass.class) == null; PsiTreeUtil.getParentOfType(context, JetParameterList.class, JetTypeParameterList.class, JetClass.class) == null;
} }
} }
@@ -146,10 +147,11 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
} }
} }
private static class InParametersFilter extends PositionElementFilter { private static class InParameterListsFilter extends PositionElementFilter {
@Override @Override
public boolean isAcceptable(Object element, PsiElement context) { public boolean isAcceptable(Object element, PsiElement context) {
return PsiTreeUtil.getParentOfType(context, JetParameterList.class, false) != null; //noinspection unchecked
return PsiTreeUtil.getNonStrictParentOfType(context, JetParameterList.class, JetTypeParameterList.class) != null;
} }
} }
@@ -265,9 +267,13 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
PROTECTED_KEYWORD, PUBLIC_KEYWORD, SET_KEYWORD, PROTECTED_KEYWORD, PUBLIC_KEYWORD, SET_KEYWORD,
TYPE_KEYWORD); TYPE_KEYWORD);
registerScopeKeywordsCompletion(new SuperParentFilter(new ClassFilter(JetModifierList.class)), // In modifier list but not in parameters
ABSTRACT_KEYWORD, FINAL_KEYWORD, INLINE_KEYWORD, INTERNAL_KEYWORD, registerScopeKeywordsCompletion(
OPEN_KEYWORD, PRIVATE_KEYWORD, PROTECTED_KEYWORD, PUBLIC_KEYWORD); new AndFilter(
new SuperParentFilter(new ClassFilter(JetModifierList.class)),
new NotFilter(new InParameterListsFilter())),
ABSTRACT_KEYWORD, FINAL_KEYWORD, INLINE_KEYWORD, INTERNAL_KEYWORD,
OPEN_KEYWORD, PRIVATE_KEYWORD, PROTECTED_KEYWORD, PUBLIC_KEYWORD);
registerScopeKeywordsCompletion(new InClassBodyFilter(), registerScopeKeywordsCompletion(new InClassBodyFilter(),
ABSTRACT_KEYWORD, ABSTRACT_KEYWORD,
@@ -296,7 +302,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
ELSE_KEYWORD, FALSE_KEYWORD, ELSE_KEYWORD, FALSE_KEYWORD,
NULL_KEYWORD, THIS_KEYWORD, TRUE_KEYWORD); NULL_KEYWORD, THIS_KEYWORD, TRUE_KEYWORD);
registerScopeKeywordsCompletion(new InParametersFilter(), OUT_KEYWORD); registerScopeKeywordsCompletion(new InParameterListsFilter(), OUT_KEYWORD);
// templates // templates
registerScopeKeywordsCompletion(new InWhenFilter(), registerScopeKeywordsCompletion(new InWhenFilter(),
@@ -0,0 +1,5 @@
class Test<<caret>
fun testing() {}
// ABSENT: private, public, protected, abstract
@@ -71,6 +71,10 @@ public class KeywordsCompletionTest extends JetCompletionTestBase {
doTest(); doTest();
} }
public void testInNotFinishedGenericWithFunAfter() {
doTest();
}
public void testInFunctionTypeReference() { public void testInFunctionTypeReference() {
doTest(); doTest();
} }