/* * Parses list of control expression in for condition */ private static void controlExpressionListParse(PsiBuilder builder, GroovyParser parser) { if (!StrictContextExpression.parse(builder, parser)) return; while (mCOMMA.equals(builder.getTokenType())) { if (ParserUtils.lookAhead(builder, mCOMMA, mNLS, mRPAREN) || ParserUtils.lookAhead(builder, mCOMMA, mRPAREN)) { ParserUtils.getToken(builder, mCOMMA); builder.error(GroovyBundle.message("expression.expected")); } else { ParserUtils.getToken(builder, mCOMMA); } ParserUtils.getToken(builder, mNLS); if (!StrictContextExpression.parse(builder, parser)) { ParserUtils.getToken(builder, mNLS); if (!mRPAREN.equals(builder.getTokenType()) && !mSEMI.equals(builder.getTokenType())) { builder.error(GroovyBundle.message("expression.expected")); } if (!mRPAREN.equals(builder.getTokenType()) && !mSEMI.equals(builder.getTokenType()) && !mCOMMA.equals(builder.getTokenType()) && !mNLS.equals(builder.getTokenType())) { builder.advanceLexer(); } } } }
private static boolean tradForClauseParse(PsiBuilder builder, GroovyParser parser) { PsiBuilder.Marker marker = builder.mark(); if (ParserUtils.getToken(builder, mSEMI) || (Declaration.parse(builder, false, parser) && ParserUtils.getToken(builder, mSEMI))) { StrictContextExpression.parse(builder, parser); ParserUtils.getToken(builder, mSEMI, GroovyBundle.message("semi.expected")); ParserUtils.getToken(builder, mNLS); if (!mRPAREN.equals(builder.getTokenType())) { controlExpressionListParse(builder, parser); } } else { marker.rollbackTo(); marker = builder.mark(); controlExpressionListParse(builder, parser); ParserUtils.getToken(builder, mSEMI, GroovyBundle.message("semi.expected")); StrictContextExpression.parse(builder, parser); ParserUtils.getToken(builder, mSEMI, GroovyBundle.message("semi.expected")); ParserUtils.getToken(builder, mNLS); if (!mRPAREN.equals(builder.getTokenType())) { controlExpressionListParse(builder, parser); } } marker.done(FOR_TRADITIONAL_CLAUSE); return true; }