@Override public void run() { main: while (!siblingList.isEmpty()) { final Pair<PsiBuilder.Marker, PsiBuilder.Marker> parenPair = parenList.peek(); final int rating = siblingList.getFirst().second; int count = 0; for (Pair<PsiBuilder.Marker, Integer> pair : siblingList) { if (pair.second != rating || parenPair != null && pair.first == parenPair.second) break main; if (++count >= MAX_CHILDREN_IN_TREE) { PsiBuilder.Marker parentMarker = pair.first.precede(); parentMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, null); while (count-- > 0) { siblingList.removeFirst(); } parentMarker.done(chunkType); siblingList.addFirst(Pair.create(parentMarker, rating + 1)); continue main; } } break; } } };
if (checkParens && (tokenType == state.braces[0].getLeftBraceType() || tokenType == state.braces[0].getRightBraceType() && !parenList.isEmpty())) { if (marker != null) { marker.done(chunkType); siblingList.addFirst(Pair.create(marker, 1)); marker = null; if (tokenType == state.braces[0].getRightBraceType()) { final Pair<PsiBuilder.Marker, PsiBuilder.Marker> pair = parenList.removeFirst(); pair.first.done(chunkType); marker.done(chunkType); siblingList.addFirst(Pair.create(marker, 1)); checkSiblingsRunnable.run();
extensionMarker.done(extensionTokenType);
protected static boolean wrapExpression(@NotNull IElementType elementType, @NotNull PerlBuilder b, int l) { PerlParserUtil.passPackageAndVersion(b, l); PsiBuilder.Marker m = b.mark(); if (PerlParserImpl.expr(b, l, -1)) { m.done(elementType); return true; } m.rollbackTo(); return false; } }
public static boolean parseSetElement(PsiBuilder b, int l) { PsiBuilder.Marker m = b.mark(); if (TemplateToolkitParser.parse_set_element(b, l)) { m.done(ASSIGN_EXPR); return true; } m.drop(); return false; }
public static boolean parseHashKey(PsiBuilder b, int l) { PsiBuilder.Marker m = b.mark(); if (TemplateToolkitParser.keyword_or_identifier_term(b, l)) { m.collapse(TT2_STRING_CONTENT); m.precede().done(SQ_STRING_EXPR); return true; } return false; }
public static boolean parsePerlBlock(PsiBuilder b, int l, IElementType closeToken, IElementType blockToken) { PsiBuilder.Marker abstractBlockMarker = b.mark(); b.advanceLexer(); while (!b.eof() && b.getTokenType() != closeToken) { if (!PerlParserProxy.file_item(b, l)) { break; } } boolean r = endOrRecover(b, closeToken); abstractBlockMarker.done(blockToken); return r; }
private static boolean parseAnnotatedSimpleStatement(PerlBuilder b, int l, IElementType keywordToken, IElementType statementToken) { PerlBuilder.Marker m = b.mark(); if (PerlParserUtil.consumeToken(b, keywordToken)) { if (PerlParserImpl.expr(b, l, -1)) { PerlParserUtil.parseStatementModifier(b, l); m.done(statementToken); return true; } } m.rollbackTo(); return false; }
/** * Parses the next tokens as a conditional command. * * @param builder Provides the tokens. * @return Success or failure of the parsing. */ public boolean parse(final BashPsiBuilder builder) { final PsiBuilder.Marker command = builder.mark(); boolean result = parseConditionalExpression(builder); command.done(CONDITIONAL_COMMAND); return result; }
public boolean parse(BashPsiBuilder builder) { PsiBuilder.Marker marker = builder.mark(); boolean ok = next.parse(builder); if (ok && ParserUtil.conditionalRead(builder, arithmeticPostOps)) { marker.done(ARITH_POST_INCR_ELEMENT); } else { marker.drop(); } return ok; } }
public boolean parse(BashPsiBuilder builder) { PsiBuilder.Marker marker = builder.mark(); boolean ok = ParserUtil.conditionalRead(builder, acceptedWords); if (ok && acceptedEqualTokens.contains(builder.getTokenType())) { marker.done(VAR_DEF_ELEMENT); builder.advanceLexer(); } else { marker.rollbackTo(); } return next.parse(builder); } }
private boolean parseSimpleWord(BashPsiBuilder builder) { PsiBuilder.Marker marker = builder.mark(); if (Parsing.word.parseWord(builder)) { marker.done(VAR_DEF_ELEMENT); return true; } marker.drop(); return false; } }
public static boolean parseArgsBlock(PsiBuilder b, int l) { boolean r; PsiBuilder.Marker innerMarker = b.mark(); if (PerlParserUtil.consumeToken(b, HTML_MASON_ARGS_OPENER)) { while (parseArgument(b, l) || parseHardNewline(b)) { ; } } r = MasonParserUtil.endOrRecover(b, HTML_MASON_ARGS_CLOSER); innerMarker.done(HTML_MASON_ARGS_BLOCK); return r; }
@Override public void done(@NotNull IElementType type) { original.done(type); psiBuilder.recycle(this); }
/** * Encloses the current token in a marker (the marker token is the 2nd parameter). * * @param builder Provides the tokens. * @param markAs The type for the marker */ public static void markTokenAndAdvance(PsiBuilder builder, IElementType markAs) { final PsiBuilder.Marker marker = builder.mark(); builder.advanceLexer(); marker.done(markAs); }
public boolean parse(BashPsiBuilder builder) { PsiBuilder.Marker marker = builder.mark(); boolean mark = ParserUtil.conditionalRead(builder, arithmeticPreOps); boolean ok = next.parse(builder); if (mark) { marker.done(ARITH_PRE_INC_ELEMENT); } else { marker.drop(); } return ok; } }
private static void extend_marker_impl(PsiBuilder.Marker marker) { PsiBuilder.Marker precede = marker.precede(); IElementType elementType = ((LighterASTNode)marker).getTokenType(); if (elementType == TokenType.ERROR_ELEMENT) { precede.error(notNullize(PsiBuilderImpl.getErrorMessage((LighterASTNode)marker))); } else { precede.done(elementType); } marker.drop(); }
marker.done(elementType); frame.leftMarker.precede().done(((LighterASTNode)frame.leftMarker).getTokenType()); frame.leftMarker.drop(); frame.leftMarker.precede().done(elementType); marker.done(elementType); if (marker != null) marker.drop(); if ((frame.modifiers & _LEFT_INNER_) != 0 && frame.leftMarker != null) { frame.leftMarker.precede().done(((LighterASTNode)frame.leftMarker).getTokenType()); frame.leftMarker.drop();
if (extensionMarker != null) extensionMarker.done(extensionTokenType);
private static void close_marker_impl_(Frame frame, PsiBuilder.Marker marker, IElementType elementType, boolean result) { if (marker == null) return; if (result) { if (elementType != null) { marker.done(elementType); } else { marker.drop(); } } else { if (frame != null) { int position = ((PsiBuilderImpl.ProductionMarker)marker).getStartIndex(); if (frame.errorReportedAt > position && frame.parentFrame != null) { frame.errorReportedAt = frame.parentFrame.errorReportedAt; } } marker.rollbackTo(); } }