public String coerceToNumeric()

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();
    }