diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java index 4ca2050c945c..707e80f59444 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -/* The following code was generated by JFlex 1.4.3 on 10/22/13 3:36 PM */ +/* The following code was generated by JFlex 1.4.3 on 10/22/13 5:15 PM */ package org.jetbrains.plugins.groovy.lang.lexer; @@ -28,11 +28,9 @@ import java.util.Stack; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 10/22/13 3:36 PM from the specification file + * on 10/22/13 5:15 PM from the specification file * /Users/maxmedvedev/work/IDEA/tools/lexer/../../community/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex */ -@SuppressWarnings({"UnnecessaryFullyQualifiedName", "FieldCanBeLocal", "UnusedDeclaration", "UnusedAssignment", "AccessStaticViaInstance", - "AssignmentToStaticFieldFromInstanceMethod", "MethodMayBeStatic", "CStyleArrayDeclaration", "UnnecessarySemicolon"}) public class _GroovyLexer implements FlexLexer, GroovyTokenTypes, TokenType { /** initial size of the lookahead buffer */ private static final int ZZ_BUFFERSIZE = 16384; @@ -1772,88 +1770,201 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes, TokenType { zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 70: - { yybegin(WAIT_FOR_REGEX); - return(mSPREAD_DOT); + case 58: + { yybegin(IN_DOLLAR_SLASH_REGEX_DOT); + return mIDENT; } case 173: break; - case 27: + case 5: { yybegin(WAIT_FOR_REGEX); - return(mMOD); + return(mSTAR); } case 174: break; - case 46: - { yybegin(NLS_AFTER_NLS); - afterComment = IN_TRIPLE_IDENT; - return mNLS; + case 73: + { yybegin(WAIT_FOR_REGEX); + return(mNOT_EQUAL); } case 175: break; - case 112: - { yybegin(WAIT_FOR_REGEX); - return(mSTAR_STAR_ASSIGN); + case 47: + { blockStack.push(mLCURLY); + braceCount.push(mLCURLY); + yybegin(NLS_AFTER_LBRACE); + return(mLCURLY); } case 176: break; case 133: { return( kTRUE ); } case 177: break; - case 122: - { yybegin(WAIT_FOR_REGEX); - return(mREGEX_MATCH); - } - case 178: break; - case 69: - { yybegin(WAIT_FOR_REGEX); - return(mSTAR_STAR); - } - case 179: break; case 135: { return( kNULL ); } - case 180: break; + case 178: break; + case 23: + { yybegin(WAIT_FOR_REGEX); + return(mCOMMA); + } + case 179: break; case 129: { return( kENUM ); } + case 180: break; + case 61: + { yybegin(IN_DOLLAR_SLASH_REGEX_DOLLAR); + return mDOLLAR; + } case 181: break; - case 53: - { blockStack.push(mDIV); - braceCount.push(mLCURLY); - yybegin(NLS_AFTER_LBRACE); - return mLCURLY; + case 83: + { yybegin(WAIT_FOR_REGEX); + return(mDEC); } case 182: break; - case 55: - { if (!gStringStack.isEmpty()) { - gStringStack.pop(); - } + case 80: + { return( kDO ); + } + case 183: break; + case 86: + { yybegin(WAIT_FOR_REGEX); + return(mRANGE_INCLUSIVE); + } + case 184: break; + case 72: + { return mSH_COMMENT; + } + case 185: break; + case 125: + { yybegin(WAIT_FOR_REGEX); + return(mSR_ASSIGN); + } + case 186: break; + case 52: + { yybegin(IN_REGEX_DOT); + return mIDENT; + } + case 187: break; + case 105: + { yybegin(IN_DOLLAR_SLASH_REGEX); + gStringStack.push(mDOLLAR); + return mDOLLAR_SLASH_REGEX_BEGIN; + } + case 188: break; + case 49: + { yypushback(1); if (blockStack.isEmpty()){ yybegin(YYINITIAL); } else { yybegin(IN_INNER_BLOCK); } - return mREGEX_END; } - case 183: break; - case 62: - { yypushback(1); - yybegin(IN_DOLLAR_SLASH_REGEX); + case 189: break; + case 7: + { return mIDENT; } - case 184: break; - case 80: - { return( kDO ); + case 190: break; + case 25: + { yybegin(WAIT_FOR_REGEX); + return(mGT); } - case 185: break; - case 65: - { yypushback(1); - yybegin(NLS_AFTER_COMMENT); + case 191: break; + case 144: + { return( kSUPER ); } - case 186: break; - case 72: - { return mSH_COMMENT; + case 192: break; + case 119: + { yybegin(IN_TRIPLE_GSTRING); + gStringStack.push(mLBRACK); + return mGSTRING_BEGIN; } - case 187: break; - case 42: - { if (!gStringStack.isEmpty()) { + case 193: break; + case 68: + { yybegin(WAIT_FOR_REGEX); + return(mDIV_ASSIGN); + } + case 194: break; + case 171: + { return( kINSTANCEOF ); + } + case 195: break; + case 93: + { yybegin(WAIT_FOR_REGEX); + return(mEQUAL); + } + case 196: break; + case 18: + { yybegin(WAIT_FOR_REGEX); + braceCount.push(mLPAREN); + return(mLPAREN); + } + case 197: break; + case 22: + { yybegin(WAIT_FOR_REGEX); + return(mCOLON); + } + case 198: break; + case 152: + { return( kSTATIC ); + } + case 199: break; + case 143: + { return( kCATCH ); + } + case 200: break; + case 29: + { yybegin(WAIT_FOR_REGEX); + return(mBOR); + } + case 201: break; + case 54: + { return mREGEX_CONTENT; + } + case 202: break; + case 106: + // lookahead expression with fixed lookahead length + yypushback(1); + { return mREGEX_CONTENT; + } + case 203: break; + case 27: + { yybegin(WAIT_FOR_REGEX); + return(mMOD); + } + case 204: break; + case 24: + { yybegin(WAIT_FOR_REGEX); + return(mLT); + } + case 205: break; + case 168: + { return( kPROTECTED ); + } + case 206: break; + case 113: + { return mNUM_BIG_DECIMAL; + } + case 207: break; + case 70: + { yybegin(WAIT_FOR_REGEX); + return(mSPREAD_DOT); + } + case 208: break; + case 149: + { return( kDOUBLE ); + } + case 209: break; + case 37: + { yybegin(IN_TRIPLE_DOT); + return mIDENT; + } + case 210: break; + case 35: + { blockStack.push(mLPAREN); + braceCount.push(mLCURLY); + yybegin(NLS_AFTER_LBRACE); + return mLCURLY; + } + case 211: break; + case 126: + { if (!gStringStack.isEmpty()){ gStringStack.pop(); } if (blockStack.isEmpty()){ @@ -1863,407 +1974,54 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes, TokenType { } return mGSTRING_END; } - case 188: break; - case 7: - { return mIDENT; - } - case 189: break; - case 88: - { if (zzStartRead == 0 || - zzBuffer.subSequence(0, zzStartRead).toString().trim().length() == 0) { - yypushback(2); - yybegin(WAIT_FOR_REGEX); - } else { - yypushback(1); - return(mDOLLAR); - } - } - case 190: break; - case 144: - { return( kSUPER ); - } - case 191: break; - case 94: - { yybegin(WAIT_FOR_REGEX); - return(mREGEX_FIND); - } - case 192: break; - case 99: - { yybegin(WAIT_FOR_REGEX); - return(mBOR_ASSIGN); - } - case 193: break; - case 171: - { return( kINSTANCEOF ); - } - case 194: break; - case 35: - { blockStack.push(mLPAREN); - braceCount.push(mLCURLY); - yybegin(NLS_AFTER_LBRACE); - return mLCURLY; - } - case 195: break; - case 108: - { if (!gStringStack.isEmpty()) { - gStringStack.pop(); - } - if (blockStack.isEmpty()){ - yybegin(YYINITIAL); - } else { - yybegin(IN_INNER_BLOCK); - } - return mDOLLAR_SLASH_REGEX_END; - } - case 196: break; - case 73: - { yybegin(WAIT_FOR_REGEX); - return(mNOT_EQUAL); - } - case 197: break; - case 103: - // lookahead expression with fixed base length - zzMarkedPos = zzStartRead + 1; - { yybegin(IN_SINGLE_IDENT); - return mDOT; - } - case 198: break; - case 152: - { return( kSTATIC ); - } - case 199: break; - case 100: - { yybegin(WAIT_FOR_REGEX); - return(mLOR); - } - case 200: break; - case 57: - { yypushback(1); - yybegin(IN_REGEX); - } - case 201: break; - case 143: - { return( kCATCH ); - } - case 202: break; - case 54: - { return mREGEX_CONTENT; - } - case 203: break; - case 106: - // lookahead expression with fixed lookahead length - yypushback(1); - { return mREGEX_CONTENT; - } - case 204: break; - case 4: - { if (zzStartRead == 0 || - zzBuffer.subSequence(0, zzStartRead).toString().trim().length() == 0) { - yypushback(1); - yybegin(WAIT_FOR_REGEX); - } else { - return(mDIV); - } - } - case 205: break; - case 97: - { yybegin(WAIT_FOR_REGEX); - return(mMOD_ASSIGN); - } - case 206: break; - case 168: - { return( kPROTECTED ); - } - case 207: break; - case 86: - { yybegin(WAIT_FOR_REGEX); - return(mRANGE_INCLUSIVE); - } - case 208: break; - case 113: - { return mNUM_BIG_DECIMAL; - } - case 209: break; - case 58: - { yybegin(IN_DOLLAR_SLASH_REGEX_DOT); - return mIDENT; - } - case 210: break; - case 25: - { yybegin(WAIT_FOR_REGEX); - return(mGT); - } - case 211: break; - case 33: - { yypushback(1); - yybegin(IN_SINGLE_GSTRING); - } case 212: break; - case 125: - { yybegin(WAIT_FOR_REGEX); - return(mSR_ASSIGN); - } - case 213: break; - case 149: - { return( kDOUBLE ); - } - case 214: break; - case 119: - { yybegin(IN_TRIPLE_GSTRING); - gStringStack.push(mLBRACK); - return mGSTRING_BEGIN; - } - case 215: break; case 121: { return( kNEW ); } - case 216: break; - case 36: - { yypushback(1); - yybegin(IN_TRIPLE_GSTRING); - } - case 217: break; - case 17: - { yybegin(WAIT_FOR_REGEX); - return(mASSIGN); - } - case 218: break; - case 50: - { afterComment = YYINITIAL; - return(WHITE_SPACE); - } - case 219: break; + case 213: break; case 156: { return( kNATIVE ); } - case 220: break; - case 114: - { return( kFOR ); - } - case 221: break; - case 98: - { yybegin(WAIT_FOR_REGEX); - return(mBXOR_ASSIGN); - } - case 222: break; - case 132: - { return( kCHAR ); - } - case 223: break; - case 91: - { yybegin(WAIT_FOR_REGEX); - return(mOPTIONAL_DOT); - } - case 224: break; - case 24: - { yybegin(WAIT_FOR_REGEX); - return(mLT); - } - case 225: break; - case 148: - { return( kIMPORT ); - } - case 226: break; - case 159: - { return( kEXTENDS ); - } - case 227: break; - case 2: - { yybegin(NLS_AFTER_NLS); - afterComment = WAIT_FOR_REGEX; - return !braceCount.isEmpty() && - mLPAREN == braceCount.peek() ? WHITE_SPACE : mNLS; - } - case 228: break; - case 60: - { return mDOLLAR_SLASH_REGEX_CONTENT; - } - case 229: break; - case 109: - // lookahead expression with fixed lookahead length - yypushback(1); - { return mDOLLAR_SLASH_REGEX_CONTENT; - } - case 230: break; - case 63: - { yypushback(1); - yybegin(afterComment); - } - case 231: break; - case 157: - { return( kFINALLY ); - } - case 232: break; - case 82: - { yybegin(WAIT_FOR_REGEX); - return(mPLUS_ASSIGN); - } - case 233: break; - case 136: - { return( kVOID ); - } - case 234: break; - case 150: - { return( kPUBLIC ); - } - case 235: break; - case 128: - { return( kELSE ); - } - case 236: break; - case 12: - { return mSTRING_LITERAL; - } - case 237: break; - case 6: - { yybegin(WAIT_FOR_REGEX); - return(mLNOT); - } - case 238: break; - case 10: - { yybegin(WAIT_FOR_REGEX); - return(mMINUS); - } - case 239: break; - case 64: - { yypushback(1); - yybegin(WAIT_FOR_REGEX); - } - case 240: break; - case 59: - { blockStack.push(mDOLLAR); - braceCount.push(mLCURLY); - yybegin(NLS_AFTER_LBRACE); - return mLCURLY; - } - case 241: break; - case 30: - { yybegin(WAIT_FOR_REGEX); - return(mBAND); - } - case 242: break; - case 170: - { return( kIMPLEMENTS ); - } - case 243: break; - case 5: - { yybegin(WAIT_FOR_REGEX); - return(mSTAR); - } - case 244: break; - case 11: - { yybegin(WAIT_FOR_REGEX); - return(mDOT); - } - case 245: break; - case 8: - { return mNUM_INT; - } - case 246: break; - case 167: - { return( kINTERFACE ); - } - case 247: break; - case 81: - { yybegin(WAIT_FOR_REGEX); - return(mINC); - } - case 248: break; - case 161: - { return( kPACKAGE ); - } - case 249: break; - case 146: - { return( kTHROW ); - } - case 250: break; - case 92: - { yybegin(WAIT_FOR_REGEX); - return(mELVIS); - } - case 251: break; - case 79: - { return( kIN ); - } - case 252: break; - case 84: - { yybegin(WAIT_FOR_REGEX); - return(mMINUS_ASSIGN); - } - case 253: break; - case 66: - { return mSL_COMMENT; - } - case 254: break; - case 37: - { yybegin(IN_TRIPLE_DOT); - return mIDENT; - } - case 255: break; - case 20: - { yybegin(WAIT_FOR_REGEX); - braceCount.push(mLPAREN); - return(mLBRACK); - } - case 256: break; - case 130: - { return( kBYTE ); - } - case 257: break; - case 137: - { yybegin(WAIT_FOR_REGEX); - return(mBSR_ASSIGN); - } - case 258: break; - case 52: - { yybegin(IN_REGEX_DOT); - return mIDENT; - } - case 259: break; - case 44: - { yybegin(IN_TRIPLE_GSTRING_DOLLAR); - return mDOLLAR; - } - case 260: break; - case 49: - { yypushback(1); - if (blockStack.isEmpty()){ - yybegin(YYINITIAL); - } else { - yybegin(IN_INNER_BLOCK); - } - } - case 261: break; - case 172: - { return( kSYNCHRONIZED ); - } - case 262: break; - case 117: - { yybegin(WAIT_FOR_REGEX); - return(mTRIPLE_DOT); - } - case 263: break; - case 85: - { yybegin(WAIT_FOR_REGEX); - return(mCLOSABLE_BLOCK_OP); - } - case 264: break; + case 214: break; case 87: { yybegin(WAIT_FOR_REGEX); return(mMEMBER_POINTER); } - case 265: break; - case 120: - { return( kTRY ); - } - case 266: break; - case 21: + case 215: break; + case 19: { if (!braceCount.isEmpty() && mLPAREN == braceCount.peek()) { braceCount.pop(); } - return(mRBRACK); + return(mRPAREN); } - case 267: break; + case 216: break; + case 64: + { yypushback(1); + yybegin(WAIT_FOR_REGEX); + } + case 217: break; + case 114: + { return( kFOR ); + } + case 218: break; + case 132: + { return( kCHAR ); + } + case 219: break; + case 148: + { return( kIMPORT ); + } + case 220: break; + case 91: + { yybegin(WAIT_FOR_REGEX); + return(mOPTIONAL_DOT); + } + case 221: break; + case 101: + { yybegin(WAIT_FOR_REGEX); + return(mBAND_ASSIGN); + } + case 222: break; case 48: { if (!blockStack.isEmpty()) { IElementType br = blockStack.pop(); @@ -2280,21 +2038,117 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes, TokenType { } return mRCURLY; } - case 268: break; - case 131: - { return( kCASE ); + case 223: break; + case 159: + { return( kEXTENDS ); } - case 269: break; - case 77: - { return mNUM_DOUBLE; + case 224: break; + case 9: + { yybegin(WAIT_FOR_REGEX); + return(mPLUS); } - case 270: break; - case 158: - { return( kDEFAULT ); + case 225: break; + case 108: + { if (!gStringStack.isEmpty()) { + gStringStack.pop(); + } + if (blockStack.isEmpty()){ + yybegin(YYINITIAL); + } else { + yybegin(IN_INNER_BLOCK); + } + return mDOLLAR_SLASH_REGEX_END; } - case 271: break; - case 126: - { if (!gStringStack.isEmpty()){ + case 226: break; + case 94: + { yybegin(WAIT_FOR_REGEX); + return(mREGEX_FIND); + } + case 227: break; + case 26: + { yybegin(WAIT_FOR_REGEX); + return(mBNOT); + } + case 228: break; + case 60: + { return mDOLLAR_SLASH_REGEX_CONTENT; + } + case 229: break; + case 109: + // lookahead expression with fixed lookahead length + yypushback(1); + { return mDOLLAR_SLASH_REGEX_CONTENT; + } + case 230: break; + case 99: + { yybegin(WAIT_FOR_REGEX); + return(mBOR_ASSIGN); + } + case 231: break; + case 157: + { return( kFINALLY ); + } + case 232: break; + case 100: + { yybegin(WAIT_FOR_REGEX); + return(mLOR); + } + case 233: break; + case 71: + { yybegin(WAIT_FOR_REGEX); + return(mSTAR_ASSIGN); + } + case 234: break; + case 136: + { return( kVOID ); + } + case 235: break; + case 150: + { return( kPUBLIC ); + } + case 236: break; + case 128: + { return( kELSE ); + } + case 237: break; + case 38: + { blockStack.push(mLBRACK); + braceCount.push(mLCURLY); + yybegin(NLS_AFTER_LBRACE); + return mLCURLY; + } + case 238: break; + case 12: + { return mSTRING_LITERAL; + } + case 239: break; + case 88: + { if (zzStartRead == 0 || + zzBuffer.subSequence(0, zzStartRead).toString().trim().length() == 0) { + yypushback(2); + yybegin(WAIT_FOR_REGEX); + } else { + yypushback(1); + return(mDOLLAR); + } + } + case 240: break; + case 84: + { yybegin(WAIT_FOR_REGEX); + return(mMINUS_ASSIGN); + } + case 241: break; + case 85: + { yybegin(WAIT_FOR_REGEX); + return(mCLOSABLE_BLOCK_OP); + } + case 242: break; + case 170: + { return( kIMPLEMENTS ); + } + case 243: break; + case 42: + { if (!gStringStack.isEmpty()) { gStringStack.pop(); } if (blockStack.isEmpty()){ @@ -2304,306 +2158,451 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes, TokenType { } return mGSTRING_END; } - case 272: break; - case 169: - { return( kTRANSIENT ); + case 244: break; + case 97: + { yybegin(WAIT_FOR_REGEX); + return(mMOD_ASSIGN); } - case 273: break; - case 111: - { return GROOVY_DOC_COMMENT; - } - case 274: break; + case 245: break; case 16: { yybegin(WAIT_FOR_REGEX); return(mQUESTION); } + case 246: break; + case 8: + { return mNUM_INT; + } + case 247: break; + case 167: + { return( kINTERFACE ); + } + case 248: break; + case 31: + { yybegin(WAIT_FOR_REGEX); + return(mSEMI); + } + case 249: break; + case 161: + { return( kPACKAGE ); + } + case 250: break; + case 146: + { return( kTHROW ); + } + case 251: break; + case 17: + { yybegin(WAIT_FOR_REGEX); + return(mASSIGN); + } + case 252: break; + case 79: + { return( kIN ); + } + case 253: break; + case 66: + { return mSL_COMMENT; + } + case 254: break; + case 13: + { yybegin(IN_SINGLE_GSTRING); + gStringStack.push(mLPAREN); + return mGSTRING_BEGIN; + } + case 255: break; + case 130: + { return( kBYTE ); + } + case 256: break; + case 102: + { yybegin(WAIT_FOR_REGEX); + return(mLAND); + } + case 257: break; + case 33: + { yypushback(1); + yybegin(IN_SINGLE_GSTRING); + } + case 258: break; + case 28: + { yybegin(WAIT_FOR_REGEX); + return(mBXOR); + } + case 259: break; + case 57: + { yypushback(1); + yybegin(IN_REGEX); + } + case 260: break; + case 63: + { yypushback(1); + yybegin(afterComment); + } + case 261: break; + case 172: + { return( kSYNCHRONIZED ); + } + case 262: break; + case 124: + { yybegin(WAIT_FOR_REGEX); + return(mSL_ASSIGN); + } + case 263: break; + case 56: + { yybegin(IN_REGEX_DOLLAR); + return mDOLLAR; + } + case 264: break; + case 36: + { yypushback(1); + yybegin(IN_TRIPLE_GSTRING); + } + case 265: break; + case 120: + { return( kTRY ); + } + case 266: break; + case 10: + { yybegin(WAIT_FOR_REGEX); + return(mMINUS); + } + case 267: break; + case 11: + { yybegin(WAIT_FOR_REGEX); + return(mDOT); + } + case 268: break; + case 131: + { return( kCASE ); + } + case 269: break; + case 103: + // lookahead expression with fixed base length + zzMarkedPos = zzStartRead + 1; + { yybegin(IN_SINGLE_IDENT); + return mDOT; + } + case 270: break; + case 77: + { return mNUM_DOUBLE; + } + case 271: break; + case 158: + { return( kDEFAULT ); + } + case 272: break; + case 122: + { yybegin(WAIT_FOR_REGEX); + return(mREGEX_MATCH); + } + case 273: break; + case 50: + { afterComment = YYINITIAL; + return(WHITE_SPACE); + } + case 274: break; + case 169: + { return( kTRANSIENT ); + } case 275: break; + case 81: + { yybegin(WAIT_FOR_REGEX); + return(mINC); + } + case 276: break; + case 111: + { return GROOVY_DOC_COMMENT; + } + case 277: break; + case 2: + { yybegin(NLS_AFTER_NLS); + afterComment = WAIT_FOR_REGEX; + return !braceCount.isEmpty() && + mLPAREN == braceCount.peek() ? WHITE_SPACE : mNLS; + } + case 278: break; + case 59: + { blockStack.push(mDOLLAR); + braceCount.push(mLCURLY); + yybegin(NLS_AFTER_LBRACE); + return mLCURLY; + } + case 279: break; case 153: { return( kSWITCH ); } - case 276: break; + case 280: break; + case 15: + { while (!braceCount.isEmpty() && mLCURLY != braceCount.peek()) { + braceCount.pop(); + } + if (!braceCount.isEmpty() && mLCURLY == braceCount.peek()) { + braceCount.pop(); + } + return mRCURLY; + } + case 281: break; + case 4: + { if (zzStartRead == 0 || + zzBuffer.subSequence(0, zzStartRead).toString().trim().length() == 0) { + yypushback(1); + yybegin(WAIT_FOR_REGEX); + } else { + return(mDIV); + } + } + case 282: break; + case 89: + { return mGSTRING_LITERAL; + } + case 283: break; + case 20: + { yybegin(WAIT_FOR_REGEX); + braceCount.push(mLPAREN); + return(mLBRACK); + } + case 284: break; + case 45: + { yypushback(1); + yybegin(IN_TRIPLE_IDENT); + } + case 285: break; + case 138: + { return( kFLOAT ); + } + case 286: break; + case 137: + { yybegin(WAIT_FOR_REGEX); + return(mBSR_ASSIGN); + } + case 287: break; + case 78: + { return( kIF ); + } + case 288: break; + case 92: + { yybegin(WAIT_FOR_REGEX); + return(mELVIS); + } + case 289: break; + case 139: + { return( kFINAL ); + } + case 290: break; + case 34: + { yybegin(IN_SINGLE_DOT); + return mIDENT; + } + case 291: break; + case 96: + { yybegin(WAIT_FOR_REGEX); + return(mGE); + } + case 292: break; + case 154: + { return( kTHROWS ); + } + case 293: break; case 110: // lookahead expression with fixed base length zzMarkedPos = zzStartRead + 1; { yybegin(IN_DOLLAR_SLASH_REGEX_IDENT); return mDOT; } - case 277: break; - case 89: - { return mGSTRING_LITERAL; - } - case 278: break; - case 124: - { yybegin(WAIT_FOR_REGEX); - return(mSL_ASSIGN); - } - case 279: break; - case 138: - { return( kFLOAT ); - } - case 280: break; - case 105: - { yybegin(IN_DOLLAR_SLASH_REGEX); - gStringStack.push(mDOLLAR); - return mDOLLAR_SLASH_REGEX_BEGIN; - } - case 281: break; - case 45: - { yypushback(1); - yybegin(IN_TRIPLE_IDENT); - } - case 282: break; - case 34: - { yybegin(IN_SINGLE_DOT); - return mIDENT; - } - case 283: break; - case 123: - { yybegin(WAIT_FOR_REGEX); - return(mCOMPARE_TO); - } - case 284: break; - case 78: - { return( kIF ); - } - case 285: break; - case 139: - { return( kFINAL ); - } - case 286: break; - case 101: - { yybegin(WAIT_FOR_REGEX); - return(mBAND_ASSIGN); - } - case 287: break; - case 154: - { return( kTHROWS ); - } - case 288: break; + case 294: break; case 75: { return mNUM_FLOAT; } - case 289: break; - case 38: - { blockStack.push(mLBRACK); - braceCount.push(mLCURLY); - yybegin(NLS_AFTER_LBRACE); - return mLCURLY; + case 295: break; + case 117: + { yybegin(WAIT_FOR_REGEX); + return(mTRIPLE_DOT); } - case 290: break; - case 47: - { blockStack.push(mLCURLY); - braceCount.push(mLCURLY); - yybegin(NLS_AFTER_LBRACE); - return(mLCURLY); - } - case 291: break; + case 296: break; case 115: { return( kINT ); } - case 292: break; + case 297: break; case 165: { return( kSTRICTFP ); } - case 293: break; - case 9: - { yybegin(WAIT_FOR_REGEX); - return(mPLUS); + case 298: break; + case 65: + { yypushback(1); + yybegin(NLS_AFTER_COMMENT); } - case 294: break; + case 299: break; case 163: { return( kABSTRACT ); } - case 295: break; + case 300: break; case 140: { return( kFALSE ); } - case 296: break; - case 41: - { yybegin(IN_SINGLE_GSTRING_DOLLAR); - return mDOLLAR; - } - case 297: break; - case 26: - { yybegin(WAIT_FOR_REGEX); - return(mBNOT); - } - case 298: break; - case 13: - { yybegin(IN_SINGLE_GSTRING); - gStringStack.push(mLPAREN); - return mGSTRING_BEGIN; - } - case 299: break; + case 301: break; case 90: { return( kAS ); } - case 300: break; - case 71: - { yybegin(WAIT_FOR_REGEX); - return(mSTAR_ASSIGN); - } - case 301: break; - case 164: - { return( kCONTINUE ); - } case 302: break; - case 40: - { clearStacks(); - yybegin(NLS_AFTER_NLS); - afterComment = YYINITIAL; + case 46: + { yybegin(NLS_AFTER_NLS); + afterComment = IN_TRIPLE_IDENT; return mNLS; } case 303: break; - case 127: - { return( kLONG ); - } - case 304: break; - case 76: - { return mNUM_LONG; - } - case 305: break; - case 141: - { return( kBREAK ); - } - case 306: break; - case 160: - { return( kBOOLEAN ); - } - case 307: break; - case 151: - { return( kASSERT ); - } - case 308: break; - case 96: - { yybegin(WAIT_FOR_REGEX); - return(mGE); - } - case 309: break; - case 23: - { yybegin(WAIT_FOR_REGEX); - return(mCOMMA); - } - case 310: break; - case 93: - { yybegin(WAIT_FOR_REGEX); - return(mEQUAL); - } - case 311: break; - case 3: - { return WHITE_SPACE; - } - case 312: break; - case 134: - { return( kTHIS ); - } - case 313: break; - case 162: - { return( kPRIVATE ); - } - case 314: break; - case 18: - { yybegin(WAIT_FOR_REGEX); - braceCount.push(mLPAREN); - return(mLPAREN); - } - case 315: break; - case 104: - // lookahead expression with fixed base length - zzMarkedPos = zzStartRead + 1; - { yybegin(IN_TRIPLE_NLS); - return mDOT; - } - case 316: break; - case 51: - { yybegin(IN_REGEX); - gStringStack.push(mDIV); - return mREGEX_BEGIN; - } - case 317: break; - case 145: - { return( kSHORT ); - } - case 318: break; - case 83: - { yybegin(WAIT_FOR_REGEX); - return(mDEC); - } - case 319: break; - case 31: - { yybegin(WAIT_FOR_REGEX); - return(mSEMI); - } - case 320: break; - case 61: - { yybegin(IN_DOLLAR_SLASH_REGEX_DOLLAR); - return mDOLLAR; - } - case 321: break; - case 166: - { return( kVOLATILE ); - } - case 322: break; - case 14: - { yybegin(NLS_AFTER_LBRACE); - braceCount.push(mLCURLY); - return(mLCURLY); - } - case 323: break; - case 32: - { yybegin(WAIT_FOR_REGEX); - return(mAT); - } - case 324: break; - case 74: - { return mNUM_BIG_INT; - } - case 325: break; case 118: { yybegin(WAIT_FOR_REGEX); return(mRANGE_EXCLUSIVE); } - case 326: break; - case 142: - { return( kCLASS ); + case 304: break; + case 164: + { return( kCONTINUE ); } - case 327: break; - case 68: + case 305: break; + case 32: { yybegin(WAIT_FOR_REGEX); - return(mDIV_ASSIGN); + return(mAT); } - case 328: break; + case 306: break; + case 127: + { return( kLONG ); + } + case 307: break; + case 76: + { return mNUM_LONG; + } + case 308: break; + case 141: + { return( kBREAK ); + } + case 309: break; case 95: { yybegin(WAIT_FOR_REGEX); return(mLE); } - case 329: break; - case 155: - { return( kRETURN ); + case 310: break; + case 160: + { return( kBOOLEAN ); } - case 330: break; - case 22: - { yybegin(WAIT_FOR_REGEX); - return(mCOLON); + case 311: break; + case 151: + { return( kASSERT ); } - case 331: break; + case 312: break; case 107: // lookahead expression with fixed base length zzMarkedPos = zzStartRead + 1; { yybegin(IN_REGEX_IDENT); return mDOT; } - case 332: break; - case 56: - { yybegin(IN_REGEX_DOLLAR); + case 313: break; + case 3: + { return WHITE_SPACE; + } + case 314: break; + case 134: + { return( kTHIS ); + } + case 315: break; + case 51: + { yybegin(IN_REGEX); + gStringStack.push(mDIV); + return mREGEX_BEGIN; + } + case 316: break; + case 162: + { return( kPRIVATE ); + } + case 317: break; + case 44: + { yybegin(IN_TRIPLE_GSTRING_DOLLAR); return mDOLLAR; } - case 333: break; - case 19: + case 318: break; + case 145: + { return( kSHORT ); + } + case 319: break; + case 21: { if (!braceCount.isEmpty() && mLPAREN == braceCount.peek()) { braceCount.pop(); } - return(mRPAREN); + return(mRBRACK); + } + case 320: break; + case 14: + { yybegin(NLS_AFTER_LBRACE); + braceCount.push(mLCURLY); + return(mLCURLY); + } + case 321: break; + case 166: + { return( kVOLATILE ); + } + case 322: break; + case 104: + // lookahead expression with fixed base length + zzMarkedPos = zzStartRead + 1; + { yybegin(IN_TRIPLE_NLS); + return mDOT; + } + case 323: break; + case 6: + { yybegin(WAIT_FOR_REGEX); + return(mLNOT); + } + case 324: break; + case 69: + { yybegin(WAIT_FOR_REGEX); + return(mSTAR_STAR); + } + case 325: break; + case 74: + { return mNUM_BIG_INT; + } + case 326: break; + case 55: + { if (!gStringStack.isEmpty()) { + gStringStack.pop(); + } + if (blockStack.isEmpty()){ + yybegin(YYINITIAL); + } else { + yybegin(IN_INNER_BLOCK); + } + return mREGEX_END; + } + case 327: break; + case 142: + { return( kCLASS ); + } + case 328: break; + case 82: + { yybegin(WAIT_FOR_REGEX); + return(mPLUS_ASSIGN); + } + case 329: break; + case 30: + { yybegin(WAIT_FOR_REGEX); + return(mBAND); + } + case 330: break; + case 62: + { yypushback(1); + yybegin(IN_DOLLAR_SLASH_REGEX); + } + case 331: break; + case 123: + { yybegin(WAIT_FOR_REGEX); + return(mCOMPARE_TO); + } + case 332: break; + case 98: + { yybegin(WAIT_FOR_REGEX); + return(mBXOR_ASSIGN); + } + case 333: break; + case 155: + { return( kRETURN ); } case 334: break; case 43: @@ -2634,33 +2633,32 @@ public class _GroovyLexer implements FlexLexer, GroovyTokenTypes, TokenType { { return mGSTRING_CONTENT; } case 336: break; - case 102: + case 112: { yybegin(WAIT_FOR_REGEX); - return(mLAND); + return(mSTAR_STAR_ASSIGN); } case 337: break; - case 29: - { yybegin(WAIT_FOR_REGEX); - return(mBOR); - } - case 338: break; case 116: { return( kDEF ); } + case 338: break; + case 41: + { yybegin(IN_SINGLE_GSTRING_DOLLAR); + return mDOLLAR; + } case 339: break; - case 28: - { yybegin(WAIT_FOR_REGEX); - return(mBXOR); + case 40: + { clearStacks(); + yybegin(NLS_AFTER_NLS); + afterComment = YYINITIAL; + return mNLS; } case 340: break; - case 15: - { while (!braceCount.isEmpty() && mLCURLY != braceCount.peek()) { - braceCount.pop(); - } - if (!braceCount.isEmpty() && mLCURLY == braceCount.peek()) { - braceCount.pop(); - } - return mRCURLY; + case 53: + { blockStack.push(mDIV); + braceCount.push(mLCURLY); + yybegin(NLS_AFTER_LBRACE); + return mLCURLY; } case 341: break; case 147: diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex index 7da98135420a..6979286324ec 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex @@ -22,8 +22,6 @@ import java.util.*; %% -%{@SuppressWarnings({"UnnecessaryFullyQualifiedName", "FieldCanBeLocal", "UnusedDeclaration", "UnusedAssignment", "AccessStaticViaInstance", - "AssignmentToStaticFieldFromInstanceMethod", "MethodMayBeStatic", "CStyleArrayDeclaration", "UnnecessarySemicolon"}) %} %class _GroovyLexer %implements FlexLexer, GroovyTokenTypes, TokenType %unicode diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/statements/expressions/primary/CompoundStringExpression.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/statements/expressions/primary/CompoundStringExpression.java index e9f72ad055b4..00f457cc691e 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/statements/expressions/primary/CompoundStringExpression.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/statements/expressions/primary/CompoundStringExpression.java @@ -143,10 +143,10 @@ public class CompoundStringExpression implements GroovyElementTypes { final PsiBuilder.Marker injection = myBuilder.mark(); ParserUtils.getToken(myBuilder, mDOLLAR); - if (mIDENT.equals(myBuilder.getTokenType())) { + if (myBuilder.getTokenType() == mIDENT || myBuilder.getTokenType() == kTHIS) { PathExpression.parse(myBuilder, myParser); } - else if (mLCURLY.equals(myBuilder.getTokenType())) { + else if (myBuilder.getTokenType() == mLCURLY) { OpenOrClosableBlock.parseClosableBlock(myBuilder, myParser); } else { diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy index e247073209d1..7e9e03c60731 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy @@ -148,6 +148,8 @@ public class ExpressionsParsingTest extends GroovyParsingTestCase { public void testgstring$ugly_lexer() throws Throwable { doTest(); } + public void testgstring$this() {doTest()} + public void testmapLiteral() throws Throwable { doTest(); } public void testnew$arr_decl() throws Throwable { doTest(); } diff --git a/plugins/groovy/testdata/parsing/groovy/expressions/gstring/this.test b/plugins/groovy/testdata/parsing/groovy/expressions/gstring/this.test new file mode 100644 index 000000000000..66e1181d358c --- /dev/null +++ b/plugins/groovy/testdata/parsing/groovy/expressions/gstring/this.test @@ -0,0 +1,19 @@ +print "abc $this.prop test" +----- +Groovy script + Call expression + Reference expression + PsiElement(identifier)('print') + PsiWhiteSpace(' ') + Command arguments + Compound Gstring + PsiElement(Gstring begin)('"') + GrStringContentImpl(GString content element) + PsiElement(Gstring content)('abc ') + GString injection + PsiElement($)('$') + Reference expression + PsiElement(this)('this') + GrStringContentImpl(GString content element) + PsiElement(Gstring content)('.prop test') + PsiElement(Gstring end)('"') \ No newline at end of file