boolean (PsiBuilder builder) { PsiBuilder.Marker marker = builder.mark(); boolean parsed = true; if (builder.getTokenType() == JqlTokenTypes.LPAR) { marker.drop(); parsed = parseList(builder); } else if (advanceIfMatches(builder, JqlTokenTypes.EMPTY_VALUES)) { marker.done(JqlElementTypes.EMPTY); } else if (advanceIfMatches(builder, JqlTokenTypes.LITERALS)) { if (builder.getTokenType() == JqlTokenTypes.LPAR) { marker.done(JqlElementTypes.IDENTIFIER); marker = marker.precede(); parseArgumentList(builder); marker.done(JqlElementTypes.FUNCTION_CALL); } else { marker.done(JqlElementTypes.LITERAL); } } else { marker.drop(); parsed = false; } if (!parsed) { builder.error(TaskBundle.message("parsing.error.expecting.either.literal.list.or.function.call")); } return parsed; }