You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Henri Biestro (JIRA)" <ji...@apache.org> on 2015/08/24 18:15:46 UTC

[jira] [Comment Edited] (JEXL-174) Overloadable property access operators

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

Henri Biestro edited comment on JEXL-174 at 8/24/15 4:15 PM:
-------------------------------------------------------------

These overloads will also occur in the JexlArithmetic derived class (like any other operator).
The new operators/methods that will be introduced are:
propertyGet/propertySet/arrayGet/arraySet
They need to be public and will be 'resolved' using the common method matching algorithm.
The former two will be called when using a '.' as in: {code}foo.bar{code}
The latter two will be called when using a '[]' as in: {code}foo[bar]{code}
A simplified example where Maps always use their get/put to access properties:
{code}

    public static class MapArithmetic extends JexlArithmetic {
        public MapArithmetic(boolean flag) {
            super(flag);
        }

        public Object propertyGet(Map<?,?> map, Object identifier) {
            return arrayGet(map, identifier);
        }

        public Object propertySet(Map<Object, Object> map, Object identifier, Object value) {
             return arraySet(map, identifier, value);
        }

        public Object arrayGet(Map<?,?> map, Object identifier) {
            return map.get(identifier);
        }
        
        public Object arraySet(Map<Object, Object> map, Object identifier, Object value) {
             map.put(identifier, value);
             return value;
        }
    }

{code}


was (Author: henrib):
These overloads will also occur in the JexlArithmetic derived class (like any other operator).
The new operators/methods that will be introduced are:
propertyGet/propertySet/arrayGet/arraySet
They need to be public and will be 'resolved' using the common method matching algorithm.
The former two will be called when using a '.' as in: {code}foo.bar{code}
The latter two will be called when using a '[]' as in: {code}foo[bar]{code}
A simplified example where Maps always use their get/put to access properties:
{code}
    public static class MapArithmetic extends JexlArithmetic {
        public MapArithmetic(boolean flag) {
            super(flag);
        }

        public Object propertyGet(Map<?,?> map, Object identifier) {
            return arrayGet(map, identifier);
        }

        public Object propertySet(Map<Object, Object> map, Object identifier, Object value) {
             return arraySet(map, identifier, value);
        }

        public Object arrayGet(Map<?,?> map, Object identifier) {
            return map.get(identifier);
        }
        
        public Object arraySet(Map<Object, Object> map, Object identifier, Object value) {
             map.put(identifier, value);
             return value;
        }
    }
{code}

> Overloadable property access operators
> --------------------------------------
>
>                 Key: JEXL-174
>                 URL: https://issues.apache.org/jira/browse/JEXL-174
>             Project: Commons JEXL
>          Issue Type: New Feature
>    Affects Versions: 3.0
>            Reporter: Dmitri Blinov
>            Priority: Minor
>
> In analogy with overloading operators like empty(), size() etc, provide a way to overload property "get" and "set" operators ([] and .), like 
> {code}
>    public Object getAt(Object obj, Object index) {...}
>    public Object putAt(Object obj, Object index, Object value) {...}
> {code}
> Overloaded operators should be tried before any standard access stategy, ie MAP, POJO etc.



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