in src/main/java/org/apache/commons/ognl/NumericExpression.java [106:145]
public String coerceToNumeric( String source, OgnlContext context, Node child )
{
StringBuilder ret = new StringBuilder( source );
Object value = context.getCurrentObject();
if ( child instanceof ASTConst && value != null )
{
return value.toString();
}
if ( context.getCurrentType() != null && !context.getCurrentType().isPrimitive()
&& context.getCurrentObject() != null && context.getCurrentObject() instanceof Number)
{
ret = new StringBuilder( "((" ).append(
ExpressionCompiler.getCastString( context.getCurrentObject().getClass() ) ).append( ")" ).append(
ret ).append( ")." ).append(
OgnlRuntime.getNumericValueGetter( context.getCurrentObject().getClass() ) );
}
else if ( context.getCurrentType() != null && context.getCurrentType().isPrimitive()
&& ( child instanceof ASTConst || child instanceof NumericExpression) )
{
@SuppressWarnings( "unchecked" ) // checked by the condition in the if clause
Class<? extends Number> numberClass = (Class<? extends Number>) context.getCurrentType();
ret.append( OgnlRuntime.getNumericLiteral( numberClass ) );
}
else if ( context.getCurrentType() != null && String.class.isAssignableFrom( context.getCurrentType() ) )
{
ret = new StringBuilder( "Double.parseDouble(" )
.append( ret )
.append( ")" );
context.setCurrentType( Double.TYPE );
}
if (child instanceof NumericExpression)
{
ret = new StringBuilder( "(" ).append( ret ).append( ")" );
}
return ret.toString();
}