[ 
https://issues.apache.org/jira/browse/JEXL-203?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15370511#comment-15370511
 ] 

Henri Biestro edited comment on JEXL-203 at 7/11/16 11:52 AM:
--------------------------------------------------------------

Override the options(...) method in your JexlArithmetic derived class is the 
current way of dealing with this. Not ideal but allows to solve your issue 
about arithmetic creation.
{code}    public JexlArithmetic options(JexlEngine.Options options) {
        boolean ostrict = options.isStrictArithmetic() == null
                          ? isStrict()
                          : options.isStrictArithmetic();
        MathContext bigdContext = options.getArithmeticMathContext();
        if (bigdContext == null) {
            bigdContext = getMathContext();
        }
        int bigdScale = options.getArithmeticMathScale();
        if (bigdScale == Integer.MIN_VALUE) {
            bigdScale = getMathScale();
        }
        if ((ostrict != isStrict())
                || bigdScale != getMathScale()
                || bigdContext != getMathContext()) {
            return new MyJexlArithmetic(ostrict, bigdContext, bigdScale);
        } else {
            return this;
        }
    }
{code}


was (Author: henrib):
Override the options(...) method in your JexlArithmetic derived class is the 
current way of dealing with this.
{code}    public JexlArithmetic options(JexlEngine.Options options) {
        boolean ostrict = options.isStrictArithmetic() == null
                          ? isStrict()
                          : options.isStrictArithmetic();
        MathContext bigdContext = options.getArithmeticMathContext();
        if (bigdContext == null) {
            bigdContext = getMathContext();
        }
        int bigdScale = options.getArithmeticMathScale();
        if (bigdScale == Integer.MIN_VALUE) {
            bigdScale = getMathScale();
        }
        if ((ostrict != isStrict())
                || bigdScale != getMathScale()
                || bigdContext != getMathContext()) {
            return new MyJexlArithmetic(ostrict, bigdContext, bigdScale);
        } else {
            return this;
        }
    }
{code}

> JexlArithmetic.options() diverts Interpreter to use default implementation of 
> JexlArithmetic instead of custom one
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: JEXL-203
>                 URL: https://issues.apache.org/jira/browse/JEXL-203
>             Project: Commons JEXL
>          Issue Type: Bug
>            Reporter: Dmitri Blinov
>            Assignee: Henri Biestro
>             Fix For: 3.0.1
>
>
> If JexlContext implements JexlEngine.Options and it provides values for 
> strictness, scale and MathContext that are different from what was specified 
> during creation of JexlArithmetics, then instance of wrong JexlArithmetic 
> class is created instead of custom class previously used. Apparently the 
> JexlArithmetic.options() method could then be overloaded in custom class, but 
> I don't like the idea of copying all that code from version to version, so 
> may be more robust solution could be found to this.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to