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
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.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.