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
public boolean isAcceptable(Object element, PsiElement context) {
//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;
}
}
@@ -146,10 +147,11 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
}
}
private static class InParametersFilter extends PositionElementFilter {
private static class InParameterListsFilter extends PositionElementFilter {
@Override
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,
TYPE_KEYWORD);
registerScopeKeywordsCompletion(new SuperParentFilter(new ClassFilter(JetModifierList.class)),
ABSTRACT_KEYWORD, FINAL_KEYWORD, INLINE_KEYWORD, INTERNAL_KEYWORD,
OPEN_KEYWORD, PRIVATE_KEYWORD, PROTECTED_KEYWORD, PUBLIC_KEYWORD);
// In modifier list but not in parameters
registerScopeKeywordsCompletion(
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(),
ABSTRACT_KEYWORD,
@@ -296,7 +302,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
ELSE_KEYWORD, FALSE_KEYWORD,
NULL_KEYWORD, THIS_KEYWORD, TRUE_KEYWORD);
registerScopeKeywordsCompletion(new InParametersFilter(), OUT_KEYWORD);
registerScopeKeywordsCompletion(new InParameterListsFilter(), OUT_KEYWORD);
// templates
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();
}
public void testInNotFinishedGenericWithFunAfter() {
doTest();
}
public void testInFunctionTypeReference() {
doTest();
}