in cayenne/src/main/java/org/apache/cayenne/exp/parser/ExpressionParser.java [2110:2200]
final public void customAggregate() throws ParseException {/*@bgen(jjtree) CustomAggregate */
ASTCustomAggregate jjtn000 = new ASTCustomAggregate(JJTCUSTOMAGGREGATE);
boolean jjtc000 = true;
jjtree.openNodeScope(jjtn000);
try {
jj_consume_token(AGGREGATE);
jj_consume_token(16);
stringLiteral();
label_12:
while (true) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case 19:{
;
break;
}
default:
jj_la1[38] = jj_gen;
break label_12;
}
jj_consume_token(19);
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case CONCAT:
case SUBSTRING:
case TRIM:
case LOWER:
case UPPER:
case SINGLE_QUOTED_STRING:
case DOUBLE_QUOTED_STRING:{
stringExpression();
break;
}
case 16:
case 25:
case 26:
case 28:
case LENGTH:
case LOCATE:
case ABS:
case SQRT:
case MOD:
case YEAR:
case MONTH:
case WEEK:
case DAY_OF_YEAR:
case DAY:
case DAY_OF_MONTH:
case DAY_OF_WEEK:
case HOUR:
case MINUTE:
case SECOND:
case FUNCTION:
case OPERATOR:
case AGGREGATE:
case 70:
case 71:
case 72:
case 73:
case 74:
case PROPERTY_PATH:
case INT_LITERAL:
case FLOAT_LITERAL:{
numericExpression();
break;
}
default:
jj_la1[39] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
jj_consume_token(17);
} catch (Throwable jjte000) {
if (jjtc000) {
jjtree.clearNodeScope(jjtn000);
jjtc000 = false;
} else {
jjtree.popNode();
}
if (jjte000 instanceof RuntimeException) {
{if (true) throw (RuntimeException)jjte000;}
}
if (jjte000 instanceof ParseException) {
{if (true) throw (ParseException)jjte000;}
}
{if (true) throw (Error)jjte000;}
} finally {
if (jjtc000) {
jjtree.closeNodeScope(jjtn000, true);
}
}
}