| /* |
| * Copyright 2000-2014 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.jetbrains.plugins.groovy.lang.lexer; |
| |
| import com.intellij.psi.TokenType; |
| import com.intellij.psi.tree.IElementType; |
| import com.intellij.psi.tree.TokenSet; |
| import com.intellij.util.containers.hash.HashMap; |
| import org.jetbrains.plugins.groovy.lang.groovydoc.lexer.GroovyDocTokenTypes; |
| import org.jetbrains.plugins.groovy.lang.groovydoc.parser.GroovyDocElementTypes; |
| import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes; |
| |
| import java.util.Map; |
| |
| /** |
| * Utility classdef, tha contains various useful TokenSets |
| * |
| * @author ilyas |
| */ |
| public abstract class TokenSets { |
| |
| public static final TokenSet COMMENTS_TOKEN_SET = TokenSet.create( |
| GroovyTokenTypes.mSH_COMMENT, |
| GroovyTokenTypes.mSL_COMMENT, |
| GroovyTokenTypes.mML_COMMENT, |
| GroovyDocElementTypes.GROOVY_DOC_COMMENT |
| ); |
| public static final TokenSet ALL_COMMENT_TOKENS = TokenSet.orSet(COMMENTS_TOKEN_SET, GroovyDocTokenTypes.GROOVY_DOC_TOKENS); |
| |
| public static final TokenSet SEPARATORS = TokenSet.create( |
| GroovyTokenTypes.mNLS, |
| GroovyTokenTypes.mSEMI |
| ); |
| |
| |
| public static final TokenSet WHITE_SPACE_TOKEN_SET = TokenSet.create( |
| TokenType.WHITE_SPACE |
| ); |
| |
| public static final TokenSet NUMBERS = TokenSet.create( |
| GroovyTokenTypes.mNUM_INT, |
| GroovyTokenTypes.mNUM_BIG_DECIMAL, |
| GroovyTokenTypes.mNUM_BIG_INT, |
| GroovyTokenTypes.mNUM_DOUBLE, |
| GroovyTokenTypes.mNUM_FLOAT, |
| GroovyTokenTypes.mNUM_LONG); |
| |
| |
| public static final TokenSet CONSTANTS = TokenSet.create( |
| GroovyTokenTypes.mNUM_INT, |
| GroovyTokenTypes.mNUM_BIG_DECIMAL, |
| GroovyTokenTypes.mNUM_BIG_INT, |
| GroovyTokenTypes.mNUM_DOUBLE, |
| GroovyTokenTypes.mNUM_FLOAT, |
| GroovyTokenTypes.mNUM_LONG, |
| GroovyTokenTypes.kTRUE, |
| GroovyTokenTypes.kFALSE, |
| GroovyTokenTypes.kNULL, |
| GroovyTokenTypes.mSTRING_LITERAL, |
| GroovyTokenTypes.mGSTRING_LITERAL, |
| GroovyTokenTypes.mREGEX_LITERAL, |
| GroovyTokenTypes.mDOLLAR_SLASH_REGEX_LITERAL |
| ); |
| |
| public static final TokenSet BUILT_IN_TYPES = TokenSet.create( |
| GroovyTokenTypes.kVOID, |
| GroovyTokenTypes.kBOOLEAN, |
| GroovyTokenTypes.kBYTE, |
| GroovyTokenTypes.kCHAR, |
| GroovyTokenTypes.kSHORT, |
| GroovyTokenTypes.kINT, |
| GroovyTokenTypes.kFLOAT, |
| GroovyTokenTypes.kLONG, |
| GroovyTokenTypes.kDOUBLE |
| ); |
| |
| public static final TokenSet PROPERTY_NAMES = |
| TokenSet.create(GroovyTokenTypes.mIDENT, GroovyTokenTypes.mSTRING_LITERAL, GroovyTokenTypes.mGSTRING_LITERAL, |
| GroovyTokenTypes.mREGEX_LITERAL, GroovyTokenTypes.mDOLLAR_SLASH_REGEX_LITERAL); |
| |
| public static final TokenSet KEYWORDS = TokenSet.create(GroovyTokenTypes.kABSTRACT, GroovyTokenTypes.kAS, GroovyTokenTypes.kASSERT, |
| GroovyTokenTypes.kBOOLEAN, GroovyTokenTypes.kBREAK, GroovyTokenTypes.kBYTE, |
| GroovyTokenTypes.kCASE, GroovyTokenTypes.kCATCH, GroovyTokenTypes.kCHAR, |
| GroovyTokenTypes.kCLASS, |
| GroovyTokenTypes.kCONTINUE, GroovyTokenTypes.kDEF, GroovyTokenTypes.kDEFAULT, |
| GroovyTokenTypes.kDO, GroovyTokenTypes.kDOUBLE, GroovyTokenTypes.kELSE, |
| GroovyTokenTypes.kEXTENDS, GroovyTokenTypes.kENUM, GroovyTokenTypes.kFALSE, |
| GroovyTokenTypes.kFINAL, |
| GroovyTokenTypes.kFLOAT, GroovyTokenTypes.kFOR, GroovyTokenTypes.kFINALLY, |
| GroovyTokenTypes.kIF, GroovyTokenTypes.kIMPLEMENTS, GroovyTokenTypes.kIMPORT, |
| GroovyTokenTypes.kIN, GroovyTokenTypes.kINSTANCEOF, GroovyTokenTypes.kINT, |
| GroovyTokenTypes.kINTERFACE, GroovyTokenTypes.kLONG, GroovyTokenTypes.kNATIVE, |
| GroovyTokenTypes.kNEW, GroovyTokenTypes.kNULL, GroovyTokenTypes.kPACKAGE, |
| GroovyTokenTypes.kPRIVATE, GroovyTokenTypes.kPROTECTED, GroovyTokenTypes.kPUBLIC, |
| GroovyTokenTypes.kRETURN, GroovyTokenTypes.kSHORT, GroovyTokenTypes.kSTATIC, |
| GroovyTokenTypes.kSTRICTFP, GroovyTokenTypes.kSUPER, GroovyTokenTypes.kSWITCH, |
| GroovyTokenTypes.kSYNCHRONIZED, GroovyTokenTypes.kTHIS, |
| GroovyTokenTypes.kTHROW, GroovyTokenTypes.kTHROWS, GroovyTokenTypes.kTRAIT, |
| GroovyTokenTypes.kTRANSIENT, GroovyTokenTypes.kTRUE, GroovyTokenTypes.kTRY, |
| GroovyTokenTypes.kVOID, GroovyTokenTypes.kVOLATILE, GroovyTokenTypes.kWHILE); |
| |
| public static final TokenSet REFERENCE_NAMES = TokenSet.orSet(KEYWORDS, PROPERTY_NAMES, NUMBERS); |
| public static final TokenSet REFERENCE_NAMES_WITHOUT_NUMBERS = TokenSet.orSet(KEYWORDS, PROPERTY_NAMES); |
| |
| public static final TokenSet REFERENCE_NAME_PREFIXES = TokenSet.orSet(NUMBERS, KEYWORDS, TokenSet.create(GroovyTokenTypes.mIDENT, |
| GroovyTokenTypes.mSTRING_LITERAL, |
| GroovyTokenTypes.mGSTRING_LITERAL, |
| GroovyTokenTypes.mGSTRING_BEGIN, |
| GroovyTokenTypes.mREGEX_BEGIN, |
| GroovyTokenTypes.mDOLLAR_SLASH_REGEX_BEGIN, |
| GroovyTokenTypes.mAT)); |
| |
| |
| public static final TokenSet VISIBILITY_MODIFIERS = TokenSet.create( |
| GroovyTokenTypes.kPRIVATE, |
| GroovyTokenTypes.kPROTECTED, |
| GroovyTokenTypes.kPUBLIC |
| ); |
| |
| public static final TokenSet MODIFIERS = TokenSet.create( |
| GroovyTokenTypes.kABSTRACT, |
| GroovyTokenTypes.kPRIVATE, |
| GroovyTokenTypes.kPUBLIC, |
| GroovyTokenTypes.kPROTECTED, |
| GroovyTokenTypes.kSTATIC, |
| GroovyTokenTypes.kTRANSIENT, |
| GroovyTokenTypes.kFINAL, |
| GroovyTokenTypes.kABSTRACT, |
| GroovyTokenTypes.kNATIVE, |
| GroovyTokenTypes.kSYNCHRONIZED, |
| GroovyTokenTypes.kSTRICTFP, |
| GroovyTokenTypes.kVOLATILE, |
| GroovyTokenTypes.kSTRICTFP, |
| GroovyTokenTypes.kDEF |
| ); |
| |
| public static final TokenSet STRING_LITERALS = TokenSet.create( |
| GroovyTokenTypes.mSTRING_LITERAL, |
| GroovyTokenTypes.mGSTRING_LITERAL, |
| GroovyTokenTypes.mGSTRING_BEGIN, |
| GroovyTokenTypes.mGSTRING_CONTENT, |
| GroovyTokenTypes.mGSTRING_END, |
| GroovyTokenTypes.mREGEX_LITERAL, |
| GroovyTokenTypes.mREGEX_BEGIN, |
| GroovyTokenTypes.mREGEX_CONTENT, |
| GroovyTokenTypes.mREGEX_END, |
| GroovyTokenTypes.mDOLLAR_SLASH_REGEX_LITERAL, |
| GroovyTokenTypes.mDOLLAR_SLASH_REGEX_BEGIN, |
| GroovyTokenTypes.mDOLLAR_SLASH_REGEX_CONTENT, |
| GroovyTokenTypes.mDOLLAR_SLASH_REGEX_END |
| ); |
| |
| public static final TokenSet GSTRING_CONTENT_PARTS = TokenSet.create(GroovyElementTypes.GSTRING_CONTENT, |
| GroovyElementTypes.GSTRING_INJECTION); |
| |
| public static final TokenSet FOR_IN_DELIMITERS = TokenSet.create(GroovyTokenTypes.kIN, GroovyTokenTypes.mCOLON); |
| |
| public static final TokenSet RELATIONS = TokenSet.create( |
| GroovyTokenTypes.mLT, |
| GroovyTokenTypes.mGT, |
| GroovyTokenTypes.mLE, |
| GroovyTokenTypes.mGE, |
| GroovyTokenTypes.kIN |
| ); |
| public static final TokenSet WHITE_SPACES_SET = TokenSet.create(GroovyTokenTypes.mNLS, TokenType.WHITE_SPACE); |
| |
| public static final TokenSet COMMENT_SET = TokenSet.create(GroovyTokenTypes.mML_COMMENT, GroovyTokenTypes.mSH_COMMENT, |
| GroovyTokenTypes.mSL_COMMENT, GroovyDocElementTypes.GROOVY_DOC_COMMENT); |
| |
| public static final TokenSet STRING_LITERAL_SET = TokenSet.create(GroovyTokenTypes.mSTRING_LITERAL, GroovyTokenTypes.mGSTRING_LITERAL, |
| GroovyTokenTypes.mREGEX_LITERAL, |
| GroovyTokenTypes.mDOLLAR_SLASH_REGEX_LITERAL); |
| |
| public static final TokenSet BRACES = TokenSet.create(GroovyTokenTypes.mLBRACK, GroovyTokenTypes.mRBRACK, GroovyTokenTypes.mLPAREN, |
| GroovyTokenTypes.mRPAREN, GroovyTokenTypes.mLCURLY, GroovyTokenTypes.mRCURLY); |
| |
| public static final TokenSet ASSIGN_OP_SET = TokenSet.create(GroovyTokenTypes.mASSIGN, GroovyTokenTypes.mBAND_ASSIGN, |
| GroovyTokenTypes.mBOR_ASSIGN, GroovyTokenTypes.mBSR_ASSIGN, |
| GroovyTokenTypes.mBXOR_ASSIGN, GroovyTokenTypes.mDIV_ASSIGN, |
| GroovyTokenTypes.mMINUS_ASSIGN, GroovyTokenTypes.mMOD_ASSIGN, |
| GroovyTokenTypes.mPLUS_ASSIGN, GroovyTokenTypes.mSL_ASSIGN, |
| GroovyTokenTypes.mSR_ASSIGN, |
| GroovyTokenTypes.mSTAR_ASSIGN, GroovyTokenTypes.mSTAR_STAR_ASSIGN); |
| |
| public static final TokenSet UNARY_OP_SET = TokenSet.create(GroovyTokenTypes.mBNOT, GroovyTokenTypes.mLNOT, GroovyTokenTypes.mMINUS, |
| GroovyTokenTypes.mDEC, GroovyTokenTypes.mPLUS, GroovyTokenTypes.mINC); |
| |
| public static final TokenSet POSTFIX_UNARY_OP_SET = TokenSet.create(GroovyTokenTypes.mDEC, GroovyTokenTypes.mINC); |
| |
| public static final TokenSet BINARY_OP_SET = TokenSet.create(GroovyTokenTypes.mBAND, GroovyTokenTypes.mBOR, GroovyTokenTypes.mBXOR, |
| GroovyTokenTypes.mDIV, GroovyTokenTypes.mEQUAL, GroovyTokenTypes.mGE, |
| GroovyTokenTypes.mGT, GroovyTokenTypes.mLOR, GroovyTokenTypes.mLT, |
| GroovyTokenTypes.mLE, GroovyTokenTypes.mMINUS, GroovyTokenTypes.kAS, |
| GroovyTokenTypes.kIN, |
| GroovyTokenTypes.mMOD, GroovyTokenTypes.mPLUS, GroovyTokenTypes.mSTAR, |
| GroovyTokenTypes.mSTAR_STAR, GroovyTokenTypes.mNOT_EQUAL, |
| GroovyTokenTypes.mCOMPARE_TO, GroovyTokenTypes.mLAND, |
| GroovyTokenTypes.kINSTANCEOF, |
| GroovyElementTypes.COMPOSITE_LSHIFT_SIGN, |
| GroovyElementTypes.COMPOSITE_RSHIFT_SIGN, |
| GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN, |
| GroovyTokenTypes.mREGEX_FIND, GroovyTokenTypes.mREGEX_MATCH, |
| GroovyTokenTypes.mRANGE_INCLUSIVE, GroovyTokenTypes.mRANGE_EXCLUSIVE); |
| |
| public static final TokenSet ASSOCIATIVE_BINARY_OP_SET = TokenSet.create(GroovyTokenTypes.mBAND, GroovyTokenTypes.mBOR, |
| GroovyTokenTypes.mBXOR, GroovyTokenTypes.mEQUAL, |
| GroovyTokenTypes.mLOR, GroovyTokenTypes.mPLUS, |
| GroovyTokenTypes.mSTAR, GroovyTokenTypes.mNOT_EQUAL, |
| GroovyTokenTypes.mLAND); |
| |
| |
| public static final TokenSet BINARY_EXPRESSIONS = TokenSet.create(GroovyElementTypes.ADDITIVE_EXPRESSION, |
| GroovyElementTypes.MULTIPLICATIVE_EXPRESSION, |
| GroovyElementTypes.POWER_EXPRESSION, |
| GroovyElementTypes.POWER_EXPRESSION_SIMPLE, |
| GroovyElementTypes.LOGICAL_OR_EXPRESSION, |
| GroovyElementTypes.LOGICAL_AND_EXPRESSION, |
| GroovyElementTypes.INCLUSIVE_OR_EXPRESSION, |
| GroovyElementTypes.EXCLUSIVE_OR_EXPRESSION, |
| GroovyElementTypes.AND_EXPRESSION, |
| GroovyElementTypes.REGEX_FIND_EXPRESSION, |
| GroovyElementTypes.REGEX_MATCH_EXPRESSION, |
| GroovyElementTypes.EQUALITY_EXPRESSION, |
| GroovyElementTypes.RELATIONAL_EXPRESSION, |
| GroovyElementTypes.SHIFT_EXPRESSION, |
| GroovyElementTypes.RANGE_EXPRESSION); |
| |
| public static final TokenSet DOTS = TokenSet.create(GroovyTokenTypes.mSPREAD_DOT, GroovyTokenTypes.mOPTIONAL_DOT, |
| GroovyTokenTypes.mMEMBER_POINTER, GroovyTokenTypes.mDOT); |
| |
| public static final TokenSet WHITE_SPACES_OR_COMMENTS = TokenSet.orSet(WHITE_SPACES_SET, COMMENT_SET); |
| |
| public static final Map<IElementType, IElementType> ASSIGNMENTS_TO_OPERATORS = new HashMap<IElementType, IElementType>(); |
| static { |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mMINUS_ASSIGN, GroovyTokenTypes.mMINUS); |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mPLUS_ASSIGN, GroovyTokenTypes.mPLUS); |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mDIV_ASSIGN, GroovyTokenTypes.mDIV); |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mSTAR_ASSIGN, GroovyTokenTypes.mSTAR); |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mMOD_ASSIGN, GroovyTokenTypes.mMOD); |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mSL_ASSIGN, GroovyElementTypes.COMPOSITE_LSHIFT_SIGN); |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mSR_ASSIGN, GroovyElementTypes.COMPOSITE_RSHIFT_SIGN); |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mBSR_ASSIGN, GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN); |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mBAND_ASSIGN, GroovyTokenTypes.mBAND); |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mBOR_ASSIGN, GroovyTokenTypes.mBOR); |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mBXOR_ASSIGN, GroovyTokenTypes.mBXOR); |
| ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mSTAR_STAR_ASSIGN, GroovyTokenTypes.mSTAR_STAR); |
| } |
| |
| public static final TokenSet ASSIGNMENTS = TokenSet.create( |
| GroovyTokenTypes.mASSIGN, |
| GroovyTokenTypes.mPLUS_ASSIGN, |
| GroovyTokenTypes.mMINUS_ASSIGN, |
| GroovyTokenTypes.mSTAR_ASSIGN, |
| GroovyTokenTypes.mDIV_ASSIGN, |
| GroovyTokenTypes.mMOD_ASSIGN, |
| GroovyTokenTypes.mSL_ASSIGN, |
| GroovyTokenTypes.mSR_ASSIGN, |
| GroovyTokenTypes.mBSR_ASSIGN, |
| GroovyTokenTypes.mBAND_ASSIGN, |
| GroovyTokenTypes.mBOR_ASSIGN, |
| GroovyTokenTypes.mBXOR_ASSIGN, |
| GroovyTokenTypes.mSTAR_STAR_ASSIGN |
| ); |
| |
| public static final TokenSet SHIFT_SIGNS = TokenSet.create(GroovyElementTypes.COMPOSITE_LSHIFT_SIGN, |
| GroovyElementTypes.COMPOSITE_RSHIFT_SIGN, |
| GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN); |
| public static final TokenSet CODE_REFERENCE_ELEMENT_NAME_TOKENS = TokenSet.create(GroovyTokenTypes.mIDENT, GroovyTokenTypes.kDEF, |
| GroovyTokenTypes.kIN, GroovyTokenTypes.kAS); |
| |
| public static final TokenSet BLOCK_SET = TokenSet.create(GroovyElementTypes.CLOSABLE_BLOCK, GroovyElementTypes.BLOCK_STATEMENT, |
| GroovyElementTypes.CONSTRUCTOR_BODY, GroovyElementTypes.OPEN_BLOCK, |
| GroovyElementTypes.ENUM_BODY, GroovyElementTypes.CLASS_BODY); |
| public static final TokenSet METHOD_DEFS = TokenSet.create(GroovyElementTypes.METHOD_DEFINITION, |
| GroovyElementTypes.CONSTRUCTOR_DEFINITION, |
| GroovyElementTypes.ANNOTATION_METHOD); |
| public static final TokenSet VARIABLES = TokenSet.create(GroovyElementTypes.VARIABLE, GroovyElementTypes.FIELD); |
| public static final TokenSet TYPE_ELEMENTS = TokenSet.create(GroovyElementTypes.CLASS_TYPE_ELEMENT, GroovyElementTypes.ARRAY_TYPE, |
| GroovyElementTypes.BUILT_IN_TYPE, GroovyElementTypes.TYPE_ARGUMENT, |
| GroovyElementTypes.DISJUNCTION_TYPE_ELEMENT); |
| |
| |
| public static final TokenSet TYPE_DEFINITIONS = TokenSet.create(GroovyElementTypes.CLASS_DEFINITION, |
| GroovyElementTypes.ENUM_DEFINITION, |
| GroovyElementTypes.INTERFACE_DEFINITION, |
| GroovyElementTypes.ANNOTATION_DEFINITION, |
| GroovyElementTypes.TRAIT_DEFINITION); |
| } |