public static int current_position_(PsiBuilder builder) { return builder.rawTokenIndex(); }
public String getExpectedText(PsiBuilder builder) { int position = builder.rawTokenIndex(); StringBuilder sb = new StringBuilder(); if (addExpected(sb, position, true)) { sb.append(" expected, "); } return sb.toString(); }
public Frame init(PsiBuilder builder, ErrorState state, int level_, int modifiers_, IElementType elementType_, String name_) { parentFrame = state.currentFrame; elementType = elementType_; offset = builder.getCurrentOffset(); position = builder.rawTokenIndex(); level = level_; modifiers = modifiers_; name = name_; variantCount = state.variants.size(); errorReportedAt = -1; leftMarker = null; return this; }
private static void addVariant(PsiBuilder builder, ErrorState state, Object o) { builder.eof(); // skip whitespaces addVariantInner(state, builder.rawTokenIndex(), o); CompletionState completionState = state.completionState; if (completionState != null && state.predicateSign) { addCompletionVariant(builder, completionState, o); } }
public static void report_error_(PsiBuilder builder, ErrorState state, boolean advance) { Frame frame = state.currentFrame; if (frame == null) { LOG.error("unbalanced enter/exit section call: got null"); return; } int position = builder.rawTokenIndex(); if (frame.errorReportedAt < position && getLastVariantPos(state, position + 1) <= position) { reportError(builder, state, frame, null, true, advance); } }
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 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); IElementType tokenType = builder.getTokenType(); if (isNotEmpty(frameName)) { addVariantInner(state, builder.rawTokenIndex(), frameName); } else { for (IElementType token : tokens) { addVariant(builder, state, token); } } if (tokenType == null) return false; for (IElementType token : tokens) { if (tokenType == token) return true; } return false; }
boolean pinned, @Nullable Parser eatMore) { int initialPos = builder.rawTokenIndex(); boolean willFail = !result && !pinned; replace_variants_with_name_(state, frame, builder, result, pinned); while ((eatMoreFlag || parenCount > 0) && builder.rawTokenIndex() < lastErrorPos) { IElementType tokenType = builder.getTokenType(); if (state.braces != null) { else if (tokenType == state.braces[0].getRightBraceType()) parenCount --; if (!(builder.rawTokenIndex() < lastErrorPos)) break; builder.advanceLexer(); eatMoreFlag = eatMore.parse(builder, frame.level + 1); parseAsTree(state, builder, frame.level + 1, DUMMY_BLOCK, true, TOKEN_ADVANCER, eatMore); else if (eatMoreFlagOnce || (!result && frame.position != builder.rawTokenIndex()) || frame.errorReportedAt > initialPos) { errorReported = reportError(builder, state, frame, null, true, false);
frame.errorReportedAt = builder.rawTokenIndex(); return true;
last.getStartIndex() == frame.position && state.typeExtends(last.getTokenType(), elementType) && wasAutoSkipped(builder, builder.rawTokenIndex() - last.getEndIndex())) { elementType = last.getTokenType(); ((PsiBuilder.Marker)last).drop();
public static int current_position_(PsiBuilder builder) { return builder.rawTokenIndex(); }
public static void report_error_(PsiBuilder builder, ErrorState state, boolean advance) { Frame frame = state.currentFrame; if (frame == null) { LOG.error("unbalanced enter/exit section call: got null"); return; } int position = builder.rawTokenIndex(); if (frame.errorReportedAt < position && frame.lastVariantAt > -1 && frame.lastVariantAt <= position) { reportError(builder, state, frame, false, true, advance); } }
public Frame init(PsiBuilder builder, ErrorState state, int level_, int modifiers_, IElementType elementType_, String name_) { parentFrame = state.currentFrame; elementType = elementType_; offset = builder.getCurrentOffset(); position = builder.rawTokenIndex(); level = level_; modifiers = modifiers_; name = name_; variantCount = state.variants.size(); errorReportedAt = -1; lastVariantAt = -1; leftMarker = null; return this; }
private static void addVariant(PsiBuilder builder, ErrorState state, Object o) { builder.eof(); // skip whitespaces addVariantInner(state, state.currentFrame, builder.rawTokenIndex(), o); CompletionState completionState = state.completionState; if (completionState != null && state.predicateSign) { addCompletionVariant(builder, completionState, o); } }
private static void replace_variants_with_name_(ErrorState state, Frame frame, PsiBuilder builder, IElementType elementType, boolean result, boolean pinned) { int initialPos = builder.rawTokenIndex(); boolean willFail = !result && !pinned; if (willFail && initialPos == frame.position && frame.lastVariantAt == frame.position && frame.name != null && state.variants.size() >= frame.variantCount + (elementType == null ? 0 : 2)) { state.clearVariants(true, frame.variantCount); addVariantInner(state, frame, initialPos, frame.name); } }
boolean force, boolean advance) { int position = builder.rawTokenIndex(); StringBuilder sb = new StringBuilder(); state.appendExpected(sb, position, true); frame.errorReportedAt = builder.rawTokenIndex(); return true;
public static boolean nextTokenIsSlow(PsiBuilder builder, String frameName, IElementType... tokens) { ErrorState state = ErrorState.get(builder); IElementType tokenType = builder.getTokenType(); if (isNotEmpty(frameName)) { addVariantInner(state, state.currentFrame, builder.rawTokenIndex(), frameName); } else { for (IElementType token : tokens) { addVariant(builder, state, token); } } if (tokenType == null) return false; for (IElementType token : tokens) { if (tokenType == token) return true; } return false; }
private static void reportFrameError(PsiBuilder builder, ErrorState state) { if (state.currentFrame == null || state.suppressErrors) return; Frame frame = state.currentFrame; int pos = builder.rawTokenIndex(); if (frame.errorReportedAt > pos) { // report error for previous unsuccessful frame LighterASTNode marker = builder.getLatestDoneMarker(); int endOffset = marker != null ? ((PsiBuilderImpl.ProductionMarker)marker).getEndIndex() : pos + 1; while (endOffset <= pos && isWhitespaceOrComment(builder, builder.rawLookup(endOffset - pos))) endOffset ++; boolean inner = endOffset == pos; builder.eof(); reportError(builder, state, frame, inner, true, false); } }
boolean pinned, @Nullable Parser eatMore) { int initialPos = builder.rawTokenIndex(); replace_variants_with_name_(state, frame, builder, elementType, result, pinned); int lastErrorPos = frame.lastVariantAt < 0 ? initialPos : frame.lastVariantAt; while ((eatMoreFlag || parenCount > 0) && builder.rawTokenIndex() < lastErrorPos) { IElementType tokenType = builder.getTokenType(); if (state.braces != null) { else if (tokenType == state.braces[0].getRightBraceType()) parenCount --; if (!(builder.rawTokenIndex() < lastErrorPos)) break; state.tokenAdvancer.parse(builder, frame.level + 1); eatMoreFlag = eatMore.parse(builder, frame.level + 1); else if (eatMoreFlagOnce || !result && frame.position != builder.rawTokenIndex() || frame.errorReportedAt > initialPos) { errorReported = reportError(builder, state, frame, false, true, false);
boolean pinned) { if (((frame.modifiers & _AND_) | (frame.modifiers & _NOT_)) != 0) { boolean resetLastPos = !state.suppressErrors && frame.lastVariantAt < 0 && frame.position < builder.rawTokenIndex(); close_marker_impl_(frame, marker, null, false); state.predicateCount--; if ((frame.modifiers & _NOT_) != 0) state.predicateSign = !state.predicateSign; marker = elementType != null && marker != null && (result || pinned) ? builder.mark() : null; if (resetLastPos) frame.lastVariantAt = builder.rawTokenIndex(); last.getStartIndex() == frame.position && state.typeExtends(last.getTokenType(), elementType) && wasAutoSkipped(builder, builder.rawTokenIndex() - last.getEndIndex())) { elementType = last.getTokenType(); ((PsiBuilder.Marker)last).drop();