Use switch case statement instead of sequence of if comparisons in parser

This commit is contained in:
Ivan Kochurkin
2022-07-31 22:03:53 +02:00
committed by teamcity
parent 6bb2af142c
commit cf190f0cf2
10 changed files with 526 additions and 348 deletions
@@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.lexer.KtToken; import org.jetbrains.kotlin.lexer.KtToken;
public class KDocToken extends KtToken { public class KDocToken extends KtToken {
public KDocToken(@NotNull @NonNls String debugName) { public KDocToken(@NotNull @NonNls String debugName, int tokenId) {
super(debugName); super(debugName, tokenId);
} }
} }
@@ -50,14 +50,23 @@ public interface KDocTokens {
} }
}; };
KDocToken START = new KDocToken("KDOC_START"); int START_Id = 0;
KDocToken END = new KDocToken("KDOC_END"); int END_Id = 1;
KDocToken LEADING_ASTERISK = new KDocToken("KDOC_LEADING_ASTERISK"); int LEADING_ASTERISK_Id = 2;
int TEXT_Id = 3;
int CODE_BLOCK_TEXT_Id = 4;
int TAG_NAME_Id = 5;
int MARKDOWN_ESCAPED_CHAR_Id = 6;
int MARKDOWN_INLINE_LINK_Id = 7;
KDocToken TEXT = new KDocToken("KDOC_TEXT"); KDocToken START = new KDocToken("KDOC_START", START_Id);
KDocToken CODE_BLOCK_TEXT = new KDocToken("KDOC_CODE_BLOCK_TEXT"); KDocToken END = new KDocToken("KDOC_END", END_Id);
KDocToken LEADING_ASTERISK = new KDocToken("KDOC_LEADING_ASTERISK", LEADING_ASTERISK_Id);
KDocToken TAG_NAME = new KDocToken("KDOC_TAG_NAME"); KDocToken TEXT = new KDocToken("KDOC_TEXT", TEXT_Id);
KDocToken CODE_BLOCK_TEXT = new KDocToken("KDOC_CODE_BLOCK_TEXT", CODE_BLOCK_TEXT_Id);
KDocToken TAG_NAME = new KDocToken("KDOC_TAG_NAME", TAG_NAME_Id);
ILazyParseableElementType MARKDOWN_LINK = new ILazyParseableElementType("KDOC_MARKDOWN_LINK", KotlinLanguage.INSTANCE) { ILazyParseableElementType MARKDOWN_LINK = new ILazyParseableElementType("KDOC_MARKDOWN_LINK", KotlinLanguage.INSTANCE) {
@Override @Override
public ASTNode parseContents(ASTNode chameleon) { public ASTNode parseContents(ASTNode chameleon) {
@@ -65,9 +74,8 @@ public interface KDocTokens {
} }
}; };
KDocToken MARKDOWN_ESCAPED_CHAR = new KDocToken("KDOC_MARKDOWN_ESCAPED_CHAR"); KDocToken MARKDOWN_ESCAPED_CHAR = new KDocToken("KDOC_MARKDOWN_ESCAPED_CHAR", MARKDOWN_ESCAPED_CHAR_Id);
KDocToken MARKDOWN_INLINE_LINK = new KDocToken("KDOC_MARKDOWN_INLINE_LINK"); KDocToken MARKDOWN_INLINE_LINK = new KDocToken("KDOC_MARKDOWN_INLINE_LINK", MARKDOWN_INLINE_LINK_Id);
TokenSet KDOC_HIGHLIGHT_TOKENS = TokenSet.create(START, END, LEADING_ASTERISK, TEXT, CODE_BLOCK_TEXT, MARKDOWN_LINK, MARKDOWN_ESCAPED_CHAR, MARKDOWN_INLINE_LINK); TokenSet KDOC_HIGHLIGHT_TOKENS = TokenSet.create(START, END, LEADING_ASTERISK, TEXT, CODE_BLOCK_TEXT, MARKDOWN_LINK, MARKDOWN_ESCAPED_CHAR, MARKDOWN_INLINE_LINK);
TokenSet CONTENT_TOKENS = TokenSet.create(TEXT, CODE_BLOCK_TEXT, TAG_NAME, MARKDOWN_LINK, MARKDOWN_ESCAPED_CHAR, MARKDOWN_INLINE_LINK); TokenSet CONTENT_TOKENS = TokenSet.create(TEXT, CODE_BLOCK_TEXT, TAG_NAME, MARKDOWN_LINK, MARKDOWN_ESCAPED_CHAR, MARKDOWN_INLINE_LINK);
} }
@@ -24,25 +24,25 @@ public class KtKeywordToken extends KtSingleValueToken {
/** /**
* Generate keyword (identifier that has a keyword meaning in all possible contexts) * Generate keyword (identifier that has a keyword meaning in all possible contexts)
*/ */
public static KtKeywordToken keyword(String value) { public static KtKeywordToken keyword(String value, int tokenId) {
return keyword(value, value); return keyword(value, value, tokenId);
} }
public static KtKeywordToken keyword(String debugName, String value) { public static KtKeywordToken keyword(String debugName, String value, int tokenId) {
return new KtKeywordToken(debugName, value, false); return new KtKeywordToken(debugName, value, false, tokenId);
} }
/** /**
* Generate soft keyword (identifier that has a keyword meaning only in some contexts) * Generate soft keyword (identifier that has a keyword meaning only in some contexts)
*/ */
public static KtKeywordToken softKeyword(String value) { public static KtKeywordToken softKeyword(String value, int tokenId) {
return new KtKeywordToken(value, value, true); return new KtKeywordToken(value, value, true, tokenId);
} }
private final boolean myIsSoft; private final boolean myIsSoft;
protected KtKeywordToken(@NotNull @NonNls String debugName, @NotNull @NonNls String value, boolean isSoft) { protected KtKeywordToken(@NotNull @NonNls String debugName, @NotNull @NonNls String value, boolean isSoft, int tokenId) {
super(debugName, value); super(debugName, value, tokenId);
myIsSoft = isSoft; myIsSoft = isSoft;
} }
@@ -25,18 +25,18 @@ public final class KtModifierKeywordToken extends KtKeywordToken {
/** /**
* Generate keyword (identifier that has a keyword meaning in all possible contexts) * Generate keyword (identifier that has a keyword meaning in all possible contexts)
*/ */
public static KtModifierKeywordToken keywordModifier(String value) { public static KtModifierKeywordToken keywordModifier(String value, int tokenId) {
return new KtModifierKeywordToken(value, value, false); return new KtModifierKeywordToken(value, value, false, tokenId);
} }
/** /**
* Generate soft keyword (identifier that has a keyword meaning only in some contexts) * Generate soft keyword (identifier that has a keyword meaning only in some contexts)
*/ */
public static KtModifierKeywordToken softKeywordModifier(String value) { public static KtModifierKeywordToken softKeywordModifier(String value, int tokenId) {
return new KtModifierKeywordToken(value, value, true); return new KtModifierKeywordToken(value, value, true, tokenId);
} }
private KtModifierKeywordToken(@NotNull @NonNls String debugName, @NotNull @NonNls String value, boolean isSoft) { private KtModifierKeywordToken(@NotNull @NonNls String debugName, @NotNull @NonNls String value, boolean isSoft, int tokenId) {
super(debugName, value, isSoft); super(debugName, value, isSoft, tokenId);
} }
} }
@@ -20,11 +20,10 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class KtSingleValueToken extends KtToken { public class KtSingleValueToken extends KtToken {
private final String myValue; private final String myValue;
public KtSingleValueToken(@NotNull @NonNls String debugName, @NotNull @NonNls String value) { public KtSingleValueToken(@NotNull @NonNls String debugName, @NotNull @NonNls String value, int tokenId) {
super(debugName); super(debugName, tokenId);
myValue = value; myValue = value;
} }
@@ -22,7 +22,10 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.idea.KotlinLanguage; import org.jetbrains.kotlin.idea.KotlinLanguage;
public class KtToken extends IElementType { public class KtToken extends IElementType {
public KtToken(@NotNull @NonNls String debugName) { public final int tokenId;
public KtToken(@NotNull @NonNls String debugName, int tokenId) {
super(debugName, KotlinLanguage.INSTANCE); super(debugName, KotlinLanguage.INSTANCE);
this.tokenId = tokenId;
} }
} }
@@ -26,181 +26,331 @@ import static org.jetbrains.kotlin.KtNodeTypes.DOT_QUALIFIED_EXPRESSION;
import static org.jetbrains.kotlin.KtNodeTypes.SAFE_ACCESS_EXPRESSION; import static org.jetbrains.kotlin.KtNodeTypes.SAFE_ACCESS_EXPRESSION;
public interface KtTokens { public interface KtTokens {
KtToken EOF = new KtToken("EOF"); int INVALID_Id = 0;
int EOF_Id = 1;
int RESERVED_Id = 2;
int BLOCK_COMMENT_Id = 3;
int EOL_COMMENT_Id = 4;
int SHEBANG_COMMENT_Id = 5;
int INTEGER_LITERAL_Id = 6;
int FLOAT_LITERAL_Id = 7;
int CHARACTER_LITERAL_Id = 8;
int CLOSING_QUOTE_Id = 9;
int OPEN_QUOTE_Id = 10;
int REGULAR_STRING_PART_Id = 11;
int ESCAPE_SEQUENCE_Id = 12;
int SHORT_TEMPLATE_ENTRY_START_Id = 13;
int LONG_TEMPLATE_ENTRY_START_Id = 14;
int LONG_TEMPLATE_ENTRY_END_Id = 15;
int DANGLING_NEWLINE_Id = 16;
int PACKAGE_KEYWORD_Id = 17;
int AS_KEYWORD_Id = 18;
int TYPE_ALIAS_KEYWORD_Id = 19;
int CLASS_KEYWORD_Id = 20;
int THIS_KEYWORD_Id = 21;
int SUPER_KEYWORD_Id = 22;
int VAL_KEYWORD_Id = 23;
int VAR_KEYWORD_Id = 24;
int FUN_KEYWORD_Id = 25;
int FOR_KEYWORD_Id = 26;
int NULL_KEYWORD_Id = 27;
int TRUE_KEYWORD_Id = 28;
int FALSE_KEYWORD_Id = 29;
int IS_KEYWORD_Id = 30;
int IN_KEYWORD_Id = 31;
int THROW_KEYWORD_Id = 32;
int RETURN_KEYWORD_Id = 33;
int BREAK_KEYWORD_Id = 34;
int CONTINUE_KEYWORD_Id = 35;
int OBJECT_KEYWORD_Id = 36;
int IF_KEYWORD_Id = 37;
int TRY_KEYWORD_Id = 38;
int ELSE_KEYWORD_Id = 39;
int WHILE_KEYWORD_Id = 40;
int DO_KEYWORD_Id = 41;
int WHEN_KEYWORD_Id = 42;
int INTERFACE_KEYWORD_Id = 43;
int TYPEOF_KEYWORD_Id = 44;
int AS_SAFE_Id = 45;
int IDENTIFIER_Id = 46;
int FIELD_IDENTIFIER_Id = 47;
int LBRACKET_Id = 48;
int RBRACKET_Id = 49;
int LBRACE_Id = 50;
int RBRACE_Id = 51;
int LPAR_Id = 52;
int RPAR_Id = 53;
int DOT_Id = 54;
int PLUSPLUS_Id = 55;
int MINUSMINUS_Id = 56;
int MUL_Id = 57;
int PLUS_Id = 58;
int MINUS_Id = 59;
int EXCL_Id = 60;
int DIV_Id = 61;
int PERC_Id = 62;
int LT_Id = 63;
int GT_Id = 64;
int LTEQ_Id = 65;
int GTEQ_Id = 66;
int EQEQEQ_Id = 67;
int ARROW_Id = 68;
int DOUBLE_ARROW_Id = 69;
int EXCLEQEQEQ_Id = 70;
int EQEQ_Id = 71;
int EXCLEQ_Id = 72;
int EXCLEXCL_Id = 73;
int ANDAND_Id = 74;
int AND_Id = 75;
int OROR_Id = 76;
int SAFE_ACCESS_Id = 77;
int ELVIS_Id = 78;
int QUEST_Id = 79;
int COLONCOLON_Id = 80;
int COLON_Id = 81;
int SEMICOLON_Id = 82;
int DOUBLE_SEMICOLON_Id = 83;
int RANGE_Id = 84;
int RANGE_UNTIL_Id = 85;
int EQ_Id = 86;
int MULTEQ_Id = 87;
int DIVEQ_Id = 88;
int PERCEQ_Id = 89;
int PLUSEQ_Id = 90;
int MINUSEQ_Id = 91;
int NOT_IN_Id = 92;
int NOT_IS_Id = 93;
int HASH_Id = 94;
int AT_Id = 95;
int COMMA_Id = 96;
int EOL_OR_SEMICOLON_Id = 97;
int FILE_KEYWORD_Id = 98;
int FIELD_KEYWORD_Id = 99;
int PROPERTY_KEYWORD_Id = 100;
int RECEIVER_KEYWORD_Id = 101;
int PARAM_KEYWORD_Id = 102;
int SETPARAM_KEYWORD_Id = 103;
int DELEGATE_KEYWORD_Id = 104;
int IMPORT_KEYWORD_Id = 105;
int WHERE_KEYWORD_Id = 106;
int BY_KEYWORD_Id = 107;
int GET_KEYWORD_Id = 108;
int SET_KEYWORD_Id = 109;
int CONSTRUCTOR_KEYWORD_Id = 110;
int INIT_KEYWORD_Id = 111;
int CONTEXT_KEYWORD_Id = 112;
int ABSTRACT_KEYWORD_Id = 113;
int ENUM_KEYWORD_Id = 114;
int CONTRACT_KEYWORD_Id = 115;
int OPEN_KEYWORD_Id = 116;
int INNER_KEYWORD_Id = 117;
int OVERRIDE_KEYWORD_Id = 118;
int PRIVATE_KEYWORD_Id = 119;
int PUBLIC_KEYWORD_Id = 120;
int INTERNAL_KEYWORD_Id = 121;
int PROTECTED_KEYWORD_Id = 122;
int CATCH_KEYWORD_Id = 123;
int OUT_KEYWORD_Id = 124;
int VARARG_KEYWORD_Id = 125;
int REIFIED_KEYWORD_Id = 126;
int DYNAMIC_KEYWORD_Id = 127;
int COMPANION_KEYWORD_Id = 128;
int SEALED_KEYWORD_Id = 129;
int FINALLY_KEYWORD_Id = 130;
int FINAL_KEYWORD_Id = 131;
int LATEINIT_KEYWORD_Id = 132;
int DATA_KEYWORD_Id = 133;
int VALUE_KEYWORD_Id = 134;
int INLINE_KEYWORD_Id = 135;
int NOINLINE_KEYWORD_Id = 136;
int TAILREC_KEYWORD_Id = 137;
int EXTERNAL_KEYWORD_Id = 138;
int ANNOTATION_KEYWORD_Id = 139;
int CROSSINLINE_KEYWORD_Id = 140;
int OPERATOR_KEYWORD_Id = 141;
int INFIX_KEYWORD_Id = 142;
int CONST_KEYWORD_Id = 143;
int SUSPEND_KEYWORD_Id = 144;
int HEADER_KEYWORD_Id = 145;
int IMPL_KEYWORD_Id = 146;
int EXPECT_KEYWORD_Id = 147;
int ACTUAL_KEYWORD_Id = 148;
KtToken RESERVED = new KtToken("RESERVED"); KtToken EOF = new KtToken("EOF", EOF_Id);
KtToken BLOCK_COMMENT = new KtToken("BLOCK_COMMENT"); KtToken RESERVED = new KtToken("RESERVED", RESERVED_Id);
KtToken EOL_COMMENT = new KtToken("EOL_COMMENT");
KtToken SHEBANG_COMMENT = new KtToken("SHEBANG_COMMENT"); KtToken BLOCK_COMMENT = new KtToken("BLOCK_COMMENT", BLOCK_COMMENT_Id);
KtToken EOL_COMMENT = new KtToken("EOL_COMMENT", EOL_COMMENT_Id);
KtToken SHEBANG_COMMENT = new KtToken("SHEBANG_COMMENT", SHEBANG_COMMENT_Id);
//KtToken DOC_COMMENT = new KtToken("DOC_COMMENT");
IElementType DOC_COMMENT = KDocTokens.KDOC; IElementType DOC_COMMENT = KDocTokens.KDOC;
IElementType WHITE_SPACE = TokenType.WHITE_SPACE; IElementType WHITE_SPACE = TokenType.WHITE_SPACE;
KtToken INTEGER_LITERAL = new KtToken("INTEGER_LITERAL"); KtToken INTEGER_LITERAL = new KtToken("INTEGER_LITERAL", INTEGER_LITERAL_Id);
KtToken FLOAT_LITERAL = new KtToken("FLOAT_CONSTANT"); KtToken FLOAT_LITERAL = new KtToken("FLOAT_CONSTANT", FLOAT_LITERAL_Id);
KtToken CHARACTER_LITERAL = new KtToken("CHARACTER_LITERAL"); KtToken CHARACTER_LITERAL = new KtToken("CHARACTER_LITERAL", CHARACTER_LITERAL_Id);
KtToken CLOSING_QUOTE = new KtToken("CLOSING_QUOTE"); KtToken CLOSING_QUOTE = new KtToken("CLOSING_QUOTE", CLOSING_QUOTE_Id);
KtToken OPEN_QUOTE = new KtToken("OPEN_QUOTE"); KtToken OPEN_QUOTE = new KtToken("OPEN_QUOTE", OPEN_QUOTE_Id);
KtToken REGULAR_STRING_PART = new KtToken("REGULAR_STRING_PART"); KtToken REGULAR_STRING_PART = new KtToken("REGULAR_STRING_PART", REGULAR_STRING_PART_Id);
KtToken ESCAPE_SEQUENCE = new KtToken("ESCAPE_SEQUENCE"); KtToken ESCAPE_SEQUENCE = new KtToken("ESCAPE_SEQUENCE", ESCAPE_SEQUENCE_Id);
KtToken SHORT_TEMPLATE_ENTRY_START = new KtToken("SHORT_TEMPLATE_ENTRY_START"); KtToken SHORT_TEMPLATE_ENTRY_START = new KtToken("SHORT_TEMPLATE_ENTRY_START", SHORT_TEMPLATE_ENTRY_START_Id);
KtToken LONG_TEMPLATE_ENTRY_START = new KtToken("LONG_TEMPLATE_ENTRY_START"); KtToken LONG_TEMPLATE_ENTRY_START = new KtToken("LONG_TEMPLATE_ENTRY_START", LONG_TEMPLATE_ENTRY_START_Id);
KtToken LONG_TEMPLATE_ENTRY_END = new KtToken("LONG_TEMPLATE_ENTRY_END"); KtToken LONG_TEMPLATE_ENTRY_END = new KtToken("LONG_TEMPLATE_ENTRY_END", LONG_TEMPLATE_ENTRY_END_Id);
KtToken DANGLING_NEWLINE = new KtToken("DANGLING_NEWLINE"); KtToken DANGLING_NEWLINE = new KtToken("DANGLING_NEWLINE", DANGLING_NEWLINE_Id);
KtKeywordToken PACKAGE_KEYWORD = KtKeywordToken.keyword("package"); KtKeywordToken PACKAGE_KEYWORD = KtKeywordToken.keyword("package", PACKAGE_KEYWORD_Id);
KtKeywordToken AS_KEYWORD = KtKeywordToken.keyword("as"); KtKeywordToken AS_KEYWORD = KtKeywordToken.keyword("as", AS_KEYWORD_Id);
KtKeywordToken TYPE_ALIAS_KEYWORD = KtKeywordToken.keyword("typealias"); KtKeywordToken TYPE_ALIAS_KEYWORD = KtKeywordToken.keyword("typealias", TYPE_ALIAS_KEYWORD_Id);
KtKeywordToken CLASS_KEYWORD = KtKeywordToken.keyword("class"); KtKeywordToken CLASS_KEYWORD = KtKeywordToken.keyword("class", CLASS_KEYWORD_Id);
KtKeywordToken THIS_KEYWORD = KtKeywordToken.keyword("this"); KtKeywordToken THIS_KEYWORD = KtKeywordToken.keyword("this", THIS_KEYWORD_Id);
KtKeywordToken SUPER_KEYWORD = KtKeywordToken.keyword("super"); KtKeywordToken SUPER_KEYWORD = KtKeywordToken.keyword("super", SUPER_KEYWORD_Id);
KtKeywordToken VAL_KEYWORD = KtKeywordToken.keyword("val"); KtKeywordToken VAL_KEYWORD = KtKeywordToken.keyword("val", VAL_KEYWORD_Id);
KtKeywordToken VAR_KEYWORD = KtKeywordToken.keyword("var"); KtKeywordToken VAR_KEYWORD = KtKeywordToken.keyword("var", VAR_KEYWORD_Id);
KtModifierKeywordToken FUN_KEYWORD = KtModifierKeywordToken.keywordModifier("fun"); KtModifierKeywordToken FUN_KEYWORD = KtModifierKeywordToken.keywordModifier("fun", FUN_KEYWORD_Id);
KtKeywordToken FOR_KEYWORD = KtKeywordToken.keyword("for"); KtKeywordToken FOR_KEYWORD = KtKeywordToken.keyword("for", FOR_KEYWORD_Id);
KtKeywordToken NULL_KEYWORD = KtKeywordToken.keyword("null"); KtKeywordToken NULL_KEYWORD = KtKeywordToken.keyword("null", NULL_KEYWORD_Id);
KtKeywordToken TRUE_KEYWORD = KtKeywordToken.keyword("true"); KtKeywordToken TRUE_KEYWORD = KtKeywordToken.keyword("true", TRUE_KEYWORD_Id);
KtKeywordToken FALSE_KEYWORD = KtKeywordToken.keyword("false"); KtKeywordToken FALSE_KEYWORD = KtKeywordToken.keyword("false", FALSE_KEYWORD_Id);
KtKeywordToken IS_KEYWORD = KtKeywordToken.keyword("is"); KtKeywordToken IS_KEYWORD = KtKeywordToken.keyword("is", IS_KEYWORD_Id);
KtModifierKeywordToken IN_KEYWORD = KtModifierKeywordToken.keywordModifier("in"); KtModifierKeywordToken IN_KEYWORD = KtModifierKeywordToken.keywordModifier("in", IN_KEYWORD_Id);
KtKeywordToken THROW_KEYWORD = KtKeywordToken.keyword("throw"); KtKeywordToken THROW_KEYWORD = KtKeywordToken.keyword("throw", THROW_KEYWORD_Id);
KtKeywordToken RETURN_KEYWORD = KtKeywordToken.keyword("return"); KtKeywordToken RETURN_KEYWORD = KtKeywordToken.keyword("return", RETURN_KEYWORD_Id);
KtKeywordToken BREAK_KEYWORD = KtKeywordToken.keyword("break"); KtKeywordToken BREAK_KEYWORD = KtKeywordToken.keyword("break", BREAK_KEYWORD_Id);
KtKeywordToken CONTINUE_KEYWORD = KtKeywordToken.keyword("continue"); KtKeywordToken CONTINUE_KEYWORD = KtKeywordToken.keyword("continue", CONTINUE_KEYWORD_Id);
KtKeywordToken OBJECT_KEYWORD = KtKeywordToken.keyword("object"); KtKeywordToken OBJECT_KEYWORD = KtKeywordToken.keyword("object", OBJECT_KEYWORD_Id);
KtKeywordToken IF_KEYWORD = KtKeywordToken.keyword("if"); KtKeywordToken IF_KEYWORD = KtKeywordToken.keyword("if", IF_KEYWORD_Id);
KtKeywordToken TRY_KEYWORD = KtKeywordToken.keyword("try"); KtKeywordToken TRY_KEYWORD = KtKeywordToken.keyword("try", TRY_KEYWORD_Id);
KtKeywordToken ELSE_KEYWORD = KtKeywordToken.keyword("else"); KtKeywordToken ELSE_KEYWORD = KtKeywordToken.keyword("else", ELSE_KEYWORD_Id);
KtKeywordToken WHILE_KEYWORD = KtKeywordToken.keyword("while"); KtKeywordToken WHILE_KEYWORD = KtKeywordToken.keyword("while", WHILE_KEYWORD_Id);
KtKeywordToken DO_KEYWORD = KtKeywordToken.keyword("do"); KtKeywordToken DO_KEYWORD = KtKeywordToken.keyword("do", DO_KEYWORD_Id);
KtKeywordToken WHEN_KEYWORD = KtKeywordToken.keyword("when"); KtKeywordToken WHEN_KEYWORD = KtKeywordToken.keyword("when", WHEN_KEYWORD_Id);
KtKeywordToken INTERFACE_KEYWORD = KtKeywordToken.keyword("interface"); KtKeywordToken INTERFACE_KEYWORD = KtKeywordToken.keyword("interface", INTERFACE_KEYWORD_Id);
// Reserved for future use: // Reserved for future use:
KtKeywordToken TYPEOF_KEYWORD = KtKeywordToken.keyword("typeof"); KtKeywordToken TYPEOF_KEYWORD = KtKeywordToken.keyword("typeof", TYPEOF_KEYWORD_Id);
KtToken AS_SAFE = KtKeywordToken.keyword("AS_SAFE");//new KtToken("as?"); KtToken AS_SAFE = KtKeywordToken.keyword("AS_SAFE", AS_SAFE_Id);
KtToken IDENTIFIER = new KtToken("IDENTIFIER"); KtToken IDENTIFIER = new KtToken("IDENTIFIER", IDENTIFIER_Id);
KtToken FIELD_IDENTIFIER = new KtToken("FIELD_IDENTIFIER"); KtToken FIELD_IDENTIFIER = new KtToken("FIELD_IDENTIFIER", FIELD_IDENTIFIER_Id);
KtSingleValueToken LBRACKET = new KtSingleValueToken("LBRACKET", "["); KtSingleValueToken LBRACKET = new KtSingleValueToken("LBRACKET", "[", LBRACKET_Id);
KtSingleValueToken RBRACKET = new KtSingleValueToken("RBRACKET", "]"); KtSingleValueToken RBRACKET = new KtSingleValueToken("RBRACKET", "]", RBRACKET_Id);
KtSingleValueToken LBRACE = new KtSingleValueToken("LBRACE", "{"); KtSingleValueToken LBRACE = new KtSingleValueToken("LBRACE", "{", LBRACE_Id);
KtSingleValueToken RBRACE = new KtSingleValueToken("RBRACE", "}"); KtSingleValueToken RBRACE = new KtSingleValueToken("RBRACE", "}", RBRACE_Id);
KtSingleValueToken LPAR = new KtSingleValueToken("LPAR", "("); KtSingleValueToken LPAR = new KtSingleValueToken("LPAR", "(", LPAR_Id);
KtSingleValueToken RPAR = new KtSingleValueToken("RPAR", ")"); KtSingleValueToken RPAR = new KtSingleValueToken("RPAR", ")", RPAR_Id);
KtSingleValueToken DOT = new KtSingleValueToken("DOT", "."); KtSingleValueToken DOT = new KtSingleValueToken("DOT", ".", DOT_Id);
KtSingleValueToken PLUSPLUS = new KtSingleValueToken("PLUSPLUS", "++"); KtSingleValueToken PLUSPLUS = new KtSingleValueToken("PLUSPLUS", "++", PLUSPLUS_Id);
KtSingleValueToken MINUSMINUS = new KtSingleValueToken("MINUSMINUS", "--"); KtSingleValueToken MINUSMINUS = new KtSingleValueToken("MINUSMINUS", "--", MINUSMINUS_Id);
KtSingleValueToken MUL = new KtSingleValueToken("MUL", "*"); KtSingleValueToken MUL = new KtSingleValueToken("MUL", "*", MUL_Id);
KtSingleValueToken PLUS = new KtSingleValueToken("PLUS", "+"); KtSingleValueToken PLUS = new KtSingleValueToken("PLUS", "+", PLUS_Id);
KtSingleValueToken MINUS = new KtSingleValueToken("MINUS", "-"); KtSingleValueToken MINUS = new KtSingleValueToken("MINUS", "-", MINUS_Id);
KtSingleValueToken EXCL = new KtSingleValueToken("EXCL", "!"); KtSingleValueToken EXCL = new KtSingleValueToken("EXCL", "!", EXCL_Id);
KtSingleValueToken DIV = new KtSingleValueToken("DIV", "/"); KtSingleValueToken DIV = new KtSingleValueToken("DIV", "/", DIV_Id);
KtSingleValueToken PERC = new KtSingleValueToken("PERC", "%"); KtSingleValueToken PERC = new KtSingleValueToken("PERC", "%", PERC_Id);
KtSingleValueToken LT = new KtSingleValueToken("LT", "<"); KtSingleValueToken LT = new KtSingleValueToken("LT", "<", LT_Id);
KtSingleValueToken GT = new KtSingleValueToken("GT", ">"); KtSingleValueToken GT = new KtSingleValueToken("GT", ">", GT_Id);
KtSingleValueToken LTEQ = new KtSingleValueToken("LTEQ", "<="); KtSingleValueToken LTEQ = new KtSingleValueToken("LTEQ", "<=", LTEQ_Id);
KtSingleValueToken GTEQ = new KtSingleValueToken("GTEQ", ">="); KtSingleValueToken GTEQ = new KtSingleValueToken("GTEQ", ">=", GTEQ_Id);
KtSingleValueToken EQEQEQ = new KtSingleValueToken("EQEQEQ", "==="); KtSingleValueToken EQEQEQ = new KtSingleValueToken("EQEQEQ", "===", EQEQEQ_Id);
KtSingleValueToken ARROW = new KtSingleValueToken("ARROW", "->"); KtSingleValueToken ARROW = new KtSingleValueToken("ARROW", "->", ARROW_Id);
KtSingleValueToken DOUBLE_ARROW = new KtSingleValueToken("DOUBLE_ARROW", "=>"); KtSingleValueToken DOUBLE_ARROW = new KtSingleValueToken("DOUBLE_ARROW", "=>", DOUBLE_ARROW_Id);
KtSingleValueToken EXCLEQEQEQ = new KtSingleValueToken("EXCLEQEQEQ", "!=="); KtSingleValueToken EXCLEQEQEQ = new KtSingleValueToken("EXCLEQEQEQ", "!==", EXCLEQEQEQ_Id);
KtSingleValueToken EQEQ = new KtSingleValueToken("EQEQ", "=="); KtSingleValueToken EQEQ = new KtSingleValueToken("EQEQ", "==", EQEQ_Id);
KtSingleValueToken EXCLEQ = new KtSingleValueToken("EXCLEQ", "!="); KtSingleValueToken EXCLEQ = new KtSingleValueToken("EXCLEQ", "!=", EXCLEQ_Id);
KtSingleValueToken EXCLEXCL = new KtSingleValueToken("EXCLEXCL", "!!"); KtSingleValueToken EXCLEXCL = new KtSingleValueToken("EXCLEXCL", "!!", EXCLEXCL_Id);
KtSingleValueToken ANDAND = new KtSingleValueToken("ANDAND", "&&"); KtSingleValueToken ANDAND = new KtSingleValueToken("ANDAND", "&&", ANDAND_Id);
KtSingleValueToken AND = new KtSingleValueToken("AND", "&"); KtSingleValueToken AND = new KtSingleValueToken("AND", "&", AND_Id);
KtSingleValueToken OROR = new KtSingleValueToken("OROR", "||"); KtSingleValueToken OROR = new KtSingleValueToken("OROR", "||", OROR_Id);
KtSingleValueToken SAFE_ACCESS = new KtSingleValueToken("SAFE_ACCESS", "?."); KtSingleValueToken SAFE_ACCESS = new KtSingleValueToken("SAFE_ACCESS", "?.", SAFE_ACCESS_Id);
KtSingleValueToken ELVIS = new KtSingleValueToken("ELVIS", "?:"); KtSingleValueToken ELVIS = new KtSingleValueToken("ELVIS", "?:", ELVIS_Id);
KtSingleValueToken QUEST = new KtSingleValueToken("QUEST", "?"); KtSingleValueToken QUEST = new KtSingleValueToken("QUEST", "?", QUEST_Id);
KtSingleValueToken COLONCOLON = new KtSingleValueToken("COLONCOLON", "::"); KtSingleValueToken COLONCOLON = new KtSingleValueToken("COLONCOLON", "::", COLONCOLON_Id);
KtSingleValueToken COLON = new KtSingleValueToken("COLON", ":"); KtSingleValueToken COLON = new KtSingleValueToken("COLON", ":", COLON_Id);
KtSingleValueToken SEMICOLON = new KtSingleValueToken("SEMICOLON", ";"); KtSingleValueToken SEMICOLON = new KtSingleValueToken("SEMICOLON", ";", SEMICOLON_Id);
KtSingleValueToken DOUBLE_SEMICOLON = new KtSingleValueToken("DOUBLE_SEMICOLON", ";;"); KtSingleValueToken DOUBLE_SEMICOLON = new KtSingleValueToken("DOUBLE_SEMICOLON", ";;", DOUBLE_SEMICOLON_Id);
KtSingleValueToken RANGE = new KtSingleValueToken("RANGE", ".."); KtSingleValueToken RANGE = new KtSingleValueToken("RANGE", "..", RANGE_Id);
KtSingleValueToken RANGE_UNTIL = new KtSingleValueToken("RANGE_UNTIL", "..<"); KtSingleValueToken RANGE_UNTIL = new KtSingleValueToken("RANGE_UNTIL", "..<", RANGE_UNTIL_Id);
KtSingleValueToken EQ = new KtSingleValueToken("EQ", "="); KtSingleValueToken EQ = new KtSingleValueToken("EQ", "=", EQ_Id);
KtSingleValueToken MULTEQ = new KtSingleValueToken("MULTEQ", "*="); KtSingleValueToken MULTEQ = new KtSingleValueToken("MULTEQ", "*=", MULTEQ_Id);
KtSingleValueToken DIVEQ = new KtSingleValueToken("DIVEQ", "/="); KtSingleValueToken DIVEQ = new KtSingleValueToken("DIVEQ", "/=", DIVEQ_Id);
KtSingleValueToken PERCEQ = new KtSingleValueToken("PERCEQ", "%="); KtSingleValueToken PERCEQ = new KtSingleValueToken("PERCEQ", "%=", PERCEQ_Id);
KtSingleValueToken PLUSEQ = new KtSingleValueToken("PLUSEQ", "+="); KtSingleValueToken PLUSEQ = new KtSingleValueToken("PLUSEQ", "+=", PLUSEQ_Id);
KtSingleValueToken MINUSEQ = new KtSingleValueToken("MINUSEQ", "-="); KtSingleValueToken MINUSEQ = new KtSingleValueToken("MINUSEQ", "-=", MINUSEQ_Id);
KtKeywordToken NOT_IN = KtKeywordToken.keyword("NOT_IN", "!in"); KtKeywordToken NOT_IN = KtKeywordToken.keyword("NOT_IN", "!in", NOT_IN_Id);
KtKeywordToken NOT_IS = KtKeywordToken.keyword("NOT_IS", "!is"); KtKeywordToken NOT_IS = KtKeywordToken.keyword("NOT_IS", "!is", NOT_IS_Id);
KtSingleValueToken HASH = new KtSingleValueToken("HASH", "#"); KtSingleValueToken HASH = new KtSingleValueToken("HASH", "#", HASH_Id);
KtSingleValueToken AT = new KtSingleValueToken("AT", "@"); KtSingleValueToken AT = new KtSingleValueToken("AT", "@", AT_Id);
KtSingleValueToken COMMA = new KtSingleValueToken("COMMA", ","); KtSingleValueToken COMMA = new KtSingleValueToken("COMMA", ",", COMMA_Id);
KtToken EOL_OR_SEMICOLON = new KtToken("EOL_OR_SEMICOLON"); KtToken EOL_OR_SEMICOLON = new KtToken("EOL_OR_SEMICOLON", EOL_OR_SEMICOLON_Id);
KtKeywordToken FILE_KEYWORD = KtKeywordToken.softKeyword("file"); KtKeywordToken FILE_KEYWORD = KtKeywordToken.softKeyword("file", FILE_KEYWORD_Id);
KtKeywordToken FIELD_KEYWORD = KtKeywordToken.softKeyword("field"); KtKeywordToken FIELD_KEYWORD = KtKeywordToken.softKeyword("field", FIELD_KEYWORD_Id);
KtKeywordToken PROPERTY_KEYWORD = KtKeywordToken.softKeyword("property"); KtKeywordToken PROPERTY_KEYWORD = KtKeywordToken.softKeyword("property", PROPERTY_KEYWORD_Id);
KtKeywordToken RECEIVER_KEYWORD = KtKeywordToken.softKeyword("receiver"); KtKeywordToken RECEIVER_KEYWORD = KtKeywordToken.softKeyword("receiver", RECEIVER_KEYWORD_Id);
KtKeywordToken PARAM_KEYWORD = KtKeywordToken.softKeyword("param"); KtKeywordToken PARAM_KEYWORD = KtKeywordToken.softKeyword("param", PARAM_KEYWORD_Id);
KtKeywordToken SETPARAM_KEYWORD = KtKeywordToken.softKeyword("setparam"); KtKeywordToken SETPARAM_KEYWORD = KtKeywordToken.softKeyword("setparam", SETPARAM_KEYWORD_Id);
KtKeywordToken DELEGATE_KEYWORD = KtKeywordToken.softKeyword("delegate"); KtKeywordToken DELEGATE_KEYWORD = KtKeywordToken.softKeyword("delegate", DELEGATE_KEYWORD_Id);
KtKeywordToken IMPORT_KEYWORD = KtKeywordToken.softKeyword("import"); KtKeywordToken IMPORT_KEYWORD = KtKeywordToken.softKeyword("import", IMPORT_KEYWORD_Id);
KtKeywordToken WHERE_KEYWORD = KtKeywordToken.softKeyword("where"); KtKeywordToken WHERE_KEYWORD = KtKeywordToken.softKeyword("where", WHERE_KEYWORD_Id);
KtKeywordToken BY_KEYWORD = KtKeywordToken.softKeyword("by"); KtKeywordToken BY_KEYWORD = KtKeywordToken.softKeyword("by", BY_KEYWORD_Id);
KtKeywordToken GET_KEYWORD = KtKeywordToken.softKeyword("get"); KtKeywordToken GET_KEYWORD = KtKeywordToken.softKeyword("get", GET_KEYWORD_Id);
KtKeywordToken SET_KEYWORD = KtKeywordToken.softKeyword("set"); KtKeywordToken SET_KEYWORD = KtKeywordToken.softKeyword("set", SET_KEYWORD_Id);
KtKeywordToken CONSTRUCTOR_KEYWORD = KtKeywordToken.softKeyword("constructor"); KtKeywordToken CONSTRUCTOR_KEYWORD = KtKeywordToken.softKeyword("constructor", CONSTRUCTOR_KEYWORD_Id);
KtKeywordToken INIT_KEYWORD = KtKeywordToken.softKeyword("init"); KtKeywordToken INIT_KEYWORD = KtKeywordToken.softKeyword("init", INIT_KEYWORD_Id);
KtKeywordToken CONTEXT_KEYWORD = KtKeywordToken.softKeyword("context"); KtKeywordToken CONTEXT_KEYWORD = KtKeywordToken.softKeyword("context", CONTEXT_KEYWORD_Id);
KtModifierKeywordToken ABSTRACT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("abstract"); KtModifierKeywordToken ABSTRACT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("abstract", ABSTRACT_KEYWORD_Id);
KtModifierKeywordToken ENUM_KEYWORD = KtModifierKeywordToken.softKeywordModifier("enum"); KtModifierKeywordToken ENUM_KEYWORD = KtModifierKeywordToken.softKeywordModifier("enum", ENUM_KEYWORD_Id);
KtModifierKeywordToken CONTRACT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("contract"); KtModifierKeywordToken CONTRACT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("contract", CONTRACT_KEYWORD_Id);
KtModifierKeywordToken OPEN_KEYWORD = KtModifierKeywordToken.softKeywordModifier("open"); KtModifierKeywordToken OPEN_KEYWORD = KtModifierKeywordToken.softKeywordModifier("open", OPEN_KEYWORD_Id);
KtModifierKeywordToken INNER_KEYWORD = KtModifierKeywordToken.softKeywordModifier("inner"); KtModifierKeywordToken INNER_KEYWORD = KtModifierKeywordToken.softKeywordModifier("inner", INNER_KEYWORD_Id);
KtModifierKeywordToken OVERRIDE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("override"); KtModifierKeywordToken OVERRIDE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("override", OVERRIDE_KEYWORD_Id);
KtModifierKeywordToken PRIVATE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("private"); KtModifierKeywordToken PRIVATE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("private", PRIVATE_KEYWORD_Id);
KtModifierKeywordToken PUBLIC_KEYWORD = KtModifierKeywordToken.softKeywordModifier("public"); KtModifierKeywordToken PUBLIC_KEYWORD = KtModifierKeywordToken.softKeywordModifier("public", PUBLIC_KEYWORD_Id);
KtModifierKeywordToken INTERNAL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("internal"); KtModifierKeywordToken INTERNAL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("internal", INTERNAL_KEYWORD_Id);
KtModifierKeywordToken PROTECTED_KEYWORD = KtModifierKeywordToken.softKeywordModifier("protected"); KtModifierKeywordToken PROTECTED_KEYWORD = KtModifierKeywordToken.softKeywordModifier("protected", PROTECTED_KEYWORD_Id);
KtKeywordToken CATCH_KEYWORD = KtKeywordToken.softKeyword("catch"); KtKeywordToken CATCH_KEYWORD = KtKeywordToken.softKeyword("catch", CATCH_KEYWORD_Id);
KtModifierKeywordToken OUT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("out"); KtModifierKeywordToken OUT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("out", OUT_KEYWORD_Id);
KtModifierKeywordToken VARARG_KEYWORD = KtModifierKeywordToken.softKeywordModifier("vararg"); KtModifierKeywordToken VARARG_KEYWORD = KtModifierKeywordToken.softKeywordModifier("vararg", VARARG_KEYWORD_Id);
KtModifierKeywordToken REIFIED_KEYWORD = KtModifierKeywordToken.softKeywordModifier("reified"); KtModifierKeywordToken REIFIED_KEYWORD = KtModifierKeywordToken.softKeywordModifier("reified", REIFIED_KEYWORD_Id);
KtKeywordToken DYNAMIC_KEYWORD = KtKeywordToken.softKeyword("dynamic"); KtKeywordToken DYNAMIC_KEYWORD = KtKeywordToken.softKeyword("dynamic", DYNAMIC_KEYWORD_Id);
KtModifierKeywordToken COMPANION_KEYWORD = KtModifierKeywordToken.softKeywordModifier("companion"); KtModifierKeywordToken COMPANION_KEYWORD = KtModifierKeywordToken.softKeywordModifier("companion", COMPANION_KEYWORD_Id);
KtModifierKeywordToken SEALED_KEYWORD = KtModifierKeywordToken.softKeywordModifier("sealed"); KtModifierKeywordToken SEALED_KEYWORD = KtModifierKeywordToken.softKeywordModifier("sealed", SEALED_KEYWORD_Id);
KtModifierKeywordToken DEFAULT_VISIBILITY_KEYWORD = PUBLIC_KEYWORD; KtModifierKeywordToken DEFAULT_VISIBILITY_KEYWORD = PUBLIC_KEYWORD;
KtKeywordToken FINALLY_KEYWORD = KtKeywordToken.softKeyword("finally"); KtKeywordToken FINALLY_KEYWORD = KtKeywordToken.softKeyword("finally", FINALLY_KEYWORD_Id);
KtModifierKeywordToken FINAL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("final"); KtModifierKeywordToken FINAL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("final", FINAL_KEYWORD_Id);
KtModifierKeywordToken LATEINIT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("lateinit"); KtModifierKeywordToken LATEINIT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("lateinit", LATEINIT_KEYWORD_Id);
KtModifierKeywordToken DATA_KEYWORD = KtModifierKeywordToken.softKeywordModifier("data"); KtModifierKeywordToken DATA_KEYWORD = KtModifierKeywordToken.softKeywordModifier("data", DATA_KEYWORD_Id);
KtModifierKeywordToken VALUE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("value"); KtModifierKeywordToken VALUE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("value", VALUE_KEYWORD_Id);
KtModifierKeywordToken INLINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("inline"); KtModifierKeywordToken INLINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("inline", INLINE_KEYWORD_Id);
KtModifierKeywordToken NOINLINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("noinline"); KtModifierKeywordToken NOINLINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("noinline", NOINLINE_KEYWORD_Id);
KtModifierKeywordToken TAILREC_KEYWORD = KtModifierKeywordToken.softKeywordModifier("tailrec"); KtModifierKeywordToken TAILREC_KEYWORD = KtModifierKeywordToken.softKeywordModifier("tailrec", TAILREC_KEYWORD_Id);
KtModifierKeywordToken EXTERNAL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("external"); KtModifierKeywordToken EXTERNAL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("external", EXTERNAL_KEYWORD_Id);
KtModifierKeywordToken ANNOTATION_KEYWORD = KtModifierKeywordToken.softKeywordModifier("annotation"); KtModifierKeywordToken ANNOTATION_KEYWORD = KtModifierKeywordToken.softKeywordModifier("annotation", ANNOTATION_KEYWORD_Id);
KtModifierKeywordToken CROSSINLINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("crossinline"); KtModifierKeywordToken CROSSINLINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("crossinline", CROSSINLINE_KEYWORD_Id);
KtModifierKeywordToken OPERATOR_KEYWORD = KtModifierKeywordToken.softKeywordModifier("operator"); KtModifierKeywordToken OPERATOR_KEYWORD = KtModifierKeywordToken.softKeywordModifier("operator", OPERATOR_KEYWORD_Id);
KtModifierKeywordToken INFIX_KEYWORD = KtModifierKeywordToken.softKeywordModifier("infix"); KtModifierKeywordToken INFIX_KEYWORD = KtModifierKeywordToken.softKeywordModifier("infix", INFIX_KEYWORD_Id);
KtModifierKeywordToken CONST_KEYWORD = KtModifierKeywordToken.softKeywordModifier("const"); KtModifierKeywordToken CONST_KEYWORD = KtModifierKeywordToken.softKeywordModifier("const", CONST_KEYWORD_Id);
KtModifierKeywordToken SUSPEND_KEYWORD = KtModifierKeywordToken.softKeywordModifier("suspend"); KtModifierKeywordToken SUSPEND_KEYWORD = KtModifierKeywordToken.softKeywordModifier("suspend", SUSPEND_KEYWORD_Id);
KtModifierKeywordToken HEADER_KEYWORD = KtModifierKeywordToken.softKeywordModifier("header"); KtModifierKeywordToken HEADER_KEYWORD = KtModifierKeywordToken.softKeywordModifier("header", HEADER_KEYWORD_Id);
KtModifierKeywordToken IMPL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("impl"); KtModifierKeywordToken IMPL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("impl", IMPL_KEYWORD_Id);
KtModifierKeywordToken EXPECT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("expect", EXPECT_KEYWORD_Id);
KtModifierKeywordToken ACTUAL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("actual", ACTUAL_KEYWORD_Id);
KtModifierKeywordToken EXPECT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("expect");
KtModifierKeywordToken ACTUAL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("actual");
TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_ALIAS_KEYWORD, CLASS_KEYWORD, INTERFACE_KEYWORD, TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_ALIAS_KEYWORD, CLASS_KEYWORD, INTERFACE_KEYWORD,
THIS_KEYWORD, SUPER_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD, THIS_KEYWORD, SUPER_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD,
@@ -144,6 +144,11 @@ import static org.jetbrains.kotlin.lexer.KtTokens.*;
myBuilder.advanceLexer(); myBuilder.advanceLexer();
} }
protected int getTokenId() {
IElementType elementType = tt();
return (elementType instanceof KtToken) ? ((KtToken)elementType).tokenId : INVALID_Id;
}
protected IElementType tt() { protected IElementType tt() {
return myBuilder.getTokenType(); return myBuilder.getTokenType();
} }
@@ -302,39 +307,42 @@ import static org.jetbrains.kotlin.lexer.KtTokens.*;
pattern.isTopLevel(openAngleBrackets, openBrackets, openBraces, openParentheses))) { pattern.isTopLevel(openAngleBrackets, openBrackets, openBraces, openParentheses))) {
break; break;
} }
if (at(LPAR)) { switch (getTokenId()) {
openParentheses++; case LPAR_Id:
opens.push(LPAR); openParentheses++;
} opens.push(LPAR);
else if (at(LT)) { break;
openAngleBrackets++; case LT_Id:
opens.push(LT); openAngleBrackets++;
} opens.push(LT);
else if (at(LBRACE)) { break;
openBraces++; case LBRACE_Id:
opens.push(LBRACE); openBraces++;
} opens.push(LBRACE);
else if (at(LBRACKET)) { break;
openBrackets++; case LBRACKET_Id:
opens.push(LBRACKET); openBrackets++;
} opens.push(LBRACKET);
else if (at(RPAR)) { break;
openParentheses--; case RPAR_Id:
if (opens.isEmpty() || opens.pop() != LPAR) { openParentheses--;
if (pattern.handleUnmatchedClosing(RPAR)) { if (opens.isEmpty() || opens.pop() != LPAR) {
break; if (pattern.handleUnmatchedClosing(RPAR)) {
break;
}
} }
} break;
} case GT_Id:
else if (at(GT)) { openAngleBrackets--;
openAngleBrackets--; break;
} case RBRACE_Id:
else if (at(RBRACE)) { openBraces--;
openBraces--; break;
} case RBRACKET_Id:
else if (at(RBRACKET)) { openBrackets--;
openBrackets--; break;
} }
advance(); // skip token advance(); // skip token
} }
@@ -630,66 +630,104 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing {
private boolean parseAtomicExpression() { private boolean parseAtomicExpression() {
boolean ok = true; boolean ok = true;
if (at(LPAR)) { switch (getTokenId()) {
parseParenthesizedExpression(); case LPAR_Id:
parseParenthesizedExpression();
break;
case LBRACKET_Id:
parseCollectionLiteralExpression();
break;
case THIS_KEYWORD_Id:
parseThisExpression();
break;
case SUPER_KEYWORD_Id:
parseSuperExpression();
break;
case OBJECT_KEYWORD_Id:
parseObjectLiteral();
break;
case THROW_KEYWORD_Id:
parseThrow();
break;
case RETURN_KEYWORD_Id:
parseReturn();
break;
case CONTINUE_KEYWORD_Id:
parseJump(CONTINUE);
break;
case BREAK_KEYWORD_Id:
parseJump(BREAK);
break;
case IF_KEYWORD_Id:
parseIf();
break;
case WHEN_KEYWORD_Id:
parseWhen();
break;
case TRY_KEYWORD_Id:
parseTry();
break;
case FOR_KEYWORD_Id:
parseFor();
break;
case WHILE_KEYWORD_Id:
parseWhile();
break;
case DO_KEYWORD_Id:
parseDoWhile();
break;
case IDENTIFIER_Id:
parseSimpleNameExpression();
break;
case LBRACE_Id:
parseFunctionLiteral();
break;
case OPEN_QUOTE_Id:
parseStringTemplate();
break;
/*
* literalConstant
* : "true" | "false"
* : stringTemplate
* : NoEscapeString
* : IntegerLiteral
* : CharacterLiteral
* : FloatLiteral
* : "null"
* ;
*/
case TRUE_KEYWORD_Id:
case FALSE_KEYWORD_Id:
parseOneTokenExpression(BOOLEAN_CONSTANT);
break;
case INTEGER_LITERAL_Id:
parseOneTokenExpression(INTEGER_CONSTANT);
break;
case CHARACTER_LITERAL_Id:
parseOneTokenExpression(CHARACTER_CONSTANT);
break;
case FLOAT_LITERAL_Id:
parseOneTokenExpression(FLOAT_CONSTANT);
break;
case NULL_KEYWORD_Id:
parseOneTokenExpression(NULL);
break;
case CLASS_KEYWORD_Id:
case INTERFACE_KEYWORD_Id:
case FUN_KEYWORD_Id:
case VAL_KEYWORD_Id:
case VAR_KEYWORD_Id:
case TYPE_ALIAS_KEYWORD_Id:
if (!parseLocalDeclaration(/* rollbackIfDefinitelyNotExpression = */ myBuilder.newlineBeforeCurrentToken(), false)) {
ok = false;
}
// declaration was parsed, do nothing
break;
default:
ok = false;
} }
else if (at(LBRACKET)) {
parseCollectionLiteralExpression(); if (!ok) {
}
else if (at(THIS_KEYWORD)) {
parseThisExpression();
}
else if (at(SUPER_KEYWORD)) {
parseSuperExpression();
}
else if (at(OBJECT_KEYWORD)) {
parseObjectLiteral();
}
else if (at(THROW_KEYWORD)) {
parseThrow();
}
else if (at(RETURN_KEYWORD)) {
parseReturn();
}
else if (at(CONTINUE_KEYWORD)) {
parseJump(CONTINUE);
}
else if (at(BREAK_KEYWORD)) {
parseJump(BREAK);
}
else if (at(IF_KEYWORD)) {
parseIf();
}
else if (at(WHEN_KEYWORD)) {
parseWhen();
}
else if (at(TRY_KEYWORD)) {
parseTry();
}
else if (at(FOR_KEYWORD)) {
parseFor();
}
else if (at(WHILE_KEYWORD)) {
parseWhile();
}
else if (at(DO_KEYWORD)) {
parseDoWhile();
}
else if (atSet(LOCAL_DECLARATION_FIRST) &&
parseLocalDeclaration(/* rollbackIfDefinitelyNotExpression = */ myBuilder.newlineBeforeCurrentToken(), false)) {
// declaration was parsed, do nothing
}
else if (at(IDENTIFIER)) {
parseSimpleNameExpression();
}
else if (at(LBRACE)) {
parseFunctionLiteral();
}
else if (at(OPEN_QUOTE)) {
parseStringTemplate();
}
else if (!parseLiteralConstant()) {
ok = false;
// TODO: better recovery if FIRST(element) did not match // TODO: better recovery if FIRST(element) did not match
errorWithRecovery("Expecting an element", TokenSet.orSet(EXPRESSION_FOLLOW, TokenSet.create(LONG_TEMPLATE_ENTRY_END))); errorWithRecovery("Expecting an element", TokenSet.orSet(EXPRESSION_FOLLOW, TokenSet.create(LONG_TEMPLATE_ENTRY_END)));
} }
@@ -804,39 +842,6 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing {
} }
} }
/*
* literalConstant
* : "true" | "false"
* : stringTemplate
* : NoEscapeString
* : IntegerLiteral
* : CharacterLiteral
* : FloatLiteral
* : "null"
* ;
*/
private boolean parseLiteralConstant() {
if (at(TRUE_KEYWORD) || at(FALSE_KEYWORD)) {
parseOneTokenExpression(BOOLEAN_CONSTANT);
}
else if (at(INTEGER_LITERAL)) {
parseOneTokenExpression(INTEGER_CONSTANT);
}
else if (at(CHARACTER_LITERAL)) {
parseOneTokenExpression(CHARACTER_CONSTANT);
}
else if (at(FLOAT_LITERAL)) {
parseOneTokenExpression(FLOAT_CONSTANT);
}
else if (at(NULL_KEYWORD)) {
parseOneTokenExpression(NULL);
}
else {
return false;
}
return true;
}
/* /*
* when * when
* : "when" ("(" (modifiers "val" SimpleName "=")? element ")")? "{" * : "when" ("(" (modifiers "val" SimpleName "=")? element ")")? "{"
@@ -963,39 +968,45 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing {
private void parseWhenCondition() { private void parseWhenCondition() {
PsiBuilder.Marker condition = mark(); PsiBuilder.Marker condition = mark();
myBuilder.disableNewlines(); myBuilder.disableNewlines();
if (at(IN_KEYWORD) || at(NOT_IN)) { switch (getTokenId()) {
PsiBuilder.Marker mark = mark(); case IN_KEYWORD_Id:
advance(); // IN_KEYWORD or NOT_IN case NOT_IN_Id:
mark.done(OPERATION_REFERENCE); PsiBuilder.Marker mark = mark();
advance(); // IN_KEYWORD or NOT_IN
mark.done(OPERATION_REFERENCE);
if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) { if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) {
error("Expecting an element"); error("Expecting an element");
} }
else { else {
parseExpression(); parseExpression();
} }
condition.done(WHEN_CONDITION_IN_RANGE); condition.done(WHEN_CONDITION_IN_RANGE);
} break;
else if (at(IS_KEYWORD) || at(NOT_IS)) { case IS_KEYWORD_Id:
advance(); // IS_KEYWORD or NOT_IS case NOT_IS_Id:
advance(); // IS_KEYWORD or NOT_IS
if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) { if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) {
error("Expecting a type"); error("Expecting a type");
} }
else { else {
myKotlinParsing.parseTypeRef(); myKotlinParsing.parseTypeRef();
} }
condition.done(WHEN_CONDITION_IS_PATTERN); condition.done(WHEN_CONDITION_IS_PATTERN);
} break;
else { case RBRACE_Id:
if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) { case ELSE_KEYWORD_Id:
case ARROW_Id:
case DOT_Id:
error("Expecting an expression, is-condition or in-condition"); error("Expecting an expression, is-condition or in-condition");
} condition.done(WHEN_CONDITION_EXPRESSION);
else { break;
default:
parseExpression(); parseExpression();
} condition.done(WHEN_CONDITION_EXPRESSION);
condition.done(WHEN_CONDITION_EXPRESSION); break;
} }
myBuilder.restoreNewlinesState(); myBuilder.restoreNewlinesState();
} }
@@ -497,25 +497,24 @@ public class KotlinParsing extends AbstractKotlinParsing {
@NotNull NameParsingMode nameParsingModeForObject, @NotNull NameParsingMode nameParsingModeForObject,
@NotNull DeclarationParsingMode declarationParsingMode @NotNull DeclarationParsingMode declarationParsingMode
) { ) {
IElementType keywordToken = tt(); switch (getTokenId()) {
case CLASS_KEYWORD_Id:
if (keywordToken == CLASS_KEYWORD || keywordToken == INTERFACE_KEYWORD) { case INTERFACE_KEYWORD_Id:
return parseClass(detector.isEnumDetected(), true); return parseClass(detector.isEnumDetected(), true);
} case FUN_KEYWORD_Id:
else if (keywordToken == FUN_KEYWORD) { return parseFunction();
return parseFunction(); case VAL_KEYWORD_Id:
} case VAR_KEYWORD_Id:
else if (keywordToken == VAL_KEYWORD || keywordToken == VAR_KEYWORD) { return parseProperty(declarationParsingMode);
return parseProperty(declarationParsingMode); case TYPE_ALIAS_KEYWORD_Id:
} return parseTypeAlias();
else if (keywordToken == TYPE_ALIAS_KEYWORD) { case OBJECT_KEYWORD_Id:
return parseTypeAlias(); parseObject(nameParsingModeForObject, true);
} return OBJECT_DECLARATION;
else if (keywordToken == OBJECT_KEYWORD) { case IDENTIFIER_Id:
parseObject(nameParsingModeForObject, true); if (detector.isEnumDetected() && declarationParsingMode.canBeEnumUsedAsSoftKeyword) {
return OBJECT_DECLARATION; return parseClass(true, false);
} else if (keywordToken == IDENTIFIER && detector.isEnumDetected() && declarationParsingMode.canBeEnumUsedAsSoftKeyword) { }
return parseClass(true, false);
} }
return null; return null;