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