private static void parseArgumentList(PsiBuilder builder) {
    LOG.assertTrue(builder.getTokenType() == JqlTokenTypes.LPAR);
    PsiBuilder.Marker marker = builder.mark();
    if (!advanceIfMatches(builder, JqlTokenTypes.LPAR)) {
      marker.drop();
      return;
    }
    // empty argument list
    if (advanceIfMatches(builder, JqlTokenTypes.RPAR)) {
      marker.done(JqlElementTypes.ARGUMENT_LIST);
      return;
    }
    PsiBuilder.Marker argument = builder.mark();
    if (!advanceIfMatches(builder, JqlTokenTypes.VALID_ARGUMENTS)) {
      builder.error(TaskBundle.message("parsing.error.expecting.argument"));
      argument.drop();
    }
    else {
      // valid argument is always literal, at least in current implementation of JQU
      argument.done(JqlElementTypes.LITERAL);
      while (advanceIfMatches(builder, JqlTokenTypes.COMMA)) {
        argument = builder.mark();
        if (!advanceIfMatches(builder, JqlTokenTypes.VALID_ARGUMENTS)) {
          marker.drop();
          builder.error(TaskBundle.message("parsing.error.expecting.argument"));
          break;
        }
        argument.done(JqlElementTypes.LITERAL);
      }
    }
    if (!advanceIfMatches(builder, JqlTokenTypes.RPAR)) {
      builder.error(TaskBundle.message("parsing.error.expecting"));
    }
    marker.done(JqlElementTypes.ARGUMENT_LIST);
  }
private static void parseArgumentList(PsiBuilder builder)