commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Henri Biestro (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (JEXL-203) JexlArithmetic.options() diverts Interpreter to use default implementation of JexlArithmetic instead of custom one
Date Mon, 11 Jul 2016 11:53:10 GMT

    [ 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)

Mime
View raw message