Author: remy.maucherat(a)jboss.com
Date: 2012-02-16 10:39:39 -0500 (Thu, 16 Feb 2012)
New Revision: 1967
Modified:
trunk/java/org/apache/el/lang/ELSupport.java
trunk/test/java/org/apache/el/lang/TestELSupport.java
trunk/webapps/docs/changelog.xml
Log:
Port 52666: Correct coercion order in EL for A {==,!=,eq,ne} B.
Modified: trunk/java/org/apache/el/lang/ELSupport.java
===================================================================
--- trunk/java/org/apache/el/lang/ELSupport.java 2012-02-15 15:57:47 UTC (rev 1966)
+++ trunk/java/org/apache/el/lang/ELSupport.java 2012-02-16 15:39:39 UTC (rev 1967)
@@ -122,40 +122,36 @@
* @throws ELException
*/
public static final boolean equals(final Object obj0, final Object obj1)
- throws ELException {
+ throws ELException {
if (obj0 == obj1) {
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: trunk/test/java/org/apache/el/lang/TestELSupport.java
===================================================================
--- trunk/test/java/org/apache/el/lang/TestELSupport.java 2012-02-15 15:57:47 UTC (rev
1966)
+++ trunk/test/java/org/apache/el/lang/TestELSupport.java 2012-02-16 15:39:39 UTC (rev
1967)
@@ -28,6 +28,11 @@
public class TestELSupport {
@Test
+ public void testEquals() {
+ assertTrue(ELSupport.equals("01", Long.valueOf(1)));
+ }
+
+ @Test
public void testBigDecimal() {
testIsSame(new BigDecimal(
"0.123456789012345678901234567890123456789012345678901234567890123456789"));
Modified: trunk/webapps/docs/changelog.xml
===================================================================
--- trunk/webapps/docs/changelog.xml 2012-02-15 15:57:47 UTC (rev 1966)
+++ trunk/webapps/docs/changelog.xml 2012-02-16 15:39:39 UTC (rev 1967)
@@ -42,6 +42,13 @@
</fix>
</changelog>
</subsection>
+ <subsection name="Jasper">
+ <changelog>
+ <fix>
+ <bug>52666</bug>: Correct coercion order in EL for A {==,!=,eq,ne}
B. (markt)
+ </fix>
+ </changelog>
+ </subsection>
</section>
<section name="JBoss Web 7.0.10.Final (remm)">
Show replies by date