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

Rahul Akolkar resolved JEXL-60.
-------------------------------

    Resolution: Fixed

Thanks for your contribution!

The associated changes have been applied to the 2.0 branch in revisions 
r{799777, 799779, 799781, 799782}. Here are the viewvc links for ready 
reference:

  http://svn.apache.org/viewvc?view=rev&revision=799777
  http://svn.apache.org/viewvc?view=rev&revision=799779
  http://svn.apache.org/viewvc?view=rev&revision=799781
  http://svn.apache.org/viewvc?view=rev&revision=799782

Some miscellaneous notes:
 * I don't think JexlContext should really be a generic class, since its best 
to restrict the context map to the of type <String,Object>. I've made the 
change when I applied the patch/tar.
 * It was very hard to ready the pom.xml diff. I've applied two changes (javacc 
plugin upgrade, and added findbugs plugin). If there are more, open a separate 
issue for that.
 * There is an errant file ._SimpleNode.java in parser package in tar.gz 
(ignored).
 * I haven't applied the change that adds to 2.0 language reference to 
xdocs/reference.xml since the new reference (syntax-2.0.xml) is not available 
in the tar.gz. I suspect this was meant to be added. Again, please open a new 
issue for this when needed.

Finally, please double-check all changes above.

Resolving issue as Fixed.


> 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, jexl60.tar.gz, 
> jexl60.tar.gz, 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.
> Since it seemed natural, IntrospectionUtils code has been displaced to 
> MethodKey since this is where parameters type matching has to occur.
> The general method (setter & getter) discovery 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).
> And a 'new' function/operator has been implemented so Jexl can now 
> instantiate objects as well.
> 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/IntrospectionUtils.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