@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 (marker == null) { marker = builder.mark(); marker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, null);
public void setCustomEdgeTokenBinders(@Nullable WhitespacesAndCommentsBinder whitespacesAndCommentsBinder, @Nullable WhitespacesAndCommentsBinder whitespacesAndCommentsBinder1) { original.setCustomEdgeTokenBinders(whitespacesAndCommentsBinder, whitespacesAndCommentsBinder1); } }
if (marker == null) { marker = builder.mark(); marker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, null);
if (latestDoneMarker.getTokenType() == END_DIRECTIVE) { branchMarker.doneBefore(branchTokenType, currentMarker); branchMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); currentMarker.drop(); branchMarker = null; branchMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); branchMarker = currentMarker.precede(); branchTokenType = CATCH_BRANCH; branchMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); branchMarker = currentMarker.precede(); branchTokenType = FINAL_BRANCH; branchMarker.done(branchTokenType); branchMarker.precede().error(TemplateToolkitBundle.message("ttk2.error.unclosed.block.directive")); branchMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER);
if (latestDoneMarker.getTokenType() == END_DIRECTIVE) { branchMarker.doneBefore(branchTokenType, currentMarker); branchMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); currentMarker.drop(); branchMarker = null; branchMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); branchMarker = currentMarker.precede(); branchTokenType = ELSIF_BRANCH; branchMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); branchMarker = currentMarker.precede(); branchTokenType = ELSE_BRANCH; branchMarker.done(branchTokenType); branchMarker.precede().error(TemplateToolkitBundle.message("ttk2.error.unclosed.block.directive")); branchMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER);
perlMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); outerMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); outerMarker.precede().error(TemplateToolkitBundle.message("ttk2.error.unclosed.perl.block"));
if (branchMarker != null) { branchMarker.doneBefore(CASE_BLOCK, currentMarker); branchMarker.setCustomEdgeTokenBinders(WhitespacesBinders.DEFAULT_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); if (branchMarker != null) { branchMarker.doneBefore(CASE_BLOCK, currentMarker); branchMarker.setCustomEdgeTokenBinders(WhitespacesBinders.DEFAULT_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); branchMarker.setCustomEdgeTokenBinders(WhitespacesBinders.DEFAULT_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER);
public static boolean parseMasonMethod(PsiBuilder b, int l, IElementType closeToken, IElementType statementTokenType) { boolean r = false; PsiBuilder.Marker methodMarker = b.mark(); b.advanceLexer(); PsiBuilder.Marker subMarker = b.mark(); if (PerlParserUtil.consumeToken(b, SUB_NAME)) { subMarker.collapse(SUB_NAME); PerlParserProxy.method_signature(b, l); if (PerlParserUtil.consumeToken(b, MASON_TAG_CLOSER)) { PsiBuilder.Marker blockMarker = b.mark(); PerlParserProxy.block_content(b, l); if (b.getTokenType() == closeToken) { blockMarker.done(BLOCK); blockMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); b.advanceLexer(); methodMarker.done(statementTokenType); r = true; } } } if (!r) { methodMarker.rollbackTo(); } return r || MasonParserUtil.recoverToGreedy(b, closeToken, "Error"); }
/** * Parses block content * * @param b builder * @param l level * @return result of end parsing. */ public static boolean parseBlockContent(PsiBuilder b, int l, PsiBuilder.Marker outerMarker, IElementType blockTokenType) { boolean r = false; while (!b.eof() && TemplateToolkitParser.element(b, l)) { LighterASTNode latestDoneMarker = b.getLatestDoneMarker(); if (latestDoneMarker != null && latestDoneMarker.getTokenType() == END_DIRECTIVE) { r = true; break; } } outerMarker.done(blockTokenType); if (!r) // this can happen on incomplete block, missing end { outerMarker.setCustomEdgeTokenBinders(WhitespacesBinders.DEFAULT_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); outerMarker.precede().error(TemplateToolkitBundle.message("ttk2.error.unclosed.block.directive")); } return r; }
public static boolean parseMasonNamedBlock(PsiBuilder b, int l, IElementType closeToken, IElementType statementTokenType) { boolean r = false; PsiBuilder.Marker methodMarker = b.mark(); b.advanceLexer(); PsiBuilder.Marker subMarker = b.mark(); if (PerlParserUtil.consumeToken(b, IDENTIFIER)) { subMarker.collapse(SUB_NAME); if (PerlParserUtil.consumeToken(b, HTML_MASON_TAG_CLOSER)) { PsiBuilder.Marker blockMarker = b.mark(); PerlParserProxy.block_content(b, l); if (b.getTokenType() == closeToken) { blockMarker.done(HTML_MASON_BLOCK); blockMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); b.advanceLexer(); methodMarker.done(statementTokenType); r = true; } } } if (!r) { methodMarker.rollbackTo(); } return r || MasonParserUtil.recoverToGreedy(b, closeToken, "Error"); } }
private static void checkSiblings(IElementType chunkType, ArrayDeque<Pair<PsiBuilder.Marker, PsiBuilder.Marker>> parens, ArrayDeque<Pair<PsiBuilder.Marker, Integer>> siblings) { main: while (!siblings.isEmpty()) { Pair<PsiBuilder.Marker, PsiBuilder.Marker> parenPair = parens.peek(); int rating = siblings.getFirst().second; int count = 0; for (Pair<PsiBuilder.Marker, Integer> pair : siblings) { 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) { siblings.removeFirst(); } parentMarker.done(chunkType); siblings.addFirst(Pair.create(parentMarker, rating + 1)); continue main; } } break; } }
@Override public boolean parseTerm(PsiBuilder b, int l) { IElementType tokenType = b.getTokenType(); if (tokenType == MOJO_BEGIN) { PsiBuilder.Marker subMarker = b.mark(); b.advanceLexer(); PsiBuilder.Marker blockMarker = b.mark(); PerlParserProxy.block_content(b, l); if (b.getTokenType() == MOJO_END) { blockMarker.done(BLOCK); blockMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); subMarker.done(SUB_EXPR); return true; } else { blockMarker.drop(); subMarker.rollbackTo(); } } return super.parseTerm(b, l); }
@Override public boolean parseFileContents(PsiBuilder b, int l) { PsiBuilder.Marker m = b.mark(); if (super.parseFileContents(b, l)) { m.done(NAMESPACE_CONTENT); m.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); PsiBuilder.Marker definitionMarker = m.precede(); definitionMarker.done(MASON_NAMESPACE_DEFINITION); definitionMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); return true; } m.rollbackTo(); return false; }
public void setCustomEdgeTokenBinders(@Nullable WhitespacesAndCommentsBinder whitespacesAndCommentsBinder, @Nullable WhitespacesAndCommentsBinder whitespacesAndCommentsBinder1) { delegate.setCustomEdgeTokenBinders(whitespacesAndCommentsBinder, whitespacesAndCommentsBinder1); }
public static boolean parseNamespaceContent(PsiBuilder b, int l) { PsiBuilder.Marker m = b.mark(); if (PerlParserGenerated.real_namespace_content(b, l)) { m.done(NAMESPACE_CONTENT); m.setCustomEdgeTokenBinders(GREEDY_LEFT_BINDER, NAMESPACE_RIGHT_BINDER); return true; } m.rollbackTo(); return false; }
@Override public PsiBuilder.Marker run(PsiBuilder builder, PsiBuilder.Marker marker, WhitespacesAndCommentsBinder[] param) { if (marker != null) marker.setCustomEdgeTokenBinders(param[0], param[1]); return marker; } };
@Override public PsiBuilder.Marker run(PsiBuilder builder, PsiBuilder.Marker marker, WhitespacesAndCommentsBinder param) { if (marker != null) marker.setCustomEdgeTokenBinders(param, null); return marker; } };
@Override public PsiBuilder.Marker run(PsiBuilder builder, PsiBuilder.Marker marker, WhitespacesAndCommentsBinder param) { if (marker != null) marker.setCustomEdgeTokenBinders(null, param); return marker; } };
public static boolean emptyImportList(PsiBuilder builder_, @SuppressWarnings("UnusedParameters") int level) { PsiBuilder.Marker marker = getCurrentMarker(builder_ instanceof PsiBuilderAdapter ? ((PsiBuilderAdapter)builder_).getDelegate() : builder_); if (marker != null) { marker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, null); } return true; }