[ https://issues.apache.org/jira/browse/JEXL-224?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16059241#comment-16059241 ]
Dmitri Blinov commented on JEXL-224: ------------------------------------ I have managed to achieve what I whanted by overriding {{Uberspect.getMethod()}} and implementing custom JexlMethod class {code} protected class CollectionJexlMethod implements JexlMethod { public CollectionJexlMethod() { } @Override public Object invoke(Object obj, Object... params) throws Exception { if (obj instanceof Collection && params != null && params.length == 1) { Collection c = (Collection) obj; int i = TypeCast.getInt(params[0]); for (Object o : c) { if (i-- == 0) return o; } } return null; } @Override public Object tryInvoke(String name, Object obj, Object... params) { if (obj instanceof Collection && "call".equals(name) && params != null && params.length == 1) { Collection c = (Collection) obj; int i = TypeCast.getInt(params[0]); for (Object o : c) { if (i-- == 0) return o; } } return JexlEngine.TRY_FAILED; } @Override public boolean tryFailed(Object rval) { return rval == JexlEngine.TRY_FAILED; } @Override public boolean isCacheable() { return true; } @Override public Class<?> getReturnType() { return Object.class; } } @Override public JexlMethod getMethod(Object obj, String method, Object... args) { JexlMethod result = super.getMethod(obj, method, args); if (result == null) { if (obj instanceof Collection && "call".equals(method) && args != null && args.length == 1) { result = new CollectionJexlMethod(); } } return result; } {code} The code is not as eloquent as it would be with JEXL-224 implemented, but it seems to work and I don't know if the issue is still worth fixing > The ability to overload call() operator in customized JexlArithmetic > implementation > ----------------------------------------------------------------------------------- > > Key: JEXL-224 > URL: https://issues.apache.org/jira/browse/JEXL-224 > Project: Commons JEXL > Issue Type: Improvement > Affects Versions: 3.1 > Reporter: Dmitri Blinov > Priority: Minor > > As of now there is a possibility to overload some operators and property > accessors in JexlArithmetic, such as {{[]}}, {{.}} and {{~=}}, which is great > extension point of Jexl. Suppose I want to implement index-based access to a > {{j.u.Collection}} instance in a manner that {{a(0)}} would return the first > element of collection, {{a(1)}} would return the second and so forth. This is > different from using common access operator {{[]}} in a way that I specify > not the index key of for example ArrayList, but an ordered index of the > element. Of course, the is a possibility to introduce some function to this, > but for the sake of the scripting simplicity I'm looking for the short > version, like the call operator {{()}}. As of now I can only implement this > behavior for the classes that are written by me, via adding a call() method > to class declaration.But in the case of java.util.Collection this is not > possible. So it would be great if Jexl could allow to overload a call() > method in JexlArithmetic class in a way the propertyGet/arrayGet methods are > now can be overloaded. -- This message was sent by Atlassian JIRA (v6.4.14#64029)