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;
}