001    /*
002     * Copyright 2010-2013 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.jet.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.jet.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_KEYWORD             = JetKeywordToken.keyword("type");
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        JetKeywordToken IN_KEYWORD               = JetKeywordToken.keyword("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 TRAIT_KEYWORD     = JetKeywordToken.keyword("trait");
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        JetToken LABEL_IDENTIFIER = new JetToken("LABEL_IDENTIFIER");
084    
085        JetToken FIELD_IDENTIFIER = new JetToken("FIELD_IDENTIFIER");
086        JetToken LBRACKET    = new JetToken("LBRACKET");
087        JetToken RBRACKET    = new JetToken("RBRACKET");
088        JetToken LBRACE      = new JetToken("LBRACE");
089        JetToken RBRACE      = new JetToken("RBRACE");
090        JetToken LPAR        = new JetToken("LPAR");
091        JetToken RPAR        = new JetToken("RPAR");
092        JetToken DOT         = new JetToken("DOT");
093        JetToken PLUSPLUS    = new JetToken("PLUSPLUS");
094        JetToken MINUSMINUS  = new JetToken("MINUSMINUS");
095        JetToken MUL         = new JetToken("MUL");
096        JetToken PLUS        = new JetToken("PLUS");
097        JetToken MINUS       = new JetToken("MINUS");
098        JetToken EXCL        = new JetToken("EXCL");
099        JetToken DIV         = new JetToken("DIV");
100        JetToken PERC        = new JetToken("PERC");
101        JetToken LT          = new JetToken("LT");
102        JetToken GT          = new JetToken("GT");
103        JetToken LTEQ        = new JetToken("LTEQ");
104        JetToken GTEQ        = new JetToken("GTEQ");
105        JetToken EQEQEQ      = new JetToken("EQEQEQ");
106        JetToken ARROW       = new JetToken("ARROW");
107        JetToken DOUBLE_ARROW       = new JetToken("DOUBLE_ARROW");
108        JetToken EXCLEQEQEQ  = new JetToken("EXCLEQEQEQ");
109        JetToken EQEQ        = new JetToken("EQEQ");
110        JetToken EXCLEQ      = new JetToken("EXCLEQ");
111        JetToken EXCLEXCL      = new JetToken("EXCLEXCL");
112        JetToken ANDAND      = new JetToken("ANDAND");
113        JetToken OROR        = new JetToken("OROR");
114        JetToken SAFE_ACCESS = new JetToken("SAFE_ACCESS");
115        JetToken ELVIS       = new JetToken("ELVIS");
116        //    JetToken MAP         = new JetToken("MAP");
117        //    JetToken FILTER      = new JetToken("FILTER");
118        JetToken QUEST       = new JetToken("QUEST");
119        JetToken COLONCOLON  = new JetToken("COLONCOLON");
120        JetToken COLON       = new JetToken("COLON");
121        JetToken SEMICOLON   = new JetToken("SEMICOLON");
122        JetToken RANGE       = new JetToken("RANGE");
123        JetToken EQ          = new JetToken("EQ");
124        JetToken MULTEQ      = new JetToken("MULTEQ");
125        JetToken DIVEQ       = new JetToken("DIVEQ");
126        JetToken PERCEQ      = new JetToken("PERCEQ");
127        JetToken PLUSEQ      = new JetToken("PLUSEQ");
128        JetToken MINUSEQ     = new JetToken("MINUSEQ");
129        JetToken NOT_IN      = JetKeywordToken.keyword("NOT_IN");
130        JetToken NOT_IS      = JetKeywordToken.keyword("NOT_IS");
131        JetToken HASH        = new JetToken("HASH");
132        JetToken AT          = new JetToken("AT");
133        JetToken ATAT          = new JetToken("ATAT");
134    
135        JetToken IDE_TEMPLATE_START = new JetToken("IDE_TEMPLATE_START");
136        JetToken IDE_TEMPLATE_END = new JetToken("IDE_TEMPLATE_END");
137    
138        TokenSet LABELS = TokenSet.create(AT, ATAT, LABEL_IDENTIFIER);
139    
140        JetToken COMMA       = new JetToken("COMMA");
141    
142        JetToken EOL_OR_SEMICOLON   = new JetToken("EOL_OR_SEMICOLON");
143        JetKeywordToken IMPORT_KEYWORD    = JetKeywordToken.softKeyword("import");
144        JetKeywordToken WHERE_KEYWORD     = JetKeywordToken.softKeyword("where");
145        JetKeywordToken BY_KEYWORD        = JetKeywordToken.softKeyword("by");
146        JetKeywordToken GET_KEYWORD       = JetKeywordToken.softKeyword("get");
147        JetKeywordToken SET_KEYWORD       = JetKeywordToken.softKeyword("set");
148        JetKeywordToken ABSTRACT_KEYWORD  = JetKeywordToken.softKeyword("abstract");
149        JetKeywordToken ENUM_KEYWORD      = JetKeywordToken.softKeyword("enum");
150        JetKeywordToken OPEN_KEYWORD      = JetKeywordToken.softKeyword("open");
151        JetKeywordToken INNER_KEYWORD     = JetKeywordToken.softKeyword("inner");
152        JetKeywordToken ANNOTATION_KEYWORD = JetKeywordToken.softKeyword("annotation");
153        JetKeywordToken OVERRIDE_KEYWORD  = JetKeywordToken.softKeyword("override");
154        JetKeywordToken PRIVATE_KEYWORD   = JetKeywordToken.softKeyword("private");
155        JetKeywordToken PUBLIC_KEYWORD    = JetKeywordToken.softKeyword("public");
156        JetKeywordToken INTERNAL_KEYWORD  = JetKeywordToken.softKeyword("internal");
157        JetKeywordToken PROTECTED_KEYWORD = JetKeywordToken.softKeyword("protected");
158        JetKeywordToken CATCH_KEYWORD     = JetKeywordToken.softKeyword("catch");
159        JetKeywordToken OUT_KEYWORD       = JetKeywordToken.softKeyword("out");
160        JetKeywordToken VARARG_KEYWORD       = JetKeywordToken.softKeyword("vararg");
161        JetKeywordToken INLINE_KEYWORD       = JetKeywordToken.softKeyword("inline");
162        JetKeywordToken REIFIED_KEYWORD = JetKeywordToken.softKeyword("reified");
163    
164        JetKeywordToken FINALLY_KEYWORD   = JetKeywordToken.softKeyword("finally");
165        JetKeywordToken FINAL_KEYWORD   = JetKeywordToken.softKeyword("final");
166    
167        TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD, TRAIT_KEYWORD,
168                                            THIS_KEYWORD, SUPER_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD,
169                                            NULL_KEYWORD,
170                                            TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
171                                            IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD,
172                                            ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, TRY_KEYWORD, WHEN_KEYWORD,
173                                            NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD, AS_SAFE
174        );
175    
176        TokenSet SOFT_KEYWORDS = TokenSet.create(IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
177                                                 SET_KEYWORD, ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, INNER_KEYWORD, ANNOTATION_KEYWORD,
178                                                 OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD,
179                                                 CATCH_KEYWORD, FINALLY_KEYWORD, OUT_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, REIFIED_KEYWORD
180        );
181    
182        TokenSet MODIFIER_KEYWORDS = TokenSet.create(ABSTRACT_KEYWORD, ENUM_KEYWORD,
183                                                     OPEN_KEYWORD, INNER_KEYWORD, ANNOTATION_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
184                                                     PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, REIFIED_KEYWORD
185        );
186        TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
187    
188        /**
189         * Don't add KDocTokens to COMMENTS TokenSet, because it is used in JetParserDefinition.getCommentTokens(),
190         * and therefor all COMMENTS tokens will be ignored by PsiBuilder.
191         *
192         * @see org.jetbrains.jet.lang.psi.JetPsiUtil.isInComment()
193         */
194        TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT, SHEBANG_COMMENT);
195        TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.orSet(COMMENTS, TokenSet.create(WHITE_SPACE));
196    
197        TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART);
198        TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, EXCLEXCL, MUL, PLUS,
199                                              MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR,
200                                              SAFE_ACCESS, ELVIS,
201                //            MAP, FILTER,
202                                              COLON,
203                                              RANGE, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ,
204                                              NOT_IN, NOT_IS,
205                                              IDENTIFIER, LABEL_IDENTIFIER, ATAT, AT);
206    
207        TokenSet AUGMENTED_ASSIGNMENTS = TokenSet.create(PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
208        TokenSet ALL_ASSIGNMENTS = TokenSet.create(EQ, PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
209    }