public static boolean parseAsTree()

in sources/frontend/plain/parserutil-stub/src/com/intellij/lang/parser/GeneratedParserUtilBase.java [1108:1152]


  public static boolean parseAsTree(ErrorState state, PsiBuilder builder, int level,
                                    IElementType chunkType, boolean checkBraces,
                                    Parser parser, Parser eatMoreCondition) {
    ArrayDeque<Pair<PsiBuilder.Marker, PsiBuilder.Marker>> parens = new ArrayDeque<>(4);
    ArrayDeque<Pair<PsiBuilder.Marker, Integer>> siblings = new ArrayDeque<>();
    PsiBuilder.Marker marker = null;


    int totalCount = 0;
    int tokenCount = 0;

    int c = current_position_(builder);
    while (true) {

        if (marker == null) {
          marker = builder.mark();
          marker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, null);
        }
        boolean result = (!parens.isEmpty() || eatMoreCondition.parse(builder, level + 1)) &&
                         parser.parse(builder, level + 1);
        if (result) {
          tokenCount++;
          totalCount++;
        }
        else {
          break;
        }


      if (tokenCount >= MAX_CHILDREN_IN_TREE) {
        marker.done(chunkType);
        siblings.addFirst(Pair.create(marker, 1));
        checkSiblings(chunkType, parens, siblings);
        marker = null;
        tokenCount = 0;
      }
      if (!empty_element_parsed_guard_(builder, "parseAsTree", c)) break;
      c = current_position_(builder);
    }
    if (marker != null) marker.drop();
    for (Pair<PsiBuilder.Marker, PsiBuilder.Marker> pair : parens) {
      pair.first.drop();
    }
    return totalCount != 0;
  }