001 /*
002 * Copyright 2010-2015 JetBrains s.r.o.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.jetbrains.kotlin.lexer;
018
019 import com.intellij.psi.TokenType;
020 import com.intellij.psi.tree.IElementType;
021 import com.intellij.psi.tree.TokenSet;
022 import org.jetbrains.kotlin.kdoc.lexer.KDocTokens;
023 import org.jetbrains.kotlin.psi.KtPsiUtil;
024
025 public interface KtTokens {
026 KtToken EOF = new KtToken("EOF");
027
028 KtToken RESERVED = new KtToken("RESERVED");
029
030 KtToken BLOCK_COMMENT = new KtToken("BLOCK_COMMENT");
031 KtToken EOL_COMMENT = new KtToken("EOL_COMMENT");
032 KtToken SHEBANG_COMMENT = new KtToken("SHEBANG_COMMENT");
033
034 //KtToken DOC_COMMENT = new KtToken("DOC_COMMENT");
035 IElementType DOC_COMMENT = KDocTokens.KDOC;
036
037 IElementType WHITE_SPACE = TokenType.WHITE_SPACE;
038
039 KtToken INTEGER_LITERAL = new KtToken("INTEGER_LITERAL");
040 KtToken FLOAT_LITERAL = new KtToken("FLOAT_CONSTANT");
041 KtToken CHARACTER_LITERAL = new KtToken("CHARACTER_LITERAL");
042
043 KtToken CLOSING_QUOTE = new KtToken("CLOSING_QUOTE");
044 KtToken OPEN_QUOTE = new KtToken("OPEN_QUOTE");
045 KtToken REGULAR_STRING_PART = new KtToken("REGULAR_STRING_PART");
046 KtToken ESCAPE_SEQUENCE = new KtToken("ESCAPE_SEQUENCE");
047 KtToken SHORT_TEMPLATE_ENTRY_START = new KtToken("SHORT_TEMPLATE_ENTRY_START");
048 KtToken LONG_TEMPLATE_ENTRY_START = new KtToken("LONG_TEMPLATE_ENTRY_START");
049 KtToken LONG_TEMPLATE_ENTRY_END = new KtToken("LONG_TEMPLATE_ENTRY_END");
050 KtToken DANGLING_NEWLINE = new KtToken("DANGLING_NEWLINE");
051
052 KtKeywordToken PACKAGE_KEYWORD = KtKeywordToken.keyword("package");
053 KtKeywordToken AS_KEYWORD = KtKeywordToken.keyword("as");
054 KtKeywordToken TYPE_ALIAS_KEYWORD = KtKeywordToken.keyword("typealias");
055 KtKeywordToken CLASS_KEYWORD = KtKeywordToken.keyword("class");
056 KtKeywordToken THIS_KEYWORD = KtKeywordToken.keyword("this");
057 KtKeywordToken SUPER_KEYWORD = KtKeywordToken.keyword("super");
058 KtKeywordToken VAL_KEYWORD = KtKeywordToken.keyword("val");
059 KtKeywordToken VAR_KEYWORD = KtKeywordToken.keyword("var");
060 KtKeywordToken FUN_KEYWORD = KtKeywordToken.keyword("fun");
061 KtKeywordToken FOR_KEYWORD = KtKeywordToken.keyword("for");
062 KtKeywordToken NULL_KEYWORD = KtKeywordToken.keyword("null");
063 KtKeywordToken TRUE_KEYWORD = KtKeywordToken.keyword("true");
064 KtKeywordToken FALSE_KEYWORD = KtKeywordToken.keyword("false");
065 KtKeywordToken IS_KEYWORD = KtKeywordToken.keyword("is");
066 KtModifierKeywordToken IN_KEYWORD = KtModifierKeywordToken.keywordModifier("in");
067 KtKeywordToken THROW_KEYWORD = KtKeywordToken.keyword("throw");
068 KtKeywordToken RETURN_KEYWORD = KtKeywordToken.keyword("return");
069 KtKeywordToken BREAK_KEYWORD = KtKeywordToken.keyword("break");
070 KtKeywordToken CONTINUE_KEYWORD = KtKeywordToken.keyword("continue");
071 KtKeywordToken OBJECT_KEYWORD = KtKeywordToken.keyword("object");
072 KtKeywordToken IF_KEYWORD = KtKeywordToken.keyword("if");
073 KtKeywordToken TRY_KEYWORD = KtKeywordToken.keyword("try");
074 KtKeywordToken ELSE_KEYWORD = KtKeywordToken.keyword("else");
075 KtKeywordToken WHILE_KEYWORD = KtKeywordToken.keyword("while");
076 KtKeywordToken DO_KEYWORD = KtKeywordToken.keyword("do");
077 KtKeywordToken WHEN_KEYWORD = KtKeywordToken.keyword("when");
078 KtKeywordToken INTERFACE_KEYWORD = KtKeywordToken.keyword("interface");
079
080 // Reserved for future use:
081 KtKeywordToken TYPEOF_KEYWORD = KtKeywordToken.keyword("typeof");
082
083 KtToken AS_SAFE = KtKeywordToken.keyword("AS_SAFE");//new KtToken("as?");
084
085 KtToken IDENTIFIER = new KtToken("IDENTIFIER");
086
087 KtToken FIELD_IDENTIFIER = new KtToken("FIELD_IDENTIFIER");
088 KtSingleValueToken LBRACKET = new KtSingleValueToken("LBRACKET", "[");
089 KtSingleValueToken RBRACKET = new KtSingleValueToken("RBRACKET", "]");
090 KtSingleValueToken LBRACE = new KtSingleValueToken("LBRACE", "{");
091 KtSingleValueToken RBRACE = new KtSingleValueToken("RBRACE", "}");
092 KtSingleValueToken LPAR = new KtSingleValueToken("LPAR", "(");
093 KtSingleValueToken RPAR = new KtSingleValueToken("RPAR", ")");
094 KtSingleValueToken DOT = new KtSingleValueToken("DOT", ".");
095 KtSingleValueToken PLUSPLUS = new KtSingleValueToken("PLUSPLUS", "++");
096 KtSingleValueToken MINUSMINUS = new KtSingleValueToken("MINUSMINUS", "--");
097 KtSingleValueToken MUL = new KtSingleValueToken("MUL", "*");
098 KtSingleValueToken PLUS = new KtSingleValueToken("PLUS", "+");
099 KtSingleValueToken MINUS = new KtSingleValueToken("MINUS", "-");
100 KtSingleValueToken EXCL = new KtSingleValueToken("EXCL", "!");
101 KtSingleValueToken DIV = new KtSingleValueToken("DIV", "/");
102 KtSingleValueToken PERC = new KtSingleValueToken("PERC", "%");
103 KtSingleValueToken LT = new KtSingleValueToken("LT", "<");
104 KtSingleValueToken GT = new KtSingleValueToken("GT", ">");
105 KtSingleValueToken LTEQ = new KtSingleValueToken("LTEQ", "<=");
106 KtSingleValueToken GTEQ = new KtSingleValueToken("GTEQ", ">=");
107 KtSingleValueToken EQEQEQ = new KtSingleValueToken("EQEQEQ", "===");
108 KtSingleValueToken ARROW = new KtSingleValueToken("ARROW", "->");
109 KtSingleValueToken DOUBLE_ARROW = new KtSingleValueToken("DOUBLE_ARROW", "=>");
110 KtSingleValueToken EXCLEQEQEQ = new KtSingleValueToken("EXCLEQEQEQ", "!==");
111 KtSingleValueToken EQEQ = new KtSingleValueToken("EQEQ", "==");
112 KtSingleValueToken EXCLEQ = new KtSingleValueToken("EXCLEQ", "!=");
113 KtSingleValueToken EXCLEXCL = new KtSingleValueToken("EXCLEXCL", "!!");
114 KtSingleValueToken ANDAND = new KtSingleValueToken("ANDAND", "&&");
115 KtSingleValueToken OROR = new KtSingleValueToken("OROR", "||");
116 KtSingleValueToken SAFE_ACCESS = new KtSingleValueToken("SAFE_ACCESS", "?.");
117 KtSingleValueToken ELVIS = new KtSingleValueToken("ELVIS", "?:");
118 KtSingleValueToken QUEST = new KtSingleValueToken("QUEST", "?");
119 KtSingleValueToken COLONCOLON = new KtSingleValueToken("COLONCOLON", "::");
120 KtSingleValueToken COLON = new KtSingleValueToken("COLON", ":");
121 KtSingleValueToken SEMICOLON = new KtSingleValueToken("SEMICOLON", ";");
122 KtSingleValueToken DOUBLE_SEMICOLON = new KtSingleValueToken("DOUBLE_SEMICOLON", ";;");
123 KtSingleValueToken RANGE = new KtSingleValueToken("RANGE", "..");
124 KtSingleValueToken EQ = new KtSingleValueToken("EQ", "=");
125 KtSingleValueToken MULTEQ = new KtSingleValueToken("MULTEQ", "*=");
126 KtSingleValueToken DIVEQ = new KtSingleValueToken("DIVEQ", "/=");
127 KtSingleValueToken PERCEQ = new KtSingleValueToken("PERCEQ", "%=");
128 KtSingleValueToken PLUSEQ = new KtSingleValueToken("PLUSEQ", "+=");
129 KtSingleValueToken MINUSEQ = new KtSingleValueToken("MINUSEQ", "-=");
130 KtKeywordToken NOT_IN = KtKeywordToken.keyword("NOT_IN", "!in");
131 KtKeywordToken NOT_IS = KtKeywordToken.keyword("NOT_IS", "!is");
132 KtSingleValueToken HASH = new KtSingleValueToken("HASH", "#");
133 KtSingleValueToken AT = new KtSingleValueToken("AT", "@");
134
135 KtSingleValueToken COMMA = new KtSingleValueToken("COMMA", ",");
136
137 KtToken EOL_OR_SEMICOLON = new KtToken("EOL_OR_SEMICOLON");
138 KtKeywordToken FILE_KEYWORD = KtKeywordToken.softKeyword("file");
139 KtKeywordToken FIELD_KEYWORD = KtKeywordToken.softKeyword("field");
140 KtKeywordToken PROPERTY_KEYWORD = KtKeywordToken.softKeyword("property");
141 KtKeywordToken RECEIVER_KEYWORD = KtKeywordToken.softKeyword("receiver");
142 KtKeywordToken PARAM_KEYWORD = KtKeywordToken.softKeyword("param");
143 KtKeywordToken SETPARAM_KEYWORD = KtKeywordToken.softKeyword("setparam");
144 KtKeywordToken DELEGATE_KEYWORD = KtKeywordToken.softKeyword("delegate");
145 KtKeywordToken IMPORT_KEYWORD = KtKeywordToken.softKeyword("import");
146 KtKeywordToken WHERE_KEYWORD = KtKeywordToken.softKeyword("where");
147 KtKeywordToken BY_KEYWORD = KtKeywordToken.softKeyword("by");
148 KtKeywordToken GET_KEYWORD = KtKeywordToken.softKeyword("get");
149 KtKeywordToken SET_KEYWORD = KtKeywordToken.softKeyword("set");
150 KtKeywordToken CONSTRUCTOR_KEYWORD = KtKeywordToken.softKeyword("constructor");
151 KtKeywordToken INIT_KEYWORD = KtKeywordToken.softKeyword("init");
152
153 KtModifierKeywordToken ABSTRACT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("abstract");
154 KtModifierKeywordToken ENUM_KEYWORD = KtModifierKeywordToken.softKeywordModifier("enum");
155 KtModifierKeywordToken OPEN_KEYWORD = KtModifierKeywordToken.softKeywordModifier("open");
156 KtModifierKeywordToken INNER_KEYWORD = KtModifierKeywordToken.softKeywordModifier("inner");
157 KtModifierKeywordToken OVERRIDE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("override");
158 KtModifierKeywordToken PRIVATE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("private");
159 KtModifierKeywordToken PUBLIC_KEYWORD = KtModifierKeywordToken.softKeywordModifier("public");
160 KtModifierKeywordToken INTERNAL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("internal");
161 KtModifierKeywordToken PROTECTED_KEYWORD = KtModifierKeywordToken.softKeywordModifier("protected");
162 KtKeywordToken CATCH_KEYWORD = KtKeywordToken.softKeyword("catch");
163 KtModifierKeywordToken OUT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("out");
164 KtModifierKeywordToken VARARG_KEYWORD = KtModifierKeywordToken.softKeywordModifier("vararg");
165 KtModifierKeywordToken REIFIED_KEYWORD = KtModifierKeywordToken.softKeywordModifier("reified");
166 KtKeywordToken DYNAMIC_KEYWORD = KtKeywordToken.softKeyword("dynamic");
167 KtModifierKeywordToken COMPANION_KEYWORD = KtModifierKeywordToken.softKeywordModifier("companion");
168 KtModifierKeywordToken SEALED_KEYWORD = KtModifierKeywordToken.softKeywordModifier("sealed");
169
170 KtModifierKeywordToken DEFAULT_VISIBILITY_KEYWORD = PUBLIC_KEYWORD;
171
172 KtKeywordToken FINALLY_KEYWORD = KtKeywordToken.softKeyword("finally");
173 KtModifierKeywordToken FINAL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("final");
174
175 KtModifierKeywordToken LATEINIT_KEYWORD = KtModifierKeywordToken.softKeywordModifier("lateinit");
176
177 KtModifierKeywordToken DATA_KEYWORD = KtModifierKeywordToken.softKeywordModifier("data");
178 KtModifierKeywordToken INLINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("inline");
179 KtModifierKeywordToken NOINLINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("noinline");
180 KtModifierKeywordToken TAILREC_KEYWORD = KtModifierKeywordToken.softKeywordModifier("tailrec");
181 KtModifierKeywordToken EXTERNAL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("external");
182 KtModifierKeywordToken ANNOTATION_KEYWORD = KtModifierKeywordToken.softKeywordModifier("annotation");
183 KtModifierKeywordToken CROSSINLINE_KEYWORD = KtModifierKeywordToken.softKeywordModifier("crossinline");
184 KtModifierKeywordToken OPERATOR_KEYWORD = KtModifierKeywordToken.softKeywordModifier("operator");
185 KtModifierKeywordToken INFIX_KEYWORD = KtModifierKeywordToken.softKeywordModifier("infix");
186
187 KtModifierKeywordToken CONST_KEYWORD = KtModifierKeywordToken.softKeywordModifier("const");
188
189 KtModifierKeywordToken SUSPEND_KEYWORD = KtModifierKeywordToken.softKeywordModifier("suspend");
190
191 KtModifierKeywordToken HEADER_KEYWORD = KtModifierKeywordToken.softKeywordModifier("header");
192 KtModifierKeywordToken IMPL_KEYWORD = KtModifierKeywordToken.softKeywordModifier("impl");
193
194 TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_ALIAS_KEYWORD, CLASS_KEYWORD, INTERFACE_KEYWORD,
195 THIS_KEYWORD, SUPER_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD,
196 NULL_KEYWORD,
197 TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
198 IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD,
199 ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, TRY_KEYWORD, WHEN_KEYWORD,
200 NOT_IN, NOT_IS, AS_SAFE,
201 TYPEOF_KEYWORD
202 );
203
204 TokenSet SOFT_KEYWORDS = TokenSet.create(FILE_KEYWORD, IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
205 SET_KEYWORD, ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, INNER_KEYWORD,
206 OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD,
207 CATCH_KEYWORD, FINALLY_KEYWORD, OUT_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, REIFIED_KEYWORD,
208 DYNAMIC_KEYWORD, COMPANION_KEYWORD, CONSTRUCTOR_KEYWORD, INIT_KEYWORD, SEALED_KEYWORD,
209 FIELD_KEYWORD, PROPERTY_KEYWORD, RECEIVER_KEYWORD, PARAM_KEYWORD, SETPARAM_KEYWORD,
210 DELEGATE_KEYWORD,
211 LATEINIT_KEYWORD,
212 DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD,
213 ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD,
214 SUSPEND_KEYWORD, HEADER_KEYWORD, IMPL_KEYWORD
215 );
216
217 /*
218 This array is used in stub serialization:
219 1. Do not change order.
220 2. If you add an entry or change order, increase stub version.
221 */
222 KtModifierKeywordToken[] MODIFIER_KEYWORDS_ARRAY =
223 new KtModifierKeywordToken[] {
224 ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, INNER_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD,
225 PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD,
226 REIFIED_KEYWORD, COMPANION_KEYWORD, SEALED_KEYWORD, LATEINIT_KEYWORD,
227 DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD,
228 CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD, SUSPEND_KEYWORD, HEADER_KEYWORD, IMPL_KEYWORD
229 };
230
231 TokenSet MODIFIER_KEYWORDS = TokenSet.create(MODIFIER_KEYWORDS_ARRAY);
232
233 TokenSet TYPE_MODIFIER_KEYWORDS = TokenSet.create(SUSPEND_KEYWORD);
234 TokenSet TYPE_ARGUMENT_MODIFIER_KEYWORDS = TokenSet.create(IN_KEYWORD, OUT_KEYWORD);
235 TokenSet RESERVED_VALUE_PARAMETER_MODIFIER_KEYWORDS = TokenSet.create(OUT_KEYWORD, VARARG_KEYWORD);
236
237 TokenSet VISIBILITY_MODIFIERS = TokenSet.create(PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD);
238
239 TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
240
241 /**
242 * Don't add KDocTokens to COMMENTS TokenSet, because it is used in KotlinParserDefinition.getCommentTokens(),
243 * and therefor all COMMENTS tokens will be ignored by PsiBuilder.
244 *
245 * @see KtPsiUtil#isInComment(com.intellij.psi.PsiElement)
246 */
247 TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT, SHEBANG_COMMENT);
248 TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.orSet(COMMENTS, WHITESPACES);
249
250 TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART);
251 TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, EXCLEXCL, MUL, PLUS,
252 MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR,
253 SAFE_ACCESS, ELVIS,
254 RANGE, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ,
255 NOT_IN, NOT_IS,
256 IDENTIFIER);
257
258 TokenSet AUGMENTED_ASSIGNMENTS = TokenSet.create(PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
259 TokenSet ALL_ASSIGNMENTS = TokenSet.create(EQ, PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
260 }