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 }