This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push: new 9ab668b2e9 Partial fix for BZ 69338. Better performance for >2 operand And/Or 9ab668b2e9 is described below commit 9ab668b2e9b21d5259acca3221a4554a6d41f158 Author: Mark Thomas <ma...@apache.org> AuthorDate: Wed Sep 25 19:55:09 2024 +0100 Partial fix for BZ 69338. Better performance for >2 operand And/Or https://bz.apache.org/bugzilla/show_bug.cgi?id=69338 --- java/org/apache/el/parser/AstAnd.java | 17 +- java/org/apache/el/parser/AstOr.java | 17 +- java/org/apache/el/parser/ELParser.java | 743 +++++++++++---------- java/org/apache/el/parser/ELParser.jjt | 4 +- .../apache/el/parser/TestELParserPerformance.java | 51 ++ 5 files changed, 466 insertions(+), 366 deletions(-) diff --git a/java/org/apache/el/parser/AstAnd.java b/java/org/apache/el/parser/AstAnd.java index 8a87feaaaa..a55ca4cfc5 100644 --- a/java/org/apache/el/parser/AstAnd.java +++ b/java/org/apache/el/parser/AstAnd.java @@ -33,13 +33,16 @@ public final class AstAnd extends BooleanNode { @Override public Object getValue(EvaluationContext ctx) throws ELException { - Object obj = children[0].getValue(ctx); - Boolean b = ELSupport.coerceToBoolean(ctx, obj, true); - if (!b.booleanValue()) { - return b; + int i = 0; + while (i < children.length - 1) { + Object obj = children[i].getValue(ctx); + Boolean b = ELSupport.coerceToBoolean(ctx, obj, true); + if (!b.booleanValue()) { + return b; + } + i++; } - obj = children[1].getValue(ctx); - b = ELSupport.coerceToBoolean(ctx, obj, true); - return b; + Object obj = children[i].getValue(ctx); + return ELSupport.coerceToBoolean(ctx, obj, true); } } diff --git a/java/org/apache/el/parser/AstOr.java b/java/org/apache/el/parser/AstOr.java index d5e7d40120..eeecf8dd38 100644 --- a/java/org/apache/el/parser/AstOr.java +++ b/java/org/apache/el/parser/AstOr.java @@ -33,13 +33,16 @@ public final class AstOr extends BooleanNode { @Override public Object getValue(EvaluationContext ctx) throws ELException { - Object obj = this.children[0].getValue(ctx); - Boolean b = ELSupport.coerceToBoolean(ctx, obj, true); - if (b.booleanValue()) { - return b; + int i = 0; + while (i < children.length - 1) { + Object obj = children[i].getValue(ctx); + Boolean b = ELSupport.coerceToBoolean(ctx, obj, true); + if (b.booleanValue()) { + return b; + } + i++; } - obj = this.children[1].getValue(ctx); - b = ELSupport.coerceToBoolean(ctx, obj, true); - return b; + Object obj = children[i].getValue(ctx); + return ELSupport.coerceToBoolean(ctx, obj, true); } } diff --git a/java/org/apache/el/parser/ELParser.java b/java/org/apache/el/parser/ELParser.java index 6cf7168afe..6ba979629e 100644 --- a/java/org/apache/el/parser/ELParser.java +++ b/java/org/apache/el/parser/ELParser.java @@ -594,7 +594,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar jj_la1[10] = jj_gen; break label_6; } - if (jj_2_5(2)) { + if (jj_2_5(3)) { jj_consume_token(QUESTIONMARK); jj_consume_token(COLON); AstElvis jjtn001 = new AstElvis(JJTELVIS); @@ -691,67 +691,76 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar */ final public void Or() throws ParseException { And(); - label_7: while (true) { - switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { - case OR0: - case OR1: { - ; - break; - } - default: - jj_la1[12] = jj_gen; - break label_7; - } - switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { - case OR0: { - jj_consume_token(OR0); - break; - } - case OR1: { - jj_consume_token(OR1); - break; - } - default: - jj_la1[13] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - AstOr jjtn001 = new AstOr(JJTOR); - boolean jjtc001 = true; - jjtree.openNodeScope(jjtn001); - try { - And(); - } catch (Throwable jjte001) { - if (jjtc001) { - jjtree.clearNodeScope(jjtn001); - jjtc001 = false; - } else { - jjtree.popNode(); - } - if (jjte001 instanceof RuntimeException) { - { - if (true) { - throw (RuntimeException) jjte001; + switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { + case OR0: + case OR1: { + AstOr jjtn001 = new AstOr(JJTOR); + boolean jjtc001 = true; + jjtree.openNodeScope(jjtn001); + try { + label_7: while (true) { + switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { + case OR0: { + jj_consume_token(OR0); + break; + } + case OR1: { + jj_consume_token(OR1); + break; + } + default: + jj_la1[12] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + And(); + switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { + case OR0: + case OR1: { + ; + break; + } + default: + jj_la1[13] = jj_gen; + break label_7; + } + } + } catch (Throwable jjte001) { + if (jjtc001) { + jjtree.clearNodeScope(jjtn001); + jjtc001 = false; + } else { + jjtree.popNode(); + } + if (jjte001 instanceof RuntimeException) { + { + if (true) { + throw (RuntimeException) jjte001; + } + } + } + if (jjte001 instanceof ParseException) { + { + if (true) { + throw (ParseException) jjte001; + } } } - } - if (jjte001 instanceof ParseException) { { if (true) { - throw (ParseException) jjte001; + throw (Error) jjte001; } } - } - { - if (true) { - throw (Error) jjte001; + } finally { + if (jjtc001) { + jjtree.closeNodeScope(jjtn001, jjtree.nodeArity() + 1); } } - } finally { - if (jjtc001) { - jjtree.closeNodeScope(jjtn001, 2); - } + break; } + default: + jj_la1[14] = jj_gen; + ; } } @@ -760,67 +769,76 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar */ final public void And() throws ParseException { Equality(); - label_8: while (true) { - switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { - case AND0: - case AND1: { - ; - break; - } - default: - jj_la1[14] = jj_gen; - break label_8; - } - switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { - case AND0: { - jj_consume_token(AND0); - break; - } - case AND1: { - jj_consume_token(AND1); - break; - } - default: - jj_la1[15] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - AstAnd jjtn001 = new AstAnd(JJTAND); - boolean jjtc001 = true; - jjtree.openNodeScope(jjtn001); - try { - Equality(); - } catch (Throwable jjte001) { - if (jjtc001) { - jjtree.clearNodeScope(jjtn001); - jjtc001 = false; - } else { - jjtree.popNode(); - } - if (jjte001 instanceof RuntimeException) { - { - if (true) { - throw (RuntimeException) jjte001; + switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { + case AND0: + case AND1: { + AstAnd jjtn001 = new AstAnd(JJTAND); + boolean jjtc001 = true; + jjtree.openNodeScope(jjtn001); + try { + label_8: while (true) { + switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { + case AND0: { + jj_consume_token(AND0); + break; + } + case AND1: { + jj_consume_token(AND1); + break; + } + default: + jj_la1[15] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + Equality(); + switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { + case AND0: + case AND1: { + ; + break; + } + default: + jj_la1[16] = jj_gen; + break label_8; + } + } + } catch (Throwable jjte001) { + if (jjtc001) { + jjtree.clearNodeScope(jjtn001); + jjtc001 = false; + } else { + jjtree.popNode(); + } + if (jjte001 instanceof RuntimeException) { + { + if (true) { + throw (RuntimeException) jjte001; + } + } + } + if (jjte001 instanceof ParseException) { + { + if (true) { + throw (ParseException) jjte001; + } } } - } - if (jjte001 instanceof ParseException) { { if (true) { - throw (ParseException) jjte001; + throw (Error) jjte001; } } - } - { - if (true) { - throw (Error) jjte001; + } finally { + if (jjtc001) { + jjtree.closeNodeScope(jjtn001, jjtree.nodeArity() + 1); } } - } finally { - if (jjtc001) { - jjtree.closeNodeScope(jjtn001, 2); - } + break; } + default: + jj_la1[17] = jj_gen; + ; } } @@ -839,7 +857,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[16] = jj_gen; + jj_la1[18] = jj_gen; break label_9; } switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { @@ -855,7 +873,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[17] = jj_gen; + jj_la1[19] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -909,7 +927,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[18] = jj_gen; + jj_la1[20] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -952,7 +970,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[19] = jj_gen; + jj_la1[21] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -978,7 +996,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[20] = jj_gen; + jj_la1[22] = jj_gen; break label_10; } switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { @@ -994,7 +1012,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[21] = jj_gen; + jj_la1[23] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1048,7 +1066,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[22] = jj_gen; + jj_la1[24] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1102,7 +1120,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[23] = jj_gen; + jj_la1[25] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1156,7 +1174,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[24] = jj_gen; + jj_la1[26] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1199,7 +1217,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[25] = jj_gen; + jj_la1[27] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1219,7 +1237,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[26] = jj_gen; + jj_la1[28] = jj_gen; break label_11; } jj_consume_token(CONCAT); @@ -1275,7 +1293,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[27] = jj_gen; + jj_la1[29] = jj_gen; break label_12; } switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { @@ -1360,7 +1378,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[28] = jj_gen; + jj_la1[30] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1383,7 +1401,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[29] = jj_gen; + jj_la1[31] = jj_gen; break label_13; } switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) { @@ -1439,7 +1457,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[30] = jj_gen; + jj_la1[32] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1493,7 +1511,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[31] = jj_gen; + jj_la1[33] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1536,7 +1554,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[32] = jj_gen; + jj_la1[34] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1600,7 +1618,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[33] = jj_gen; + jj_la1[35] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1696,7 +1714,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[34] = jj_gen; + jj_la1[36] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1719,7 +1737,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[35] = jj_gen; + jj_la1[37] = jj_gen; break label_14; } ValueSuffix(); @@ -1779,7 +1797,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[36] = jj_gen; + jj_la1[38] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1799,7 +1817,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[37] = jj_gen; + jj_la1[39] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1809,7 +1827,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[38] = jj_gen; + jj_la1[40] = jj_gen; ; } } @@ -1911,7 +1929,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[39] = jj_gen; + jj_la1[41] = jj_gen; break label_15; } jj_consume_token(COMMA); @@ -1920,7 +1938,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[40] = jj_gen; + jj_la1[42] = jj_gen; ; } jj_consume_token(RPAREN); @@ -1972,7 +1990,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[41] = jj_gen; + jj_la1[43] = jj_gen; if (jj_2_7(2147483647)) { Function(); } else { @@ -1982,7 +2000,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[42] = jj_gen; + jj_la1[44] = jj_gen; if (jj_2_8(5)) { SetData(); } else { @@ -1996,7 +2014,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[43] = jj_gen; + jj_la1[45] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2040,7 +2058,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[44] = jj_gen; + jj_la1[46] = jj_gen; break label_16; } jj_consume_token(COMMA); @@ -2049,7 +2067,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[45] = jj_gen; + jj_la1[47] = jj_gen; ; } jj_consume_token(RBRACE); @@ -2115,7 +2133,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[46] = jj_gen; + jj_la1[48] = jj_gen; break label_17; } jj_consume_token(COMMA); @@ -2124,7 +2142,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[47] = jj_gen; + jj_la1[49] = jj_gen; ; } jj_consume_token(RBRACK); @@ -2194,7 +2212,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[48] = jj_gen; + jj_la1[50] = jj_gen; break label_18; } jj_consume_token(COMMA); @@ -2203,7 +2221,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[49] = jj_gen; + jj_la1[51] = jj_gen; ; } jj_consume_token(RBRACE); @@ -2319,7 +2337,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[50] = jj_gen; + jj_la1[52] = jj_gen; ; } if (t1 != null) { @@ -2336,7 +2354,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[51] = jj_gen; + jj_la1[53] = jj_gen; break label_19; } } @@ -2400,7 +2418,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[52] = jj_gen; + jj_la1[54] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2438,7 +2456,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar break; } default: - jj_la1[53] = jj_gen; + jj_la1[55] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2616,59 +2634,71 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar } } - private boolean jj_3R_LambdaExpressionOrInvocation_144_45_28() { - if (jj_3R_Ternary_155_5_30()) { + private boolean jj_3R_LambdaExpressionOrInvocation_144_45_30() { + if (jj_3R_Ternary_155_5_22()) { return true; } return false; } - private boolean jj_3R_MapEntry_374_5_109() { - if (jj_3R_Expression_99_5_33()) { + private boolean jj_3R_MapEntry_374_5_111() { + if (jj_3R_Expression_99_5_35()) { return true; } if (jj_scan_token(COLON)) { return true; } - if (jj_3R_Expression_99_5_33()) { + if (jj_3R_Expression_99_5_35()) { return true; } return false; } - private boolean jj_3R_MapData_368_11_107() { - if (jj_3R_MapEntry_374_5_109()) { + private boolean jj_3R_MapData_368_11_109() { + if (jj_3R_MapEntry_374_5_111()) { return true; } return false; } - private boolean jj_3R_And_179_5_40() { - if (jj_3R_Equality_188_5_45()) { + private boolean jj_3R_And_179_5_34() { + if (jj_3R_Equality_188_5_40()) { return true; } Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_And_179_17_46()) { - jj_scanpos = xsp; - break; - } + xsp = jj_scanpos; + if (jj_3R_And_180_17_47()) { + jj_scanpos = xsp; } return false; } - private boolean jj_3R_SetData_349_26_34() { + private boolean jj_3R_SetData_349_26_36() { if (jj_scan_token(COMMA)) { return true; } - if (jj_3R_Expression_99_5_33()) { + if (jj_3R_Expression_99_5_35()) { return true; } return false; } - private boolean jj_3R_Or_170_12_42() { + private boolean jj_3R_Or_171_12_43() { + Token xsp; + if (jj_3R_Or_170_13_48()) { + return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_3R_Or_170_13_48()) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_Or_170_13_48() { Token xsp; xsp = jj_scanpos; if (jj_scan_token(41)) { @@ -2677,7 +2707,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return true; } } - if (jj_3R_And_179_5_40()) { + if (jj_3R_And_179_5_34()) { return true; } return false; @@ -2689,7 +2719,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar } Token xsp; xsp = jj_scanpos; - if (jj_3R_MapData_368_11_107()) { + if (jj_3R_MapData_368_11_109()) { jj_scanpos = xsp; } if (jj_scan_token(RBRACE)) { @@ -2698,24 +2728,24 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_LambdaParameters_132_46_41() { + private boolean jj_3R_LambdaParameters_132_46_42() { if (jj_scan_token(COMMA)) { return true; } - if (jj_3R_Identifier_383_5_36()) { + if (jj_3R_Identifier_383_5_37()) { return true; } return false; } - private boolean jj_3R_ListData_356_11_106() { - if (jj_3R_Expression_99_5_33()) { + private boolean jj_3R_ListData_356_11_108() { + if (jj_3R_Expression_99_5_35()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_ListData_356_26_111()) { + if (jj_3R_ListData_356_26_113()) { jj_scanpos = xsp; break; } @@ -2723,17 +2753,14 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Or_170_5_35() { - if (jj_3R_And_179_5_40()) { + private boolean jj_3R_Or_170_5_29() { + if (jj_3R_And_179_5_34()) { return true; } Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_Or_170_12_42()) { - jj_scanpos = xsp; - break; - } + xsp = jj_scanpos; + if (jj_3R_Or_171_12_43()) { + jj_scanpos = xsp; } return false; } @@ -2744,7 +2771,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar } Token xsp; xsp = jj_scanpos; - if (jj_3R_ListData_356_11_106()) { + if (jj_3R_ListData_356_11_108()) { jj_scanpos = xsp; } if (jj_scan_token(RBRACK)) { @@ -2753,11 +2780,11 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Ternary_160_9_43() { + private boolean jj_3R_Ternary_160_9_44() { if (jj_scan_token(QUESTIONMARK)) { return true; } - if (jj_3R_Ternary_155_5_30()) { + if (jj_3R_Ternary_155_5_22()) { return true; } if (jj_scan_token(COLON)) { @@ -2766,14 +2793,14 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_SetData_349_11_29() { - if (jj_3R_Expression_99_5_33()) { + private boolean jj_3R_SetData_349_11_31() { + if (jj_3R_Expression_99_5_35()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_SetData_349_26_34()) { + if (jj_3R_SetData_349_26_36()) { jj_scanpos = xsp; break; } @@ -2781,21 +2808,21 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_MethodParameters_323_31_113() { + private boolean jj_3R_MethodParameters_323_31_115() { if (jj_scan_token(COMMA)) { return true; } return false; } - private boolean jj_3R_LambdaParameters_132_31_37() { - if (jj_3R_Identifier_383_5_36()) { + private boolean jj_3R_LambdaParameters_132_31_38() { + if (jj_3R_Identifier_383_5_37()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_LambdaParameters_132_46_41()) { + if (jj_3R_LambdaParameters_132_46_42()) { jj_scanpos = xsp; break; } @@ -2803,12 +2830,12 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Ternary_157_5_38() { + private boolean jj_3R_Ternary_157_5_39() { Token xsp; xsp = jj_scanpos; if (jj_3_5()) { jj_scanpos = xsp; - if (jj_3R_Ternary_160_9_43()) { + if (jj_3R_Ternary_160_9_44()) { return true; } } @@ -2822,19 +2849,19 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar if (jj_scan_token(COLON)) { return true; } - if (jj_3R_Ternary_155_5_30()) { + if (jj_3R_Ternary_155_5_22()) { return true; } return false; } - private boolean jj_3R_SetData_348_5_24() { + private boolean jj_3R_SetData_348_5_25() { if (jj_scan_token(START_SET_OR_MAP)) { return true; } Token xsp; xsp = jj_scanpos; - if (jj_3R_SetData_349_11_29()) { + if (jj_3R_SetData_349_11_31()) { jj_scanpos = xsp; } if (jj_scan_token(RBRACE)) { @@ -2843,7 +2870,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_null_334_18_23() { + private boolean jj_3R_null_334_18_24() { if (jj_scan_token(IDENTIFIER)) { return true; } @@ -2853,14 +2880,14 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Ternary_155_5_30() { - if (jj_3R_Or_170_5_35()) { + private boolean jj_3R_Ternary_155_5_22() { + if (jj_3R_Or_170_5_29()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_Ternary_157_5_38()) { + if (jj_3R_Ternary_157_5_39()) { jj_scanpos = xsp; break; } @@ -2871,7 +2898,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar private boolean jj_3_7() { Token xsp; xsp = jj_scanpos; - if (jj_3R_null_334_18_23()) { + if (jj_3R_null_334_18_24()) { jj_scanpos = xsp; } if (jj_scan_token(IDENTIFIER)) { @@ -2911,13 +2938,13 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_LambdaParameters_132_20_32() { + private boolean jj_3R_LambdaParameters_132_20_33() { if (jj_scan_token(LPAREN)) { return true; } Token xsp; xsp = jj_scanpos; - if (jj_3R_LambdaParameters_132_31_37()) { + if (jj_3R_LambdaParameters_132_31_38()) { jj_scanpos = xsp; } if (jj_scan_token(RPAREN)) { @@ -2927,14 +2954,14 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar } private boolean jj_3_8() { - if (jj_3R_SetData_348_5_24()) { + if (jj_3R_SetData_348_5_25()) { return true; } return false; } private boolean jj_3R_NonLiteral_335_7_89() { - if (jj_3R_Identifier_383_5_36()) { + if (jj_3R_Identifier_383_5_37()) { return true; } return false; @@ -2951,7 +2978,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar if (jj_scan_token(LPAREN)) { return true; } - if (jj_3R_Expression_99_5_33()) { + if (jj_3R_Expression_99_5_35()) { return true; } if (jj_scan_token(RPAREN)) { @@ -2960,14 +2987,14 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_MethodParameters_323_16_112() { - if (jj_3R_Expression_99_5_33()) { + private boolean jj_3R_MethodParameters_323_16_114() { + if (jj_3R_Expression_99_5_35()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_MethodParameters_323_31_113()) { + if (jj_3R_MethodParameters_323_31_115()) { jj_scanpos = xsp; break; } @@ -2975,14 +3002,14 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_ValueSuffix_297_41_110() { - if (jj_3R_MethodParameters_323_5_108()) { + private boolean jj_3R_ValueSuffix_297_41_112() { + if (jj_3R_MethodParameters_323_5_110()) { return true; } return false; } - private boolean jj_3R_NonLiteral_332_5_79() { + private boolean jj_3R_NonLiteral_332_5_80() { Token xsp; xsp = jj_scanpos; if (jj_3_6()) { @@ -3009,11 +3036,11 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_LambdaExpressionOrInvocation_141_5_22() { + private boolean jj_3R_LambdaExpressionOrInvocation_141_5_23() { if (jj_scan_token(LPAREN)) { return true; } - if (jj_3R_LambdaParameters_132_5_26()) { + if (jj_3R_LambdaParameters_132_5_27()) { return true; } if (jj_scan_token(ARROW)) { @@ -3023,7 +3050,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar xsp = jj_scanpos; if (jj_3_4()) { jj_scanpos = xsp; - if (jj_3R_LambdaExpressionOrInvocation_144_45_28()) { + if (jj_3R_LambdaExpressionOrInvocation_144_45_30()) { return true; } } @@ -3034,19 +3061,19 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar } private boolean jj_3_6() { - if (jj_3R_LambdaExpressionOrInvocation_141_5_22()) { + if (jj_3R_LambdaExpressionOrInvocation_141_5_23()) { return true; } return false; } - private boolean jj_3R_MethodParameters_323_5_108() { + private boolean jj_3R_MethodParameters_323_5_110() { if (jj_scan_token(LPAREN)) { return true; } Token xsp; xsp = jj_scanpos; - if (jj_3R_MethodParameters_323_16_112()) { + if (jj_3R_MethodParameters_323_16_114()) { jj_scanpos = xsp; } if (jj_scan_token(RPAREN)) { @@ -3055,19 +3082,19 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_LambdaParameters_132_5_31() { - if (jj_3R_Identifier_383_5_36()) { + private boolean jj_3R_LambdaParameters_132_5_32() { + if (jj_3R_Identifier_383_5_37()) { return true; } return false; } - private boolean jj_3R_LambdaParameters_132_5_26() { + private boolean jj_3R_LambdaParameters_132_5_27() { Token xsp; xsp = jj_scanpos; - if (jj_3R_LambdaParameters_132_5_31()) { + if (jj_3R_LambdaParameters_132_5_32()) { jj_scanpos = xsp; - if (jj_3R_LambdaParameters_132_20_32()) { + if (jj_3R_LambdaParameters_132_20_33()) { return true; } } @@ -3084,11 +3111,11 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_BracketSuffix_315_5_93() { + private boolean jj_3R_BracketSuffix_315_5_103() { if (jj_scan_token(LBRACK)) { return true; } - if (jj_3R_Expression_99_5_33()) { + if (jj_3R_Expression_99_5_35()) { return true; } if (jj_scan_token(RBRACK)) { @@ -3098,7 +3125,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar } private boolean jj_3R_LambdaExpression_124_5_21() { - if (jj_3R_LambdaParameters_132_5_26()) { + if (jj_3R_LambdaParameters_132_5_27()) { return true; } if (jj_scan_token(ARROW)) { @@ -3108,21 +3135,21 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar xsp = jj_scanpos; if (jj_3_3()) { jj_scanpos = xsp; - if (jj_3R_LambdaExpression_124_68_27()) { + if (jj_3R_LambdaExpression_124_68_28()) { return true; } } return false; } - private boolean jj_3R_ValueSuffix_297_21_81() { - if (jj_3R_BracketSuffix_315_5_93()) { + private boolean jj_3R_ValueSuffix_297_21_93() { + if (jj_3R_BracketSuffix_315_5_103()) { return true; } return false; } - private boolean jj_3R_Semicolon_107_20_44() { + private boolean jj_3R_Semicolon_107_20_46() { if (jj_scan_token(SEMICOLON)) { return true; } @@ -3132,8 +3159,8 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Assignment_116_5_25() { - if (jj_3R_Ternary_155_5_30()) { + private boolean jj_3R_Assignment_116_5_26() { + if (jj_3R_Ternary_155_5_22()) { return true; } Token xsp; @@ -3147,7 +3174,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_DotSuffix_306_5_92() { + private boolean jj_3R_DotSuffix_306_5_102() { if (jj_scan_token(DOT)) { return true; } @@ -3169,28 +3196,28 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar xsp = jj_scanpos; if (jj_3_2()) { jj_scanpos = xsp; - if (jj_3R_Assignment_116_5_25()) { + if (jj_3R_Assignment_116_5_26()) { return true; } } return false; } - private boolean jj_3R_ValueSuffix_297_7_80() { - if (jj_3R_DotSuffix_306_5_92()) { + private boolean jj_3R_ValueSuffix_297_7_92() { + if (jj_3R_DotSuffix_306_5_102()) { return true; } return false; } - private boolean jj_3R_Semicolon_107_5_39() { + private boolean jj_3R_Semicolon_107_5_41() { if (jj_3R_Assignment_115_5_20()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_Semicolon_107_20_44()) { + if (jj_3R_Semicolon_107_20_46()) { jj_scanpos = xsp; break; } @@ -3198,70 +3225,70 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_ValueSuffix_297_5_77() { + private boolean jj_3R_ValueSuffix_297_5_81() { Token xsp; xsp = jj_scanpos; - if (jj_3R_ValueSuffix_297_7_80()) { + if (jj_3R_ValueSuffix_297_7_92()) { jj_scanpos = xsp; - if (jj_3R_ValueSuffix_297_21_81()) { + if (jj_3R_ValueSuffix_297_21_93()) { return true; } } xsp = jj_scanpos; - if (jj_3R_ValueSuffix_297_41_110()) { + if (jj_3R_ValueSuffix_297_41_112()) { jj_scanpos = xsp; } return false; } - private boolean jj_3R_Value_278_21_74() { - if (jj_3R_ValueSuffix_297_5_77()) { + private boolean jj_3R_Value_278_21_78() { + if (jj_3R_ValueSuffix_297_5_81()) { return true; } return false; } - private boolean jj_3R_ValuePrefix_288_7_76() { - if (jj_3R_NonLiteral_332_5_79()) { + private boolean jj_3R_ValuePrefix_288_7_77() { + if (jj_3R_NonLiteral_332_5_80()) { return true; } return false; } - private boolean jj_3R_Expression_99_5_33() { - if (jj_3R_Semicolon_107_5_39()) { + private boolean jj_3R_Expression_99_5_35() { + if (jj_3R_Semicolon_107_5_41()) { return true; } return false; } private boolean jj_3R_ValuePrefix_287_5_75() { - if (jj_3R_Literal_414_5_78()) { - return true; - } - return false; - } - - private boolean jj_3R_ValuePrefix_287_5_73() { Token xsp; xsp = jj_scanpos; - if (jj_3R_ValuePrefix_287_5_75()) { + if (jj_3R_ValuePrefix_287_5_76()) { jj_scanpos = xsp; - if (jj_3R_ValuePrefix_288_7_76()) { + if (jj_3R_ValuePrefix_288_7_77()) { return true; } } return false; } - private boolean jj_3R_Value_278_5_72() { - if (jj_3R_ValuePrefix_287_5_73()) { + private boolean jj_3R_ValuePrefix_287_5_76() { + if (jj_3R_Literal_414_5_79()) { + return true; + } + return false; + } + + private boolean jj_3R_Value_278_5_71() { + if (jj_3R_ValuePrefix_287_5_75()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_Value_278_21_74()) { + if (jj_3R_Value_278_21_78()) { jj_scanpos = xsp; break; } @@ -3276,24 +3303,24 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Unary_269_9_68() { - if (jj_3R_Value_278_5_72()) { + private boolean jj_3R_Unary_269_9_67() { + if (jj_3R_Value_278_5_71()) { return true; } return false; } - private boolean jj_3R_Unary_267_9_67() { + private boolean jj_3R_Unary_267_9_66() { if (jj_scan_token(EMPTY)) { return true; } - if (jj_3R_Unary_263_9_61()) { + if (jj_3R_Unary_263_9_62()) { return true; } return false; } - private boolean jj_3R_Unary_265_9_66() { + private boolean jj_3R_Unary_265_9_65() { Token xsp; xsp = jj_scanpos; if (jj_scan_token(37)) { @@ -3302,22 +3329,22 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return true; } } - if (jj_3R_Unary_263_9_61()) { + if (jj_3R_Unary_263_9_62()) { return true; } return false; } - private boolean jj_3R_Unary_263_9_61() { + private boolean jj_3R_Unary_263_9_62() { Token xsp; xsp = jj_scanpos; - if (jj_3R_Unary_263_9_65()) { + if (jj_3R_Unary_263_9_64()) { jj_scanpos = xsp; - if (jj_3R_Unary_265_9_66()) { + if (jj_3R_Unary_265_9_65()) { jj_scanpos = xsp; - if (jj_3R_Unary_267_9_67()) { + if (jj_3R_Unary_267_9_66()) { jj_scanpos = xsp; - if (jj_3R_Unary_269_9_68()) { + if (jj_3R_Unary_269_9_67()) { return true; } } @@ -3326,11 +3353,11 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Unary_263_9_65() { + private boolean jj_3R_Unary_263_9_64() { if (jj_scan_token(MINUS)) { return true; } - if (jj_3R_Unary_263_9_61()) { + if (jj_3R_Unary_263_9_62()) { return true; } return false; @@ -3343,7 +3370,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Multiplication_253_9_71() { + private boolean jj_3R_Multiplication_253_9_74() { Token xsp; xsp = jj_scanpos; if (jj_scan_token(51)) { @@ -3352,7 +3379,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return true; } } - if (jj_3R_Unary_263_9_61()) { + if (jj_3R_Unary_263_9_62()) { return true; } return false; @@ -3365,7 +3392,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Multiplication_251_9_70() { + private boolean jj_3R_Multiplication_251_9_73() { Token xsp; xsp = jj_scanpos; if (jj_scan_token(49)) { @@ -3374,20 +3401,20 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return true; } } - if (jj_3R_Unary_263_9_61()) { + if (jj_3R_Unary_263_9_62()) { return true; } return false; } - private boolean jj_3R_Multiplication_249_9_62() { + private boolean jj_3R_Multiplication_249_9_68() { Token xsp; xsp = jj_scanpos; - if (jj_3R_Multiplication_249_9_69()) { + if (jj_3R_Multiplication_249_9_72()) { jj_scanpos = xsp; - if (jj_3R_Multiplication_251_9_70()) { + if (jj_3R_Multiplication_251_9_73()) { jj_scanpos = xsp; - if (jj_3R_Multiplication_253_9_71()) { + if (jj_3R_Multiplication_253_9_74()) { return true; } } @@ -3395,24 +3422,24 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Multiplication_249_9_69() { + private boolean jj_3R_Multiplication_249_9_72() { if (jj_scan_token(MULT)) { return true; } - if (jj_3R_Unary_263_9_61()) { + if (jj_3R_Unary_263_9_62()) { return true; } return false; } - private boolean jj_3R_Multiplication_247_5_59() { - if (jj_3R_Unary_263_9_61()) { + private boolean jj_3R_Multiplication_247_5_56() { + if (jj_3R_Unary_263_9_62()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_Multiplication_249_9_62()) { + if (jj_3R_Multiplication_249_9_68()) { jj_scanpos = xsp; break; } @@ -3427,46 +3454,46 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Math_237_9_64() { + private boolean jj_3R_Math_237_9_70() { if (jj_scan_token(MINUS)) { return true; } - if (jj_3R_Multiplication_247_5_59()) { + if (jj_3R_Multiplication_247_5_56()) { return true; } return false; } - private boolean jj_3R_Boolean_429_7_103() { + private boolean jj_3R_Boolean_429_7_105() { if (jj_scan_token(FALSE)) { return true; } return false; } - private boolean jj_3R_Math_235_9_60() { + private boolean jj_3R_Math_235_9_63() { Token xsp; xsp = jj_scanpos; - if (jj_3R_Math_235_9_63()) { + if (jj_3R_Math_235_9_69()) { jj_scanpos = xsp; - if (jj_3R_Math_237_9_64()) { + if (jj_3R_Math_237_9_70()) { return true; } } return false; } - private boolean jj_3R_Math_235_9_63() { + private boolean jj_3R_Math_235_9_69() { if (jj_scan_token(PLUS)) { return true; } - if (jj_3R_Multiplication_247_5_59()) { + if (jj_3R_Multiplication_247_5_56()) { return true; } return false; } - private boolean jj_3R_Boolean_427_5_102() { + private boolean jj_3R_Boolean_427_5_104() { if (jj_scan_token(TRUE)) { return true; } @@ -3476,23 +3503,23 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar private boolean jj_3R_Boolean_427_5_94() { Token xsp; xsp = jj_scanpos; - if (jj_3R_Boolean_427_5_102()) { + if (jj_3R_Boolean_427_5_104()) { jj_scanpos = xsp; - if (jj_3R_Boolean_429_7_103()) { + if (jj_3R_Boolean_429_7_105()) { return true; } } return false; } - private boolean jj_3R_Math_233_5_53() { - if (jj_3R_Multiplication_247_5_59()) { + private boolean jj_3R_Math_233_5_52() { + if (jj_3R_Multiplication_247_5_56()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_Math_235_9_60()) { + if (jj_3R_Math_235_9_63()) { jj_scanpos = xsp; break; } @@ -3514,11 +3541,11 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Concatenation_223_10_54() { + private boolean jj_3R_Concatenation_223_10_57() { if (jj_scan_token(CONCAT)) { return true; } - if (jj_3R_Math_233_5_53()) { + if (jj_3R_Math_233_5_52()) { return true; } return false; @@ -3538,7 +3565,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Function_396_24_104() { + private boolean jj_3R_Function_396_24_106() { if (jj_scan_token(COLON)) { return true; } @@ -3555,7 +3582,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Literal_414_5_78() { + private boolean jj_3R_Literal_414_5_79() { Token xsp; xsp = jj_scanpos; if (jj_3R_Literal_414_5_82()) { @@ -3577,13 +3604,13 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar } private boolean jj_3R_Concatenation_221_6_49() { - if (jj_3R_Math_233_5_53()) { + if (jj_3R_Math_233_5_52()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_Concatenation_223_10_54()) { + if (jj_3R_Concatenation_223_10_57()) { jj_scanpos = xsp; break; } @@ -3591,14 +3618,14 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Function_405_7_105() { - if (jj_3R_MethodParameters_323_5_108()) { + private boolean jj_3R_Function_405_7_107() { + if (jj_3R_MethodParameters_323_5_110()) { return true; } return false; } - private boolean jj_3R_Compare_210_9_58() { + private boolean jj_3R_Compare_210_9_61() { Token xsp; xsp = jj_scanpos; if (jj_scan_token(29)) { @@ -3613,7 +3640,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Compare_208_9_57() { + private boolean jj_3R_Compare_208_9_60() { Token xsp; xsp = jj_scanpos; if (jj_scan_token(31)) { @@ -3628,7 +3655,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Compare_206_9_56() { + private boolean jj_3R_Compare_206_9_59() { Token xsp; xsp = jj_scanpos; if (jj_scan_token(25)) { @@ -3643,16 +3670,16 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Compare_204_9_50() { + private boolean jj_3R_Compare_204_9_53() { Token xsp; xsp = jj_scanpos; - if (jj_3R_Compare_204_9_55()) { + if (jj_3R_Compare_204_9_58()) { jj_scanpos = xsp; - if (jj_3R_Compare_206_9_56()) { + if (jj_3R_Compare_206_9_59()) { jj_scanpos = xsp; - if (jj_3R_Compare_208_9_57()) { + if (jj_3R_Compare_208_9_60()) { jj_scanpos = xsp; - if (jj_3R_Compare_210_9_58()) { + if (jj_3R_Compare_210_9_61()) { return true; } } @@ -3661,7 +3688,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Compare_204_9_55() { + private boolean jj_3R_Compare_204_9_58() { Token xsp; xsp = jj_scanpos; if (jj_scan_token(27)) { @@ -3682,15 +3709,15 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar } Token xsp; xsp = jj_scanpos; - if (jj_3R_Function_396_24_104()) { + if (jj_3R_Function_396_24_106()) { jj_scanpos = xsp; } - if (jj_3R_Function_405_7_105()) { + if (jj_3R_Function_405_7_107()) { return true; } while (true) { xsp = jj_scanpos; - if (jj_3R_Function_405_7_105()) { + if (jj_3R_Function_405_7_107()) { jj_scanpos = xsp; break; } @@ -3698,14 +3725,14 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Compare_202_5_47() { + private boolean jj_3R_Compare_202_5_45() { if (jj_3R_Concatenation_221_6_49()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_Compare_204_9_50()) { + if (jj_3R_Compare_204_9_53()) { jj_scanpos = xsp; break; } @@ -3713,7 +3740,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_Equality_192_9_52() { + private boolean jj_3R_Equality_192_9_55() { Token xsp; xsp = jj_scanpos; if (jj_scan_token(35)) { @@ -3722,25 +3749,25 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return true; } } - if (jj_3R_Compare_202_5_47()) { + if (jj_3R_Compare_202_5_45()) { return true; } return false; } - private boolean jj_3R_Equality_190_9_48() { + private boolean jj_3R_Equality_190_9_50() { Token xsp; xsp = jj_scanpos; - if (jj_3R_Equality_190_9_51()) { + if (jj_3R_Equality_190_9_54()) { jj_scanpos = xsp; - if (jj_3R_Equality_192_9_52()) { + if (jj_3R_Equality_192_9_55()) { return true; } } return false; } - private boolean jj_3R_Equality_190_9_51() { + private boolean jj_3R_Equality_190_9_54() { Token xsp; xsp = jj_scanpos; if (jj_scan_token(33)) { @@ -3749,20 +3776,28 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return true; } } - if (jj_3R_Compare_202_5_47()) { + if (jj_3R_Compare_202_5_45()) { return true; } return false; } - private boolean jj_3R_Identifier_383_5_36() { - if (jj_scan_token(IDENTIFIER)) { + private boolean jj_3R_And_180_17_47() { + Token xsp; + if (jj_3R_And_179_18_51()) { return true; } + while (true) { + xsp = jj_scanpos; + if (jj_3R_And_179_18_51()) { + jj_scanpos = xsp; + break; + } + } return false; } - private boolean jj_3R_And_179_17_46() { + private boolean jj_3R_And_179_18_51() { Token xsp; xsp = jj_scanpos; if (jj_scan_token(39)) { @@ -3771,20 +3806,27 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return true; } } - if (jj_3R_Equality_188_5_45()) { + if (jj_3R_Equality_188_5_40()) { + return true; + } + return false; + } + + private boolean jj_3R_Identifier_383_5_37() { + if (jj_scan_token(IDENTIFIER)) { return true; } return false; } - private boolean jj_3R_Equality_188_5_45() { - if (jj_3R_Compare_202_5_47()) { + private boolean jj_3R_Equality_188_5_40() { + if (jj_3R_Compare_202_5_45()) { return true; } Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_Equality_190_9_48()) { + if (jj_3R_Equality_190_9_50()) { jj_scanpos = xsp; break; } @@ -3792,18 +3834,18 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar return false; } - private boolean jj_3R_LambdaExpression_124_68_27() { - if (jj_3R_Ternary_155_5_30()) { + private boolean jj_3R_LambdaExpression_124_68_28() { + if (jj_3R_Ternary_155_5_22()) { return true; } return false; } - private boolean jj_3R_ListData_356_26_111() { + private boolean jj_3R_ListData_356_26_113() { if (jj_scan_token(COMMA)) { return true; } - if (jj_3R_Expression_99_5_33()) { + if (jj_3R_Expression_99_5_35()) { return true; } return false; @@ -3820,7 +3862,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar private Token jj_scanpos, jj_lastpos; private int jj_la; private int jj_gen; - final private int[] jj_la1 = new int[54]; + final private int[] jj_la1 = new int[56]; static private int[] jj_la1_0; static private int[] jj_la1_1; static { @@ -3830,17 +3872,18 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar private static void jj_la1_init_0() { jj_la1_0 = new int[] { 0xe, 0xe, 0x800000, 0x15ed00, 0x15ed00, 0x1000000, 0x0, 0x40000, 0x15ed00, 0x40000, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe000000, 0x18000000, 0x6000000, 0x80000000, 0x60000000, - 0xfe000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15ed00, 0x120000, 0x15ed00, 0x120000, 0x40000, - 0x1000000, 0x15ed00, 0x40000, 0x0, 0x100100, 0x1000000, 0x15ed00, 0x1000000, 0x15ed00, 0x1000000, - 0x15ed00, 0x400000, 0x40000, 0x1ec00, 0xc000, }; + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe000000, 0x18000000, 0x6000000, 0x80000000, + 0x60000000, 0xfe000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15ed00, 0x120000, 0x15ed00, 0x120000, + 0x40000, 0x1000000, 0x15ed00, 0x40000, 0x0, 0x100100, 0x1000000, 0x15ed00, 0x1000000, 0x15ed00, + 0x1000000, 0x15ed00, 0x400000, 0x40000, 0x1ec00, 0xc000, }; } private static void jj_la1_init_1() { jj_la1_1 = new int[] { 0x0, 0x0, 0x0, 0x1008860, 0x1008860, 0x0, 0x1000000, 0x1000000, 0x1008860, 0x0, 0x10000, - 0x10000, 0x600, 0x600, 0x180, 0x180, 0x1e, 0x6, 0x18, 0x1e, 0x1, 0x0, 0x0, 0x1, 0x0, 0x1, 0x200000, - 0xc000, 0xc000, 0x1e2000, 0x60000, 0x180000, 0x1e2000, 0x60, 0x1008860, 0x0, 0x1000000, 0x0, 0x0, 0x0, - 0x1008860, 0x0, 0x1000000, 0x0, 0x0, 0x1008860, 0x0, 0x1008860, 0x0, 0x1008860, 0x0, 0x0, 0x0, 0x0, }; + 0x10000, 0x600, 0x600, 0x600, 0x180, 0x180, 0x180, 0x1e, 0x6, 0x18, 0x1e, 0x1, 0x0, 0x0, 0x1, 0x0, 0x1, + 0x200000, 0xc000, 0xc000, 0x1e2000, 0x60000, 0x180000, 0x1e2000, 0x60, 0x1008860, 0x0, 0x1000000, 0x0, + 0x0, 0x0, 0x1008860, 0x0, 0x1000000, 0x0, 0x0, 0x1008860, 0x0, 0x1008860, 0x0, 0x1008860, 0x0, 0x0, 0x0, + 0x0, }; } final private JJCalls[] jj_2_rtns = new JJCalls[8]; @@ -3863,7 +3906,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 54; i++) { + for (int i = 0; i < 56; i++) { jj_la1[i] = -1; } for (int i = 0; i < jj_2_rtns.length; i++) { @@ -3888,7 +3931,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar jj_ntk = -1; jjtree.reset(); jj_gen = 0; - for (int i = 0; i < 54; i++) { + for (int i = 0; i < 56; i++) { jj_la1[i] = -1; } for (int i = 0; i < jj_2_rtns.length; i++) { @@ -3903,7 +3946,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 54; i++) { + for (int i = 0; i < 56; i++) { jj_la1[i] = -1; } for (int i = 0; i < jj_2_rtns.length; i++) { @@ -3927,7 +3970,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar jj_ntk = -1; jjtree.reset(); jj_gen = 0; - for (int i = 0; i < 54; i++) { + for (int i = 0; i < 56; i++) { jj_la1[i] = -1; } for (int i = 0; i < jj_2_rtns.length; i++) { @@ -3941,7 +3984,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 54; i++) { + for (int i = 0; i < 56; i++) { jj_la1[i] = -1; } for (int i = 0; i < jj_2_rtns.length; i++) { @@ -3956,7 +3999,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar jj_ntk = -1; jjtree.reset(); jj_gen = 0; - for (int i = 0; i < 54; i++) { + for (int i = 0; i < 56; i++) { jj_la1[i] = -1; } for (int i = 0; i < jj_2_rtns.length; i++) { @@ -4120,7 +4163,7 @@ public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELPar la1tokens[jj_kind] = true; jj_kind = -1; } - for (int i = 0; i < 54; i++) { + for (int i = 0; i < 56; i++) { if (jj_la1[i] == jj_gen) { for (int j = 0; j < 32; j++) { if ((jj_la1_0[i] & (1 << j)) != 0) { diff --git a/java/org/apache/el/parser/ELParser.jjt b/java/org/apache/el/parser/ELParser.jjt index 8983f65c9b..379de3058b 100644 --- a/java/org/apache/el/parser/ELParser.jjt +++ b/java/org/apache/el/parser/ELParser.jjt @@ -167,7 +167,7 @@ void Ternary() : {} */ void Or() : {} { - And() ((<OR0>|<OR1>) And() #Or(2))* + And() [((<OR0>|<OR1>) And())+ #Or(jjtree.nodeArity() + 1)] } /* @@ -176,7 +176,7 @@ void Or() : {} */ void And() : {} { - Equality() ((<AND0>|<AND1>) Equality() #And(2))* + Equality() [((<AND0>|<AND1>) Equality())+ #And(jjtree.nodeArity() + 1)] } /* diff --git a/test/org/apache/el/parser/TestELParserPerformance.java b/test/org/apache/el/parser/TestELParserPerformance.java index eb860f4be9..424a6fe27f 100644 --- a/test/org/apache/el/parser/TestELParserPerformance.java +++ b/test/org/apache/el/parser/TestELParserPerformance.java @@ -19,8 +19,13 @@ package org.apache.el.parser; import java.io.StringReader; import jakarta.el.ELBaseTest; +import jakarta.el.ELContext; +import jakarta.el.ELManager; +import jakarta.el.ExpressionFactory; +import jakarta.el.ValueExpression; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import org.apache.tomcat.util.collections.SynchronizedStack; @@ -91,4 +96,50 @@ public class TestELParserPerformance extends ELBaseTest { Assert.assertTrue("Using new ElParser() was faster then using ELParser.ReInit", reinitTotalTime < newTotalTime); } + + + /* + * Ignored by default since this is an absolute test primarily for + * https://bz.apache.org/bugzilla/show_bug.cgi?id=69338 + */ + @Ignore + @Test + public void testAstAnd() { + + ELManager manager = new ELManager(); + ELContext context = manager.getELContext(); + ExpressionFactory factory = ELManager.getExpressionFactory(); + + long durations[] = new long[9]; + for (int j = 0; j < 5; j++) { + for (int operandCount = 2; operandCount < 11; operandCount ++) { + + StringBuilder sb = new StringBuilder("${true"); + for (int i = 2; i <= operandCount; i++) { + sb.append(" && true"); + } + sb.append("}"); + + String expression = sb.toString(); + + long start = System.nanoTime(); + + for (int i = 0; i < 2000000; i++) { + ValueExpression ve = factory.createValueExpression(context, expression, Boolean.class); + Boolean result = ve.getValue(context); + Assert.assertEquals(Boolean.TRUE, result); + } + + long duration = System.nanoTime() - start; + + if (j > 0) { + durations[operandCount - 2] += duration; + } + } + } + for (int operandCount = 2; operandCount < 11; operandCount ++) { + System.out.println("Operand count [" + operandCount + "], duration [" + durations[operandCount -2] + "]"); + } + System.out.println(""); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org