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
024 public interface JetTokens {
025 JetToken EOF = new JetToken("EOF");
026
027 JetToken BLOCK_COMMENT = new JetToken("BLOCK_COMMENT");
028 JetToken EOL_COMMENT = new JetToken("EOL_COMMENT");
029 JetToken SHEBANG_COMMENT = new JetToken("SHEBANG_COMMENT");
030
031 //JetToken DOC_COMMENT = new JetToken("DOC_COMMENT");
032 IElementType DOC_COMMENT = KDocTokens.KDOC;
033
034 IElementType WHITE_SPACE = TokenType.WHITE_SPACE;
035
036 JetToken INTEGER_LITERAL = new JetToken("INTEGER_LITERAL");
037 JetToken FLOAT_LITERAL = new JetToken("FLOAT_CONSTANT");
038 JetToken CHARACTER_LITERAL = new JetToken("CHARACTER_LITERAL");
039
040 JetToken CLOSING_QUOTE = new JetToken("CLOSING_QUOTE");
041 JetToken OPEN_QUOTE = new JetToken("OPEN_QUOTE");
042 JetToken REGULAR_STRING_PART = new JetToken("REGULAR_STRING_PART");
043 JetToken ESCAPE_SEQUENCE = new JetToken("ESCAPE_SEQUENCE");
044 JetToken SHORT_TEMPLATE_ENTRY_START = new JetToken("SHORT_TEMPLATE_ENTRY_START");
045 JetToken LONG_TEMPLATE_ENTRY_START = new JetToken("LONG_TEMPLATE_ENTRY_START");
046 JetToken LONG_TEMPLATE_ENTRY_END = new JetToken("LONG_TEMPLATE_ENTRY_END");
047 JetToken DANGLING_NEWLINE = new JetToken("DANGLING_NEWLINE");
048
049 JetKeywordToken PACKAGE_KEYWORD = JetKeywordToken.keyword("package");
050 JetKeywordToken AS_KEYWORD = JetKeywordToken.keyword("as");
051 JetKeywordToken TYPE_ALIAS_KEYWORD = JetKeywordToken.keyword("typealias");
052 JetKeywordToken CLASS_KEYWORD = JetKeywordToken.keyword("class");
053 JetKeywordToken THIS_KEYWORD = JetKeywordToken.keyword("this");
054 JetKeywordToken SUPER_KEYWORD = JetKeywordToken.keyword("super");
055 JetKeywordToken VAL_KEYWORD = JetKeywordToken.keyword("val");
056 JetKeywordToken VAR_KEYWORD = JetKeywordToken.keyword("var");
057 JetKeywordToken FUN_KEYWORD = JetKeywordToken.keyword("fun");
058 JetKeywordToken FOR_KEYWORD = JetKeywordToken.keyword("for");
059 JetKeywordToken NULL_KEYWORD = JetKeywordToken.keyword("null");
060 JetKeywordToken TRUE_KEYWORD = JetKeywordToken.keyword("true");
061 JetKeywordToken FALSE_KEYWORD = JetKeywordToken.keyword("false");
062 JetKeywordToken IS_KEYWORD = JetKeywordToken.keyword("is");
063 JetModifierKeywordToken IN_KEYWORD = JetModifierKeywordToken.keywordModifier("in");
064 JetKeywordToken THROW_KEYWORD = JetKeywordToken.keyword("throw");
065 JetKeywordToken RETURN_KEYWORD = JetKeywordToken.keyword("return");
066 JetKeywordToken BREAK_KEYWORD = JetKeywordToken.keyword("break");
067 JetKeywordToken CONTINUE_KEYWORD = JetKeywordToken.keyword("continue");
068 JetKeywordToken OBJECT_KEYWORD = JetKeywordToken.keyword("object");
069 JetKeywordToken IF_KEYWORD = JetKeywordToken.keyword("if");
070 JetKeywordToken TRY_KEYWORD = JetKeywordToken.keyword("try");
071 JetKeywordToken ELSE_KEYWORD = JetKeywordToken.keyword("else");
072 JetKeywordToken WHILE_KEYWORD = JetKeywordToken.keyword("while");
073 JetKeywordToken DO_KEYWORD = JetKeywordToken.keyword("do");
074 JetKeywordToken WHEN_KEYWORD = JetKeywordToken.keyword("when");
075 JetKeywordToken INTERFACE_KEYWORD = JetKeywordToken.keyword("interface");
076 // TODO: Discuss "This" keyword
077 JetKeywordToken CAPITALIZED_THIS_KEYWORD = JetKeywordToken.keyword("This");
078
079
080 JetToken AS_SAFE = JetKeywordToken.keyword("AS_SAFE");//new JetToken("as?");
081
082 JetToken IDENTIFIER = new JetToken("IDENTIFIER");
083
084 JetToken FIELD_IDENTIFIER = new JetToken("FIELD_IDENTIFIER");
085 JetSingleValueToken LBRACKET = new JetSingleValueToken("LBRACKET", "[");
086 JetSingleValueToken RBRACKET = new JetSingleValueToken("RBRACKET", "]");
087 JetSingleValueToken LBRACE = new JetSingleValueToken("LBRACE", "{");
088 JetSingleValueToken RBRACE = new JetSingleValueToken("RBRACE", "}");
089 JetSingleValueToken LPAR = new JetSingleValueToken("LPAR", "(");
090 JetSingleValueToken RPAR = new JetSingleValueToken("RPAR", ")");
091 JetSingleValueToken DOT = new JetSingleValueToken("DOT", ".");
092 JetSingleValueToken PLUSPLUS = new JetSingleValueToken("PLUSPLUS", "++");
093 JetSingleValueToken MINUSMINUS = new JetSingleValueToken("MINUSMINUS", "--");
094 JetSingleValueToken MUL = new JetSingleValueToken("MUL", "*");
095 JetSingleValueToken PLUS = new JetSingleValueToken("PLUS", "+");
096 JetSingleValueToken MINUS = new JetSingleValueToken("MINUS", "-");
097 JetSingleValueToken EXCL = new JetSingleValueToken("EXCL", "!");
098 JetSingleValueToken DIV = new JetSingleValueToken("DIV", "/");
099 JetSingleValueToken PERC = new JetSingleValueToken("PERC", "%");
100 JetSingleValueToken LT = new JetSingleValueToken("LT", "<");
101 JetSingleValueToken GT = new JetSingleValueToken("GT", ">");
102 JetSingleValueToken LTEQ = new JetSingleValueToken("LTEQ", "<=");
103 JetSingleValueToken GTEQ = new JetSingleValueToken("GTEQ", ">=");
104 JetSingleValueToken EQEQEQ = new JetSingleValueToken("EQEQEQ", "===");
105 JetSingleValueToken ARROW = new JetSingleValueToken("ARROW", "->");
106 JetSingleValueToken DOUBLE_ARROW = new JetSingleValueToken("DOUBLE_ARROW", "=>");
107 JetSingleValueToken EXCLEQEQEQ = new JetSingleValueToken("EXCLEQEQEQ", "!==");
108 JetSingleValueToken EQEQ = new JetSingleValueToken("EQEQ", "==");
109 JetSingleValueToken EXCLEQ = new JetSingleValueToken("EXCLEQ", "!=");
110 JetSingleValueToken EXCLEXCL = new JetSingleValueToken("EXCLEXCL", "!!");
111 JetSingleValueToken ANDAND = new JetSingleValueToken("ANDAND", "&&");
112 JetSingleValueToken OROR = new JetSingleValueToken("OROR", "||");
113 JetSingleValueToken SAFE_ACCESS = new JetSingleValueToken("SAFE_ACCESS", "?.");
114 JetSingleValueToken ELVIS = new JetSingleValueToken("ELVIS", "?:");
115 JetSingleValueToken QUEST = new JetSingleValueToken("QUEST", "?");
116 JetSingleValueToken COLONCOLON = new JetSingleValueToken("COLONCOLON", "::");
117 JetSingleValueToken COLON = new JetSingleValueToken("COLON", ":");
118 JetSingleValueToken SEMICOLON = new JetSingleValueToken("SEMICOLON", ";");
119 JetSingleValueToken RANGE = new JetSingleValueToken("RANGE", "..");
120 JetSingleValueToken EQ = new JetSingleValueToken("EQ", "=");
121 JetSingleValueToken MULTEQ = new JetSingleValueToken("MULTEQ", "*=");
122 JetSingleValueToken DIVEQ = new JetSingleValueToken("DIVEQ", "/=");
123 JetSingleValueToken PERCEQ = new JetSingleValueToken("PERCEQ", "%=");
124 JetSingleValueToken PLUSEQ = new JetSingleValueToken("PLUSEQ", "+=");
125 JetSingleValueToken MINUSEQ = new JetSingleValueToken("MINUSEQ", "-=");
126 JetKeywordToken NOT_IN = JetKeywordToken.keyword("NOT_IN", "!in");
127 JetKeywordToken NOT_IS = JetKeywordToken.keyword("NOT_IS", "!is");
128 JetSingleValueToken HASH = new JetSingleValueToken("HASH", "#");
129 JetSingleValueToken AT = new JetSingleValueToken("AT", "@");
130
131 JetSingleValueToken COMMA = new JetSingleValueToken("COMMA", ",");
132
133 JetToken EOL_OR_SEMICOLON = new JetToken("EOL_OR_SEMICOLON");
134 JetKeywordToken FILE_KEYWORD = JetKeywordToken.softKeyword("file");
135 JetKeywordToken FIELD_KEYWORD = JetKeywordToken.softKeyword("field");
136 JetKeywordToken PROPERTY_KEYWORD = JetKeywordToken.softKeyword("property");
137 JetKeywordToken RECEIVER_KEYWORD = JetKeywordToken.softKeyword("receiver");
138 JetKeywordToken PARAM_KEYWORD = JetKeywordToken.softKeyword("param");
139 JetKeywordToken SPARAM_KEYWORD = JetKeywordToken.softKeyword("sparam");
140 JetKeywordToken IMPORT_KEYWORD = JetKeywordToken.softKeyword("import");
141 JetKeywordToken WHERE_KEYWORD = JetKeywordToken.softKeyword("where");
142 JetKeywordToken BY_KEYWORD = JetKeywordToken.softKeyword("by");
143 JetKeywordToken GET_KEYWORD = JetKeywordToken.softKeyword("get");
144 JetKeywordToken SET_KEYWORD = JetKeywordToken.softKeyword("set");
145 JetKeywordToken CONSTRUCTOR_KEYWORD = JetKeywordToken.softKeyword("constructor");
146 JetKeywordToken INIT_KEYWORD = JetKeywordToken.softKeyword("init");
147
148 JetModifierKeywordToken ABSTRACT_KEYWORD = JetModifierKeywordToken.softKeywordModifier("abstract");
149 JetModifierKeywordToken ENUM_KEYWORD = JetModifierKeywordToken.softKeywordModifier("enum");
150 JetModifierKeywordToken OPEN_KEYWORD = JetModifierKeywordToken.softKeywordModifier("open");
151 JetModifierKeywordToken INNER_KEYWORD = JetModifierKeywordToken.softKeywordModifier("inner");
152 JetModifierKeywordToken OVERRIDE_KEYWORD = JetModifierKeywordToken.softKeywordModifier("override");
153 JetModifierKeywordToken PRIVATE_KEYWORD = JetModifierKeywordToken.softKeywordModifier("private");
154 JetModifierKeywordToken PUBLIC_KEYWORD = JetModifierKeywordToken.softKeywordModifier("public");
155 JetModifierKeywordToken INTERNAL_KEYWORD = JetModifierKeywordToken.softKeywordModifier("internal");
156 JetModifierKeywordToken PROTECTED_KEYWORD = JetModifierKeywordToken.softKeywordModifier("protected");
157 JetKeywordToken CATCH_KEYWORD = JetKeywordToken.softKeyword("catch");
158 JetModifierKeywordToken OUT_KEYWORD = JetModifierKeywordToken.softKeywordModifier("out");
159 JetModifierKeywordToken VARARG_KEYWORD = JetModifierKeywordToken.softKeywordModifier("vararg");
160 JetModifierKeywordToken REIFIED_KEYWORD = JetModifierKeywordToken.softKeywordModifier("reified");
161 JetKeywordToken DYNAMIC_KEYWORD = JetKeywordToken.softKeyword("dynamic");
162 JetModifierKeywordToken COMPANION_KEYWORD = JetModifierKeywordToken.softKeywordModifier("companion");
163 JetModifierKeywordToken SEALED_KEYWORD = JetModifierKeywordToken.softKeywordModifier("sealed");
164
165 JetModifierKeywordToken DEFAULT_VISIBILITY_KEYWORD = PUBLIC_KEYWORD;
166
167 JetKeywordToken FINALLY_KEYWORD = JetKeywordToken.softKeyword("finally");
168 JetModifierKeywordToken FINAL_KEYWORD = JetModifierKeywordToken.softKeywordModifier("final");
169
170 JetModifierKeywordToken LATE_INIT_KEYWORD = JetModifierKeywordToken.softKeywordModifier("lateinit");
171
172 JetModifierKeywordToken DATA_KEYWORD = JetModifierKeywordToken.softKeywordModifier("data");
173 JetModifierKeywordToken INLINE_KEYWORD = JetModifierKeywordToken.softKeywordModifier("inline");
174 JetModifierKeywordToken NOINLINE_KEYWORD = JetModifierKeywordToken.softKeywordModifier("noinline");
175 JetModifierKeywordToken TAILREC_KEYWORD = JetModifierKeywordToken.softKeywordModifier("tailrec");
176 JetModifierKeywordToken EXTERNAL_KEYWORD = JetModifierKeywordToken.softKeywordModifier("external");
177 JetModifierKeywordToken ANNOTATION_KEYWORD = JetModifierKeywordToken.softKeywordModifier("annotation");
178 JetModifierKeywordToken CROSSINLINE_KEYWORD = JetModifierKeywordToken.softKeywordModifier("crossinline");
179 JetModifierKeywordToken OPERATOR_KEYWORD = JetModifierKeywordToken.softKeywordModifier("operator");
180
181 JetModifierKeywordToken CONST_KEYWORD = JetModifierKeywordToken.softKeywordModifier("const");
182
183 TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_ALIAS_KEYWORD, CLASS_KEYWORD, INTERFACE_KEYWORD,
184 THIS_KEYWORD, SUPER_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD,
185 NULL_KEYWORD,
186 TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
187 IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD,
188 ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, TRY_KEYWORD, WHEN_KEYWORD,
189 NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD, AS_SAFE
190 );
191
192 TokenSet SOFT_KEYWORDS = TokenSet.create(FILE_KEYWORD, IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
193 SET_KEYWORD, ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, INNER_KEYWORD,
194 OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD,
195 CATCH_KEYWORD, FINALLY_KEYWORD, OUT_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, REIFIED_KEYWORD,
196 DYNAMIC_KEYWORD, COMPANION_KEYWORD, CONSTRUCTOR_KEYWORD, INIT_KEYWORD, SEALED_KEYWORD,
197 FIELD_KEYWORD, PROPERTY_KEYWORD, RECEIVER_KEYWORD, PARAM_KEYWORD, SPARAM_KEYWORD,
198 LATE_INIT_KEYWORD,
199 DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD,
200 ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, CONST_KEYWORD, OPERATOR_KEYWORD
201 );
202
203 /*
204 This array is used in stub serialization:
205 1. Do not change order.
206 2. If you add an entry or change order, increase stub version.
207 */
208 JetModifierKeywordToken[] MODIFIER_KEYWORDS_ARRAY =
209 new JetModifierKeywordToken[] {
210 ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, INNER_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD,
211 PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD,
212 REIFIED_KEYWORD, COMPANION_KEYWORD, SEALED_KEYWORD, LATE_INIT_KEYWORD,
213 DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD,
214 CONST_KEYWORD, OPERATOR_KEYWORD
215 };
216
217 // Please synchronize this array with org.jetbrains.kotlin.descriptors.annotations.ANNOTATION_MODIFIERS_FQ_NAMES
218 JetModifierKeywordToken[] ANNOTATION_MODIFIERS_KEYWORDS_ARRAY = new JetModifierKeywordToken[] {
219 DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD
220 };
221
222 TokenSet MODIFIER_KEYWORDS = TokenSet.create(MODIFIER_KEYWORDS_ARRAY);
223
224 TokenSet VISIBILITY_MODIFIERS = TokenSet.create(PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD);
225
226 TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
227
228 /**
229 * Don't add KDocTokens to COMMENTS TokenSet, because it is used in JetParserDefinition.getCommentTokens(),
230 * and therefor all COMMENTS tokens will be ignored by PsiBuilder.
231 *
232 * @see org.jetbrains.kotlin.psi.JetPsiUtil#isInComment(com.intellij.psi.PsiElement)
233 */
234 TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT, SHEBANG_COMMENT);
235 TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.orSet(COMMENTS, TokenSet.create(WHITE_SPACE));
236
237 TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART);
238 TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, EXCLEXCL, MUL, PLUS,
239 MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR,
240 SAFE_ACCESS, ELVIS,
241 // MAP, FILTER,
242 COLON,
243 RANGE, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ,
244 NOT_IN, NOT_IS,
245 IDENTIFIER);
246
247 TokenSet AUGMENTED_ASSIGNMENTS = TokenSet.create(PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
248 TokenSet ALL_ASSIGNMENTS = TokenSet.create(EQ, PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
249 }