count braces while waiting for }

This commit is contained in:
peter
2011-03-21 15:49:20 +01:00
parent c39552a5b3
commit 4e3a57bbae
2 changed files with 3 additions and 35 deletions
@@ -48,11 +48,11 @@ public class OpenOrClosableBlock implements GroovyElementTypes {
builder.advanceLexer();
ParserUtils.getToken(builder, mNLS);
parser.parseBlockBody(builder);
while (!builder.eof() &&
!mRCURLY.equals(builder.getTokenType())) {
if (!builder.eof() && builder.getTokenType() != mRCURLY) {
builder.error(GroovyBundle.message("expression.expected"));
builder.advanceLexer();
ParserUtils.skipCountingBraces(builder, GroovyParser.RCURLY_ONLY);
}
ParserUtils.getToken(builder, mRCURLY, GroovyBundle.message("rcurly.expected"));
marker.done(OPEN_BLOCK);
}
@@ -119,38 +119,6 @@ public abstract class ParserUtils {
return i == elems.length;
}
/**
* Checks, that following element sequence is like given
*
* @param builder Given PsiBuilder
* @param dropMarker to drop marker after successful checking or rollback it?
* @param elems Array of need elements in order
* @return true if following sequence is like a given
*/
public static boolean lookAhead(PsiBuilder builder, boolean dropMarker, IElementType... elems) {
if (elems.length == 0) {
return false;
}
if (elems.length == 1) {
return elems[0].equals(builder.getTokenType());
}
PsiBuilder.Marker rb = builder.mark();
int i = 0;
while (!builder.eof() && i < elems.length && elems[i].equals(builder.getTokenType())) {
builder.advanceLexer();
i++;
}
if (dropMarker && i == elems.length) {
rb.drop();
} else {
rb.rollbackTo();
}
return i == elems.length;
}
/**
* Wraps current token to node with specified element type
*