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