introduce multi-token nextTokenIs()

This commit is contained in:
Gregory.Shrago
2013-11-24 20:23:58 +04:00
parent 79ef033279
commit 85253bd2a2
@@ -173,6 +173,33 @@ public class GeneratedParserUtilBase {
return builder_.getTokenType() == token;
}
public static boolean nextTokenIsFast(PsiBuilder builder_, IElementType... tokens) {
IElementType tokenType = builder_.getTokenType();
for (IElementType token : tokens) {
if (token == tokenType) return true;
}
return false;
}
public static boolean nextTokenIs(PsiBuilder builder_, String frameName, IElementType... tokens) {
ErrorState state = ErrorState.get(builder_);
if (state.completionState != null) return true;
boolean track = !state.suppressErrors && state.predicateCount < 2 && state.predicateSign;
if (!track) return nextTokenIsFast(builder_, tokens);
boolean useFrameName = StringUtil.isNotEmpty(frameName);
IElementType tokenType = builder_.getTokenType();
if (tokenType == null) return false;
boolean result = false;
for (IElementType token : tokens) {
if (!useFrameName) addVariant(builder_, state, token);
result |= tokenType == token;
}
if (useFrameName) {
addVariantInner(state, builder_.getCurrentOffset(), frameName);
}
return result;
}
public static boolean nextTokenIs(PsiBuilder builder_, IElementType token) {
return nextTokenIsInner(builder_, token, false);
}
@@ -187,6 +214,7 @@ public class GeneratedParserUtilBase {
return token == tokenType;
}
@Deprecated
public static boolean replaceVariants(PsiBuilder builder_, int variantCount, String frameName) {
ErrorState state = ErrorState.get(builder_);
if (!state.suppressErrors && state.predicateCount < 2 && state.predicateSign) {