boolean (final @NotNull BinaryOperationParser parser, int level) { final PsiBuilder.Marker tempMarker = parser.mark(); PsiBuilder.Marker lastMarker = tempMarker; boolean result = callParsingBinaryOperation(parser, level - 1); boolean tempMarkerDeleted = false; while (isBinaryOperator(parser, level) && !parser.isNewLine()) { final PsiBuilder.Marker operationMarker = lastMarker.precede(); if (!tempMarkerDeleted) { tempMarker.drop(); tempMarkerDeleted = true; } lastMarker = operationMarker; parseBinaryOperator(parser); callParsingBinaryOperation(parser, level - 1); parser.done(operationMarker, parser.getOperationElementTypes()[level]); result = true; } if (!tempMarkerDeleted) { tempMarker.drop(); } return result; }