|
[jira] Commented: (JEXL-60) Refactor o.a.c.jexl.util and o.a.c.jexl.util.in: msg#00422issues-commons-apache
[ https://issues.apache.org/jira/browse/JEXL-60?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12736109#action_12736109 ] Henri Biestro commented on JEXL-60: ----------------------------------- Yes, hopefully, no update to come on this one anymore. The only exception would be a committer noting something too odd or confusing. :-) > 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. > 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.
|
|
||||||||||||||||||||||||||
| News | Mail Home | sitemap | FAQ | advertise |