Author: markt
Date: Mon Feb 24 11:18:37 2014
New Revision: 1571245

URL: http://svn.apache.org/r1571245
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56179
Re-generate parser
Add some test cases
Modified:
    tomcat/trunk/java/org/apache/el/parser/ELParser.java
    tomcat/trunk/test/org/apache/el/parser/TestELParser.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/el/parser/ELParser.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/ELParser.java?rev=1571245&r1=1571244&r2=1571245&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/parser/ELParser.java (original)
+++ tomcat/trunk/java/org/apache/el/parser/ELParser.java Mon Feb 24 11:18:37 
2014
@@ -222,7 +222,7 @@ public class ELParser/*@bgen(jjtree)*/im
  * Assignment
  */
   final public void Assignment() throws ParseException {
-    if (jj_2_2(3)) {
+    if (jj_2_2(4)) {
       LambdaExpression();
     } else {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1529,7 +1529,7 @@ public class ELParser/*@bgen(jjtree)*/im
  * For Grouped Operations, Identifiers, and Functions
  */
   final public void NonLiteral() throws ParseException {
-    if (jj_2_6(3)) {
+    if (jj_2_6(5)) {
       LambdaExpressionOrInvocation();
     } else {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2084,7 +2084,7 @@ public class ELParser/*@bgen(jjtree)*/im
     finally { jj_save(7, xla); }
   }
 
-  private boolean jj_3R_40() {
+  private boolean jj_3R_41() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(39)) {
@@ -2094,47 +2094,53 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_39() {
-    if (jj_3R_43()) return true;
+  private boolean jj_3R_30() {
+    if (jj_3R_22()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_40() {
+    if (jj_3R_44()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_44()) { jj_scanpos = xsp; break; }
+      if (jj_3R_45()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_106() {
-    if (jj_3R_35()) return true;
+  private boolean jj_3R_107() {
+    if (jj_3R_36()) return true;
     return false;
   }
 
-  private boolean jj_3R_104() {
-    if (jj_3R_106()) return true;
+  private boolean jj_3R_105() {
+    if (jj_3R_107()) return true;
     return false;
   }
 
-  private boolean jj_3R_42() {
+  private boolean jj_3R_43() {
     if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_38()) return true;
     return false;
   }
 
-  private boolean jj_3R_33() {
-    if (jj_3R_39()) return true;
+  private boolean jj_3R_34() {
+    if (jj_3R_40()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_40()) { jj_scanpos = xsp; break; }
+      if (jj_3R_41()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_36() {
+  private boolean jj_3R_37() {
     if (jj_scan_token(COMMA)) return true;
     return false;
   }
 
-  private boolean jj_3R_34() {
+  private boolean jj_3R_35() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(41)) {
@@ -2144,26 +2150,26 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_98() {
+  private boolean jj_3R_99() {
     if (jj_scan_token(START_SET_OR_MAP)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_104()) jj_scanpos = xsp;
+    if (jj_3R_105()) jj_scanpos = xsp;
     if (jj_scan_token(RBRACE)) return true;
     return false;
   }
 
-  private boolean jj_3R_103() {
-    if (jj_3R_35()) return true;
+  private boolean jj_3R_104() {
+    if (jj_3R_36()) return true;
     return false;
   }
 
   private boolean jj_3R_29() {
-    if (jj_3R_33()) return true;
+    if (jj_3R_34()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_34()) { jj_scanpos = xsp; break; }
+      if (jj_3R_35()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
@@ -2175,31 +2181,31 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_97() {
+  private boolean jj_3R_98() {
     if (jj_scan_token(LBRACK)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_103()) jj_scanpos = xsp;
+    if (jj_3R_104()) jj_scanpos = xsp;
     if (jj_scan_token(RBRACK)) return true;
     return false;
   }
 
-  private boolean jj_3R_38() {
-    if (jj_3R_37()) return true;
+  private boolean jj_3R_39() {
+    if (jj_3R_38()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_42()) { jj_scanpos = xsp; break; }
+      if (jj_3R_43()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_30() {
-    if (jj_3R_35()) return true;
+  private boolean jj_3R_31() {
+    if (jj_3R_36()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_36()) { jj_scanpos = xsp; break; }
+      if (jj_3R_37()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
@@ -2223,7 +2229,7 @@ public class ELParser/*@bgen(jjtree)*/im
     if (jj_scan_token(START_SET_OR_MAP)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_30()) jj_scanpos = xsp;
+    if (jj_3R_31()) jj_scanpos = xsp;
     if (jj_scan_token(RBRACE)) return true;
     return false;
   }
@@ -2248,22 +2254,22 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_32() {
+  private boolean jj_3R_33() {
     if (jj_scan_token(LPAREN)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_38()) jj_scanpos = xsp;
+    if (jj_3R_39()) jj_scanpos = xsp;
     if (jj_scan_token(RPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_88() {
-    if (jj_3R_98()) return true;
+  private boolean jj_3R_89() {
+    if (jj_3R_99()) return true;
     return false;
   }
 
-  private boolean jj_3R_87() {
-    if (jj_3R_97()) return true;
+  private boolean jj_3R_88() {
+    if (jj_3R_98()) return true;
     return false;
   }
 
@@ -2271,6 +2277,13 @@ public class ELParser/*@bgen(jjtree)*/im
     if (jj_scan_token(LPAREN)) return true;
     if (jj_3R_27()) return true;
     if (jj_scan_token(ARROW)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_4()) {
+    jj_scanpos = xsp;
+    if (jj_3R_30()) return true;
+    }
+    if (jj_scan_token(RPAREN)) return true;
     return false;
   }
 
@@ -2279,19 +2292,19 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_86() {
-    if (jj_3R_37()) return true;
+  private boolean jj_3R_87() {
+    if (jj_3R_38()) return true;
     return false;
   }
 
-  private boolean jj_3R_85() {
-    if (jj_3R_96()) return true;
+  private boolean jj_3R_86() {
+    if (jj_3R_97()) return true;
     return false;
   }
 
-  private boolean jj_3R_84() {
+  private boolean jj_3R_85() {
     if (jj_scan_token(LPAREN)) return true;
-    if (jj_3R_35()) return true;
+    if (jj_3R_36()) return true;
     return false;
   }
 
@@ -2300,22 +2313,22 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_76() {
+  private boolean jj_3R_77() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_6()) {
     jj_scanpos = xsp;
-    if (jj_3R_84()) {
-    jj_scanpos = xsp;
     if (jj_3R_85()) {
     jj_scanpos = xsp;
     if (jj_3R_86()) {
     jj_scanpos = xsp;
+    if (jj_3R_87()) {
+    jj_scanpos = xsp;
     if (jj_3_8()) {
     jj_scanpos = xsp;
-    if (jj_3R_87()) {
+    if (jj_3R_88()) {
     jj_scanpos = xsp;
-    if (jj_3R_88()) return true;
+    if (jj_3R_89()) return true;
     }
     }
     }
@@ -2325,17 +2338,17 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_31() {
-    if (jj_3R_37()) return true;
+  private boolean jj_3R_32() {
+    if (jj_3R_38()) return true;
     return false;
   }
 
   private boolean jj_3R_27() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_31()) {
+    if (jj_3R_32()) {
     jj_scanpos = xsp;
-    if (jj_3R_32()) return true;
+    if (jj_3R_33()) return true;
     }
     return false;
   }
@@ -2346,7 +2359,7 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_105() {
+  private boolean jj_3R_106() {
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
@@ -2363,12 +2376,12 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_45() {
+  private boolean jj_3R_46() {
     if (jj_scan_token(SEMICOLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_90() {
+  private boolean jj_3R_91() {
     if (jj_scan_token(LBRACK)) return true;
     return false;
   }
@@ -2383,8 +2396,8 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_78() {
-    if (jj_3R_90()) return true;
+  private boolean jj_3R_79() {
+    if (jj_3R_91()) return true;
     return false;
   }
 
@@ -2403,131 +2416,131 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_89() {
+  private boolean jj_3R_90() {
     if (jj_scan_token(DOT)) return true;
     return false;
   }
 
-  private boolean jj_3R_41() {
+  private boolean jj_3R_42() {
     if (jj_3R_20()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_45()) { jj_scanpos = xsp; break; }
+      if (jj_3R_46()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_77() {
-    if (jj_3R_89()) return true;
+  private boolean jj_3R_78() {
+    if (jj_3R_90()) return true;
     return false;
   }
 
-  private boolean jj_3R_74() {
+  private boolean jj_3R_75() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_77()) {
+    if (jj_3R_78()) {
     jj_scanpos = xsp;
-    if (jj_3R_78()) return true;
+    if (jj_3R_79()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_35() {
-    if (jj_3R_41()) return true;
+  private boolean jj_3R_36() {
+    if (jj_3R_42()) return true;
     return false;
   }
 
-  private boolean jj_3R_71() {
-    if (jj_3R_74()) return true;
+  private boolean jj_3R_72() {
+    if (jj_3R_75()) return true;
     return false;
   }
 
-  private boolean jj_3R_73() {
-    if (jj_3R_76()) return true;
+  private boolean jj_3R_74() {
+    if (jj_3R_77()) return true;
     return false;
   }
 
-  private boolean jj_3R_70() {
+  private boolean jj_3R_71() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_72()) {
+    if (jj_3R_73()) {
     jj_scanpos = xsp;
-    if (jj_3R_73()) return true;
+    if (jj_3R_74()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_72() {
-    if (jj_3R_75()) return true;
+  private boolean jj_3R_73() {
+    if (jj_3R_76()) return true;
     return false;
   }
 
-  private boolean jj_3R_69() {
-    if (jj_3R_70()) return true;
+  private boolean jj_3R_70() {
+    if (jj_3R_71()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_71()) { jj_scanpos = xsp; break; }
+      if (jj_3R_72()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_95() {
+  private boolean jj_3R_96() {
     if (jj_scan_token(NULL)) return true;
     return false;
   }
 
-  private boolean jj_3R_65() {
-    if (jj_3R_69()) return true;
+  private boolean jj_3R_66() {
+    if (jj_3R_70()) return true;
     return false;
   }
 
-  private boolean jj_3R_64() {
+  private boolean jj_3R_65() {
     if (jj_scan_token(EMPTY)) return true;
-    if (jj_3R_58()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
-  private boolean jj_3R_63() {
+  private boolean jj_3R_64() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(37)) {
     jj_scanpos = xsp;
     if (jj_scan_token(38)) return true;
     }
-    if (jj_3R_58()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
-  private boolean jj_3R_58() {
+  private boolean jj_3R_59() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_62()) {
-    jj_scanpos = xsp;
     if (jj_3R_63()) {
     jj_scanpos = xsp;
     if (jj_3R_64()) {
     jj_scanpos = xsp;
-    if (jj_3R_65()) return true;
+    if (jj_3R_65()) {
+    jj_scanpos = xsp;
+    if (jj_3R_66()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_62() {
+  private boolean jj_3R_63() {
     if (jj_scan_token(MINUS)) return true;
-    if (jj_3R_58()) return true;
+    if (jj_3R_59()) return true;
     return false;
   }
 
-  private boolean jj_3R_94() {
+  private boolean jj_3R_95() {
     if (jj_scan_token(STRING_LITERAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_68() {
+  private boolean jj_3R_69() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(51)) {
@@ -2537,12 +2550,12 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_93() {
+  private boolean jj_3R_94() {
     if (jj_scan_token(INTEGER_LITERAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_67() {
+  private boolean jj_3R_68() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(49)) {
@@ -2552,95 +2565,100 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_59() {
+  private boolean jj_3R_60() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_66()) {
-    jj_scanpos = xsp;
     if (jj_3R_67()) {
     jj_scanpos = xsp;
-    if (jj_3R_68()) return true;
+    if (jj_3R_68()) {
+    jj_scanpos = xsp;
+    if (jj_3R_69()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_66() {
+  private boolean jj_3R_67() {
     if (jj_scan_token(MULT)) return true;
     return false;
   }
 
-  private boolean jj_3R_56() {
-    if (jj_3R_58()) return true;
+  private boolean jj_3R_57() {
+    if (jj_3R_59()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_59()) { jj_scanpos = xsp; break; }
+      if (jj_3R_60()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_92() {
+  private boolean jj_3R_93() {
     if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_61() {
+  private boolean jj_3R_62() {
     if (jj_scan_token(MINUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_100() {
+  private boolean jj_3R_101() {
     if (jj_scan_token(FALSE)) return true;
     return false;
   }
 
-  private boolean jj_3R_57() {
+  private boolean jj_3R_58() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_60()) {
+    if (jj_3R_61()) {
     jj_scanpos = xsp;
-    if (jj_3R_61()) return true;
+    if (jj_3R_62()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_60() {
+  private boolean jj_3R_61() {
     if (jj_scan_token(PLUS)) return true;
     return false;
   }
 
-  private boolean jj_3R_99() {
+  private boolean jj_3R_100() {
     if (jj_scan_token(TRUE)) return true;
     return false;
   }
 
-  private boolean jj_3R_91() {
+  private boolean jj_3R_92() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_99()) {
+    if (jj_3R_100()) {
     jj_scanpos = xsp;
-    if (jj_3R_100()) return true;
+    if (jj_3R_101()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_50() {
-    if (jj_3R_56()) return true;
+  private boolean jj_3R_51() {
+    if (jj_3R_57()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_57()) { jj_scanpos = xsp; break; }
+      if (jj_3R_58()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
+  private boolean jj_3R_84() {
+    if (jj_3R_96()) return true;
+    return false;
+  }
+
   private boolean jj_3R_83() {
     if (jj_3R_95()) return true;
     return false;
   }
 
-  private boolean jj_3R_51() {
+  private boolean jj_3R_52() {
     if (jj_scan_token(CONCAT)) return true;
     return false;
   }
@@ -2655,28 +2673,23 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_80() {
-    if (jj_3R_92()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_101() {
+  private boolean jj_3R_102() {
     if (jj_scan_token(COLON)) return true;
     return false;
   }
 
-  private boolean jj_3R_75() {
+  private boolean jj_3R_76() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_79()) {
-    jj_scanpos = xsp;
     if (jj_3R_80()) {
     jj_scanpos = xsp;
     if (jj_3R_81()) {
     jj_scanpos = xsp;
     if (jj_3R_82()) {
     jj_scanpos = xsp;
-    if (jj_3R_83()) return true;
+    if (jj_3R_83()) {
+    jj_scanpos = xsp;
+    if (jj_3R_84()) return true;
     }
     }
     }
@@ -2684,27 +2697,27 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_79() {
-    if (jj_3R_91()) return true;
+  private boolean jj_3R_80() {
+    if (jj_3R_92()) return true;
     return false;
   }
 
-  private boolean jj_3R_46() {
-    if (jj_3R_50()) return true;
+  private boolean jj_3R_47() {
+    if (jj_3R_51()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_51()) { jj_scanpos = xsp; break; }
+      if (jj_3R_52()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_102() {
-    if (jj_3R_105()) return true;
+  private boolean jj_3R_103() {
+    if (jj_3R_106()) return true;
     return false;
   }
 
-  private boolean jj_3R_55() {
+  private boolean jj_3R_56() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(29)) {
@@ -2714,7 +2727,7 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_54() {
+  private boolean jj_3R_55() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(31)) {
@@ -2724,7 +2737,7 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_53() {
+  private boolean jj_3R_54() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(25)) {
@@ -2734,23 +2747,23 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_47() {
+  private boolean jj_3R_48() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_52()) {
-    jj_scanpos = xsp;
     if (jj_3R_53()) {
     jj_scanpos = xsp;
     if (jj_3R_54()) {
     jj_scanpos = xsp;
-    if (jj_3R_55()) return true;
+    if (jj_3R_55()) {
+    jj_scanpos = xsp;
+    if (jj_3R_56()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_52() {
+  private boolean jj_3R_53() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(27)) {
@@ -2760,30 +2773,30 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_96() {
+  private boolean jj_3R_97() {
     if (jj_scan_token(IDENTIFIER)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_101()) jj_scanpos = xsp;
-    if (jj_3R_102()) return true;
+    if (jj_3R_102()) jj_scanpos = xsp;
+    if (jj_3R_103()) return true;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_102()) { jj_scanpos = xsp; break; }
+      if (jj_3R_103()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_43() {
-    if (jj_3R_46()) return true;
+  private boolean jj_3R_44() {
+    if (jj_3R_47()) return true;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_47()) { jj_scanpos = xsp; break; }
+      if (jj_3R_48()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  private boolean jj_3R_49() {
+  private boolean jj_3R_50() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(35)) {
@@ -2793,17 +2806,17 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_44() {
+  private boolean jj_3R_45() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_48()) {
+    if (jj_3R_49()) {
     jj_scanpos = xsp;
-    if (jj_3R_49()) return true;
+    if (jj_3R_50()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_48() {
+  private boolean jj_3R_49() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(33)) {
@@ -2818,7 +2831,7 @@ public class ELParser/*@bgen(jjtree)*/im
     return false;
   }
 
-  private boolean jj_3R_37() {
+  private boolean jj_3R_38() {
     if (jj_scan_token(IDENTIFIER)) return true;
     return false;
   }

Modified: tomcat/trunk/test/org/apache/el/parser/TestELParser.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/parser/TestELParser.java?rev=1571245&r1=1571244&r2=1571245&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/parser/TestELParser.java (original)
+++ tomcat/trunk/test/org/apache/el/parser/TestELParser.java Mon Feb 24 
11:18:37 2014
@@ -104,6 +104,102 @@ public class TestELParser {
     }
 
 
+    @Test
+    public void bug56179a() {
+        doTestBug56179(0, "test == true");
+    }
+
+    @Test
+    public void bug56179b() {
+        doTestBug56179(1, "test == true");
+    }
+
+    @Test
+    public void bug56179c() {
+        doTestBug56179(2, "test == true");
+    }
+
+    @Test
+    public void bug56179d() {
+        doTestBug56179(3, "test == true");
+    }
+
+    @Test
+    public void bug56179e() {
+        doTestBug56179(4, "test == true");
+    }
+
+    @Test
+    public void bug56179f() {
+        doTestBug56179(5, "test == true");
+    }
+
+    @Test
+    public void bug56179g() {
+        doTestBug56179(0, "(test) == true");
+    }
+
+    @Test
+    public void bug56179h() {
+        doTestBug56179(1, "(test) == true");
+    }
+
+    @Test
+    public void bug56179i() {
+        doTestBug56179(2, "(test) == true");
+    }
+
+    @Test
+    public void bug56179j() {
+        doTestBug56179(3, "(test) == true");
+    }
+
+    @Test
+    public void bug56179k() {
+        doTestBug56179(4, "(test) == true");
+    }
+
+    @Test
+    public void bug56179l() {
+        doTestBug56179(5, "(test) == true");
+    }
+
+    @Test
+    public void bug56179m() {
+        doTestBug56179(5, "((test)) == true");
+    }
+
+    @Test
+    public void bug56179n() {
+        doTestBug56179(5, "(((test))) == true");
+    }
+
+    private void doTestBug56179(int parenthesesCount, String innerExpr) {
+        ExpressionFactory factory = ExpressionFactory.newInstance();
+        ELContext context = new ELContextImpl(factory);
+
+        ValueExpression var =
+            factory.createValueExpression(Boolean.TRUE, Boolean.class);
+        context.getVariableMapper().setVariable("test", var);
+
+        StringBuilder expr = new StringBuilder();
+        expr.append("${");
+        for (int i = 0; i < parenthesesCount; i++) {
+            expr.append("(");
+        }
+        expr.append(innerExpr);
+        for (int i = 0; i < parenthesesCount; i++) {
+            expr.append(")");
+        }
+        expr.append("}");
+        ValueExpression ve = factory.createValueExpression(
+                context, expr.toString(), String.class);
+
+        String result = (String) ve.getValue(context);
+        assertEquals("true", result);
+    }
+
+
     private void testExpression(String expression, String expected) {
         ExpressionFactory factory = ExpressionFactory.newInstance();
         ELContext context = new ELContextImpl(factory);

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1571245&r1=1571244&r2=1571245&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Feb 24 11:18:37 2014
@@ -95,6 +95,10 @@
         Change the default compiler source and compiler target versions to 1.7
         since Tomcat 8 requires a minimum of Java 7. (markt)
       </fix>
+      <fix>
+        <bug>56179</bug>: Fix parsing of EL expressions that contain 
unnecessary
+        parentheses. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="WebSocket">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to