From 85253bd2a281b708e5d74a81d360780b96aa51bc Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Sun, 24 Nov 2013 20:23:30 +0400 Subject: [PATCH] introduce multi-token nextTokenIs() --- .../lang/parser/GeneratedParserUtilBase.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/platform/lang-impl/src/com/intellij/lang/parser/GeneratedParserUtilBase.java b/platform/lang-impl/src/com/intellij/lang/parser/GeneratedParserUtilBase.java index c9b9ae264a7e..d18bf4c5dff7 100644 --- a/platform/lang-impl/src/com/intellij/lang/parser/GeneratedParserUtilBase.java +++ b/platform/lang-impl/src/com/intellij/lang/parser/GeneratedParserUtilBase.java @@ -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) {