Remove "ref" and "default" keywords from completion. Start using tokens for getting keyword completion constants.

This commit is contained in:
Nikolay Krasko
2012-01-25 17:32:59 +04:00
parent 9421475ef4
commit 79d5c2e3ed
4 changed files with 49 additions and 22 deletions
@@ -18,12 +18,16 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.ProcessingContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.jet.plugin.completion.handlers.JetFunctionInsertHandler;
import org.jetbrains.jet.plugin.completion.handlers.JetKeywordInsertHandler;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import static org.jetbrains.jet.lexer.JetTokens.*;
/**
* A keyword contributor for Kotlin
*
@@ -42,7 +46,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
new LeftNeighbour(new TextFilter("."))
));
private final static List<String> FUNCTION_KEYWORDS = Lists.newArrayList("get", "set");
private final static List<String> FUNCTION_KEYWORDS = Lists.newArrayList(GET_KEYWORD.toString(), SET_KEYWORD.toString());
private static class CommentFilter implements ElementFilter {
@Override
@@ -169,29 +173,58 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
public JetKeywordCompletionContributor() {
registerScopeKeywordsCompletion(new InTopFilter(),
"abstract", "class", "enum", "final", "fun", "get", "import", "inline",
"internal", "open", "package", "private", "protected", "public", "set",
"trait", "type", "val", "var");
ABSTRACT_KEYWORD, CLASS_KEYWORD, ENUM_KEYWORD,
FINAL_KEYWORD, FUN_KEYWORD, GET_KEYWORD,
IMPORT_KEYWORD, INLINE_KEYWORD, INTERNAL_KEYWORD,
OPEN_KEYWORD, PACKAGE_KEYWORD, PRIVATE_KEYWORD,
PROTECTED_KEYWORD, PUBLIC_KEYWORD, SET_KEYWORD,
TRAIT_KEYWORD, TYPE_KEYWORD, VAL_KEYWORD,
VAR_KEYWORD);
registerScopeKeywordsCompletion(new InClassBodyFilter(),
"abstract", "class", "enum", "final", "fun", "get", "inline", "internal",
"object", "open", "override", "private", "protected", "public", "set", "trait",
"type", "val", "var");
ABSTRACT_KEYWORD, CLASS_KEYWORD, ENUM_KEYWORD,
FINAL_KEYWORD, FUN_KEYWORD, GET_KEYWORD,
INLINE_KEYWORD, INTERNAL_KEYWORD, OBJECT_KEYWORD,
OPEN_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD,
PROTECTED_KEYWORD, PUBLIC_KEYWORD, SET_KEYWORD,
TRAIT_KEYWORD, TYPE_KEYWORD, VAL_KEYWORD,
VAR_KEYWORD);
registerScopeKeywordsCompletion(new InNonClassBlockFilter(),
"as", "break", "by", "catch", "class", "continue", "default", "do", "else",
"enum", "false", "finally", "for", "fun", "get", "if", "in", "inline",
"internal", "is", "null", "object", "private", "protected", "public", "ref",
"return", "set", "super", "This", "this", "throw", "trait", "true", "try",
"type", "val", "var", "vararg", "when", "where", "while");
AS_KEYWORD, BREAK_KEYWORD, BY_KEYWORD,
CATCH_KEYWORD, CLASS_KEYWORD, CONTINUE_KEYWORD,
DO_KEYWORD, ELSE_KEYWORD, ENUM_KEYWORD,
FALSE_KEYWORD, FINALLY_KEYWORD, FOR_KEYWORD,
FUN_KEYWORD, GET_KEYWORD, IF_KEYWORD,
IN_KEYWORD, INLINE_KEYWORD, INTERNAL_KEYWORD,
IS_KEYWORD, NULL_KEYWORD, OBJECT_KEYWORD,
PRIVATE_KEYWORD, PROTECTED_KEYWORD, PUBLIC_KEYWORD,
RETURN_KEYWORD, SET_KEYWORD, SUPER_KEYWORD,
CAPITALIZED_THIS_KEYWORD, THIS_KEYWORD, THROW_KEYWORD,
TRAIT_KEYWORD, TRUE_KEYWORD, TRY_KEYWORD,
TYPE_KEYWORD, VAL_KEYWORD, VAR_KEYWORD,
VARARG_KEYWORD, WHEN_KEYWORD, WHERE_KEYWORD,
WHILE_KEYWORD);
registerScopeKeywordsCompletion(new InPropertyFilter(), "else", "false", "if", "null", "this", "true");
registerScopeKeywordsCompletion(new InPropertyFilter(),
ELSE_KEYWORD, FALSE_KEYWORD, IF_KEYWORD,
NULL_KEYWORD, THIS_KEYWORD, TRUE_KEYWORD);
registerScopeKeywordsCompletion(new InParametersFilter(), "ref", "out");
registerScopeKeywordsCompletion(new InParametersFilter(), OUT_KEYWORD);
}
private void registerScopeKeywordsCompletion(final ElementFilter placeFilter, String... keywords) {
extend(CompletionType.BASIC, getPlacePattern(placeFilter), new KeywordsCompletionProvider(keywords));
private void registerScopeKeywordsCompletion(final ElementFilter placeFilter, JetToken... keywords) {
extend(CompletionType.BASIC, getPlacePattern(placeFilter),
new KeywordsCompletionProvider(convertTokensToStrings(keywords)));
}
private static String[] convertTokensToStrings(JetToken... keywords) {
final ArrayList<String> strings = new ArrayList<String>(keywords.length);
for (JetToken keyword : keywords) {
strings.add(keyword.toString());
}
return strings.toArray(new String[strings.size()]);
}
private static ElementPattern<PsiElement> getPlacePattern(final ElementFilter placeFilter) {
@@ -10,7 +10,6 @@ fun foo() {
// EXIST: catch
// EXIST: class
// EXIST: continue
// EXIST: default
// EXIST: do
// EXIST: else
// EXIST: enum
@@ -35,7 +34,6 @@ fun foo() {
// EXIST: private
// EXIST: protected
// EXIST: public
// EXIST: ref
// EXIST: return
// EXIST: set
// EXIST: super
@@ -10,7 +10,6 @@ fun test(<caret>) {
// ABSENT: catch
// ABSENT: class
// ABSENT: continue
// ABSENT: default
// ABSENT: do
// ABSENT: else
// ABSENT: enum
@@ -35,7 +34,6 @@ fun test(<caret>) {
// ABSENT: private
// ABSENT: protected
// ABSENT: public
// EXIST: ref
// ABSENT: return
// ABSENT: set
// ABSENT: super
@@ -10,7 +10,6 @@ fun foo() {
// EXIST: catch
// EXIST: class
// EXIST: continue
// EXIST: default
// EXIST: do
// EXIST: else
// EXIST: enum
@@ -35,7 +34,6 @@ fun foo() {
// EXIST: private
// EXIST: protected
// EXIST: public
// EXIST: ref
// EXIST: return
// EXIST: set
// EXIST: super