[ 
https://issues.apache.org/jira/browse/JEXL-60?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Henri Biestro updated JEXL-60:
------------------------------

    Attachment: jexl60.tar.gz

Since the patch can not apply cleanly, here is an alternate in the form of a 
tar.gz.
To produce it (from a Mac), I used:

svn status | grep '^[MA]' | awk '{print $2}' > jexl60.txt
touch jexl60.tar && cat jexl60.txt | xargs tar rvf jexl60.tar
gzip jexl60.tar

The first step creates all modified & added files, the second creates the tar 
of their content and the third zips it.

Untarring this file in the 2.0 trunk should override them with the intended 
content.

> Refactor o.a.c.jexl.util and o.a.c.jexl.util.introspection
> ----------------------------------------------------------
>
>                 Key: JEXL-60
>                 URL: https://issues.apache.org/jira/browse/JEXL-60
>             Project: Commons JEXL
>          Issue Type: Improvement
>    Affects Versions: 2.0
>            Reporter: Henri Biestro
>            Priority: Blocker
>             Fix For: 2.0
>
>         Attachments: JEXL-60.patch, jexl60.tar.gz
>
>
> While working on JEXL-35 and looking at Cobertua reports, it appeared that 
> some classes in jexl.util were not really used.
> It seems that the intention in the original code line was to create 
> specialized executors for each type of property getters and setters but was 
> never completed. Thus, the Uberspectimpl was partly in charge of discovering 
> methods which made things harder to follow and maintain.
> The patch completes the original o.a.c.jexl.util with specialized executors 
> for {property, map, list, duck} setters and getters as well as methods. Since 
> 2.0 already switched the method cache from using string as keys to using 
> MethodKey(s), their usage has been promoted futher up (a method key is a 
> method name and a set of parameters - not arguments!-) so MethodExecutor(s) 
> benefit from their existence.
> The general method (setter & getter) disovery mechanism is reusing the 
> original algorithm, trying the different types and returning the first alive 
> one (aka the first executor for which a java.lang.method could be found).
> The patch is faithfull to the original packages however some code has 
> migrated; most of the Uberspectimpl code has been displaced into 
> o.a.c.jexl.util.Introspector to keep it as simple as possible and still 
> derivable.
> There were also some low-hanging fruits in this whole refactoring:
> The AST nodes (now JexlNode & SimpleNode) carry a volatile value field that 
> allows to use them as cache for executors; this improves performance and 
> allows no locking concurrency. Since we are creating executors, we might as 
> well reuse when possible.
> The Info (debugging info) has been put to use so Jexl can create more 
> meaningfull error message when they occur; putting the JexlEngine in debug 
> mode will make warning/exception messages report their point of creation 
> (file or url for scripts, method for expression).
> It is a huge and worrysome patch but the Checkstyle & Corbertua reports look 
> pretty good. 
> The following classes need to be removed *before* applying the patch:
> src/java/org/apache/commons/jexl/parser/JEXLNode.java
> src/java/org/apache/commons/jexl/Arithmetic.java
> src/java/org/apache/commons/jexl/util/PropertyExecutor.java
> src/java/org/apache/commons/jexl/util/BooleanPropertyExecutor.java
> src/java/org/apache/commons/jexl/util/introspection/UberspectLoggable.java
> src/java/org/apache/commons/jexl/util/GetExecutor.java
> The pom.xml has been modified to use a newer version of the javacc plugin.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to