Author: remy.maucherat(a)jboss.com
Date: 2008-06-12 10:10:53 -0400 (Thu, 12 Jun 2008)
New Revision: 665
Modified:
trunk/java/org/apache/el/parser/AstValue.java
Log:
- Patch port.
- Make forced coercion of null and "" to zero optional.
Modified: trunk/java/org/apache/el/parser/AstValue.java
===================================================================
--- trunk/java/org/apache/el/parser/AstValue.java 2008-06-12 00:03:37 UTC (rev 664)
+++ trunk/java/org/apache/el/parser/AstValue.java 2008-06-12 14:10:53 UTC (rev 665)
@@ -38,6 +38,10 @@
*/
public final class AstValue extends SimpleNode {
+ protected static final boolean COERCE_TO_ZERO =
+ Boolean.valueOf(System.getProperty(
+ "org.apache.el.parser.COERCE_TO_ZERO",
"true")).booleanValue();
+
protected static class Target {
protected Object base;
@@ -129,12 +133,26 @@
Target t = getTarget(ctx);
ctx.setPropertyResolved(false);
ELResolver resolver = ctx.getELResolver();
- resolver.setValue(ctx, t.base, t.property,
- // coerce to the expected type
- ELSupport.coerceToType(value,
- resolver.getType(ctx, t.base, t.property)));
+ // coerce to the expected type
+ Class<?> targetClass = resolver.getType(ctx, t.base, t.property);
+ if (COERCE_TO_ZERO
+ || !isAssignable(value, targetClass)) {
+ value = ELSupport.coerceToType(value, targetClass);
+ }
+ resolver.setValue(ctx, t.base, t.property, value);
}
+ private boolean isAssignable(Object value, Class<?> targetClass) {
+ if (targetClass == null) {
+ return false;
+ } else if (value != null && targetClass.isPrimitive()) {
+ return false;
+ } else if (value != null && !targetClass.isInstance(value)) {
+ return false;
+ }
+ return true;
+ }
+
public MethodInfo getMethodInfo(EvaluationContext ctx, Class[] paramTypes)
throws ELException {
Target t = getTarget(ctx);
Show replies by date