Author: markt
Date: Wed Feb 15 16:26:08 2012
New Revision: 1244567

URL: http://svn.apache.org/viewvc?rev=1244567&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=52666
Correct coercion order in EL for A {==,!=,eq,ne} B

Modified:
    tomcat/trunk/java/org/apache/el/lang/ELSupport.java
    tomcat/trunk/test/org/apache/el/lang/TestELSupport.java

Modified: tomcat/trunk/java/org/apache/el/lang/ELSupport.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/lang/ELSupport.java?rev=1244567&r1=1244566&r2=1244567&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/lang/ELSupport.java (original)
+++ tomcat/trunk/java/org/apache/el/lang/ELSupport.java Wed Feb 15 16:26:08 2012
@@ -127,35 +127,31 @@ public class ELSupport {
             return true;
         } else if (obj0 == null || obj1 == null) {
             return false;
-        } else if (obj0 instanceof Boolean || obj1 instanceof Boolean) {
-            return coerceToBoolean(obj0).equals(coerceToBoolean(obj1));
-        } else if (obj0.getClass().isEnum()) {
-            return obj0.equals(coerceToEnum(obj1, obj0.getClass()));
-        } else if (obj1.getClass().isEnum()) {
-            return obj1.equals(coerceToEnum(obj0, obj1.getClass()));
-        } else if (obj0 instanceof String || obj1 instanceof String) {
-            int lexCompare = 
coerceToString(obj0).compareTo(coerceToString(obj1));
-            return (lexCompare == 0) ? true : false;
-        }
-        if (isBigDecimalOp(obj0, obj1)) {
+        } else if (isBigDecimalOp(obj0, obj1)) {
             BigDecimal bd0 = (BigDecimal) coerceToNumber(obj0, 
BigDecimal.class);
             BigDecimal bd1 = (BigDecimal) coerceToNumber(obj1, 
BigDecimal.class);
             return bd0.equals(bd1);
-        }
-        if (isDoubleOp(obj0, obj1)) {
+        } else if (isDoubleOp(obj0, obj1)) {
             Double d0 = (Double) coerceToNumber(obj0, Double.class);
             Double d1 = (Double) coerceToNumber(obj1, Double.class);
             return d0.equals(d1);
-        }
-        if (isBigIntegerOp(obj0, obj1)) {
+        } else if (isBigIntegerOp(obj0, obj1)) {
             BigInteger bi0 = (BigInteger) coerceToNumber(obj0, 
BigInteger.class);
             BigInteger bi1 = (BigInteger) coerceToNumber(obj1, 
BigInteger.class);
             return bi0.equals(bi1);
-        }
-        if (isLongOp(obj0, obj1)) {
+        } else         if (isLongOp(obj0, obj1)) {
             Long l0 = (Long) coerceToNumber(obj0, Long.class);
             Long l1 = (Long) coerceToNumber(obj1, Long.class);
             return l0.equals(l1);
+        } else if (obj0 instanceof Boolean || obj1 instanceof Boolean) {
+            return coerceToBoolean(obj0).equals(coerceToBoolean(obj1));
+        } else if (obj0.getClass().isEnum()) {
+            return obj0.equals(coerceToEnum(obj1, obj0.getClass()));
+        } else if (obj1.getClass().isEnum()) {
+            return obj1.equals(coerceToEnum(obj0, obj1.getClass()));
+        } else if (obj0 instanceof String || obj1 instanceof String) {
+            int lexCompare = 
coerceToString(obj0).compareTo(coerceToString(obj1));
+            return (lexCompare == 0) ? true : false;
         } else {
             return obj0.equals(obj1);
         }

Modified: tomcat/trunk/test/org/apache/el/lang/TestELSupport.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/lang/TestELSupport.java?rev=1244567&r1=1244566&r2=1244567&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/lang/TestELSupport.java (original)
+++ tomcat/trunk/test/org/apache/el/lang/TestELSupport.java Wed Feb 15 16:26:08 
2012
@@ -23,11 +23,17 @@ import javax.el.ELException;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import org.junit.Test;
 
 public class TestELSupport {
     @Test
+    public void testEquals() {
+        assertTrue(ELSupport.equals("01", Long.valueOf(1)));
+    }
+
+    @Test
     public void testBigDecimal() {
         testIsSame(new BigDecimal(
                 
"0.123456789012345678901234567890123456789012345678901234567890123456789"));



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

Reply via email to