From a0bd5aa11a6d4bdae315c3533deef9577c08c351 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Wed, 4 May 2016 21:16:49 +0300 Subject: [PATCH] GPUB: replace variants with name for predicates --- .../lang/parser/GeneratedParserUtilBase.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) 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 001b9414c2f5..705c80888091 100644 --- a/platform/lang-impl/src/com/intellij/lang/parser/GeneratedParserUtilBase.java +++ b/platform/lang-impl/src/com/intellij/lang/parser/GeneratedParserUtilBase.java @@ -473,6 +473,7 @@ public class GeneratedParserUtilBase { if (((frame.modifiers & _AND_) | (frame.modifiers & _NOT_)) != 0) { close_marker_impl_(frame, marker, null, false); + replace_variants_with_name_(state, frame, builder, result, pinned); state.predicateCount--; if ((frame.modifiers & _NOT_) != 0) state.predicateSign = !state.predicateSign; } @@ -492,11 +493,7 @@ public class GeneratedParserUtilBase { @Nullable Parser eatMore) { int initialPos = builder.rawTokenIndex(); boolean willFail = !result && !pinned; - if (willFail && initialPos == frame.position && state.lastExpectedVariantPos == frame.position && - frame.name != null && state.variants.size() - frame.variantCount > 1) { - state.clearVariants(true, frame.variantCount); - addVariantInner(state, initialPos, frame.name); - } + replace_variants_with_name_(state, frame, builder, result, pinned); int lastErrorPos = getLastVariantPos(state, initialPos); if (!state.suppressErrors && eatMore != null) { state.suppressErrors = true; @@ -652,6 +649,20 @@ public class GeneratedParserUtilBase { } } + private static void replace_variants_with_name_(ErrorState state, + Frame frame, + PsiBuilder builder, + boolean result, + boolean pinned) { + int initialPos = builder.rawTokenIndex(); + boolean willFail = !result && !pinned; + if (willFail && initialPos == frame.position && state.lastExpectedVariantPos == frame.position && + frame.name != null && state.variants.size() - frame.variantCount > 1) { + state.clearVariants(true, frame.variantCount); + addVariantInner(state, initialPos, frame.name); + } + } + public static boolean report_error_(PsiBuilder builder, boolean result) { if (!result) report_error_(builder, ErrorState.get(builder), false); return result;