You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by he...@apache.org on 2015/07/31 16:11:29 UTC

svn commit: r1693604 - in /commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3: annotations/ internal/ internal/introspection/ introspection/

Author: henrib
Date: Fri Jul 31 14:11:28 2015
New Revision: 1693604

URL: http://svn.apache.org/r1693604
Log:
JEXL:
JEXL-171: added a JexlUberspect.getStrategy(...) method

Removed:
    commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/annotations/JexlSet.java
Modified:
    commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java
    commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Operators.java
    commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/SandboxUberspect.java
    commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/Uberspect.java
    commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/introspection/JexlUberspect.java

Modified: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java?rev=1693604&r1=1693603&r2=1693604&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Interpreter.java Fri Jul 31 14:11:28 2015
@@ -1286,8 +1286,7 @@ public class Interpreter extends ParserV
             if (object != null) {
                 // disallow mixing antish variable & bean with same root; avoid ambiguity
                 antish = false;
-            }
-            else if (antish) {
+            } else if (antish) {
                 if (ant == null) {
                     JexlNode first = left.jjtGetChild(0);
                     if (first instanceof ASTIdentifier && ((ASTIdentifier) first).getSymbol() < 0) {
@@ -1629,8 +1628,9 @@ public class Interpreter extends ParserV
         }
         // resolve that property
         Exception xcause = null;
-        List<JexlUberspect.ResolverType> strategy = (node == null) || !(node.jjtGetParent()instanceof ASTArrayAccess)
-                                                     ? JexlUberspect.POJO : JexlUberspect.MAP;
+        List<JexlUberspect.ResolverType> strategy = uberspect.getStrategy(
+                                                    !(node != null && node.jjtGetParent() instanceof ASTArrayAccess),
+                                                    object.getClass());
         JexlPropertyGet vg = uberspect.getPropertyGet(strategy, object, attribute);
         if (vg != null) {
             try {
@@ -1692,15 +1692,16 @@ public class Interpreter extends ParserV
             }
         }
         Exception xcause = null;
-        List<JexlUberspect.ResolverType> strategy = (node == null) || !(node.jjtGetParent()instanceof ASTArrayAccess)
-                                                     ? JexlUberspect.POJO : JexlUberspect.MAP;
+        List<JexlUberspect.ResolverType> strategy = uberspect.getStrategy(
+                                                    !(node != null && node.jjtGetParent() instanceof ASTArrayAccess),
+                                                    object.getClass());
         JexlPropertySet vs = uberspect.getPropertySet(strategy, object, attribute, value);
         // if we can't find an exact match, narrow the value argument and try again
         if (vs == null) {
             // replace all numbers with the smallest type that will fit
             Object[] narrow = {value};
             if (arithmetic.narrowArguments(narrow)) {
-                vs = uberspect.getPropertySet(object, attribute, narrow[0]);
+                vs = uberspect.getPropertySet(strategy, object, attribute, narrow[0]);
             }
         }
         if (vs != null) {

Modified: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Operators.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Operators.java?rev=1693604&r1=1693603&r2=1693604&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Operators.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Operators.java Fri Jul 31 14:11:28 2015
@@ -46,7 +46,7 @@ public class Operators {
     }
 
     /**
-     * Checks whether a method returns a boolean or a Boolean
+     * Checks whether a method returns a boolean or a Boolean.
      * @param vm the JexlMethod (may be null)
      * @return true of false
      */

Modified: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/SandboxUberspect.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/SandboxUberspect.java?rev=1693604&r1=1693603&r2=1693604&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/SandboxUberspect.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/SandboxUberspect.java Fri Jul 31 14:11:28 2015
@@ -107,6 +107,14 @@ public final class SandboxUberspect impl
      * {@inheritDoc}
      */
     @Override
+    public List<ResolverType> getStrategy(boolean db, Class<?> clazz) {
+        return db ? JexlUberspect.POJO : JexlUberspect.MAP;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
     public JexlPropertyGet getPropertyGet(Object obj, Object identifier) {
         return getPropertyGet(POJO, obj, identifier);
     }

Modified: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/Uberspect.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/Uberspect.java?rev=1693604&r1=1693603&r2=1693604&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/Uberspect.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/introspection/Uberspect.java Fri Jul 31 14:11:28 2015
@@ -217,12 +217,22 @@ public class Uberspect implements JexlUb
     }
 
     @Override
+    public List<ResolverType> getStrategy(boolean db, Class<?> clazz) {
+        //return Map.class.isAssignableFrom(clazz)? JexlUberspect.MAP : JexlUberspect.POJO;
+        return db ? JexlUberspect.POJO : JexlUberspect.MAP;
+    }
+
+    @Override
     public JexlPropertyGet getPropertyGet(Object obj, Object identifier) {
         return getPropertyGet(POJO, obj, identifier);
     }
 
     @Override
-    public JexlPropertyGet getPropertyGet(final List<ResolverType> strategy, final Object obj, final Object identifier) {
+    public JexlPropertyGet getPropertyGet(
+            final List<ResolverType> strategy, final Object obj, final Object identifier) {
+        if (strategy == null) {
+            throw new NullPointerException("null property resolver strategy");
+        }
         final Class<?> claz = obj.getClass();
         final String property = AbstractExecutor.castString(identifier);
         final Introspector is = base();
@@ -279,7 +289,11 @@ public class Uberspect implements JexlUb
     }
 
     @Override
-    public JexlPropertySet getPropertySet(final List<ResolverType> strategy, final Object obj, final Object identifier, final Object arg) {
+    public JexlPropertySet getPropertySet(
+            final List<ResolverType> strategy, final Object obj, final Object identifier, final Object arg) {
+        if (strategy == null) {
+            throw new NullPointerException("null property resolver strategy");
+        }
         final Class<?> claz = obj.getClass();
         final String property = AbstractExecutor.castString(identifier);
         final Introspector is = base();

Modified: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/introspection/JexlUberspect.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/introspection/JexlUberspect.java?rev=1693604&r1=1693603&r2=1693604&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/introspection/JexlUberspect.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/introspection/JexlUberspect.java Fri Jul 31 14:11:28 2015
@@ -71,7 +71,7 @@ public interface JexlUberspect {
      * @see JexlUberspect#getPropertyGet
      * @see JexlUberspect#getPropertySet
      */
-    static final List<ResolverType> POJO = Collections.unmodifiableList(Arrays.asList(
+    List<ResolverType> POJO = Collections.unmodifiableList(Arrays.asList(
         ResolverType.PROPERTY,
         ResolverType.MAP,
         ResolverType.LIST,
@@ -83,7 +83,7 @@ public interface JexlUberspect {
     /**
      * A resolver strategy tailored for Maps, favors '[]' over '.'.
      */
-    static final  List<ResolverType> MAP = Collections.unmodifiableList(Arrays.asList(
+    List<ResolverType> MAP = Collections.unmodifiableList(Arrays.asList(
         ResolverType.MAP,
         ResolverType.LIST,
         ResolverType.DUCK,
@@ -133,9 +133,18 @@ public interface JexlUberspect {
     JexlPropertyGet getPropertyGet(Object obj, Object identifier);
 
     /**
+     * Gets the strategy to apply for resolving properties.
+     * <p>Default behavior is to use POJO if db is true, MAP if db is false.
+     * @param db access operator flag, true for dot ('.' ) or false for bracket ('[]')
+     * @param clazz the property owner class
+     * @return the strategy
+     */
+    List<ResolverType> getStrategy(boolean db, Class<?> clazz);
+
+    /**
      * Property getter.
      * <p>Seeks a JexlPropertyGet apropos to an expression like <code>bar.woogie</code>.</p>
-     * @param strategy  the ordered list of resolver types
+     * @param strategy  the ordered list of resolver types, must not be null
      * @param obj the object to get the property from
      * @param identifier property name
      * @return a {@link JexlPropertyGet} or null
@@ -156,7 +165,7 @@ public interface JexlUberspect {
     /**
      * Property setter.
      * <p>Seeks a JelPropertySet apropos to an expression like <code>foo.bar = "geir"</code>.</p>
-     * @param strategy the ordered list of resolver types
+     * @param strategy the ordered list of resolver types, must not be null
      * @param obj the object to get the property from
      * @param identifier property name
      * @param arg value to set
@@ -180,5 +189,4 @@ public interface JexlUberspect {
      */
     JexlArithmetic.Uberspect getArithmetic(JexlArithmetic arithmetic);
 
-
 }
\ No newline at end of file