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 2011/11/29 17:19:43 UTC

svn commit: r1207941 [2/5] - in /commons/proper/jexl/trunk: ./ src/main/assembly/ src/main/config/ src/main/java/org/apache/commons/jexl3/ src/main/java/org/apache/commons/jexl3/internal/ src/main/java/org/apache/commons/jexl3/internal/introspection/ s...

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Interpreter.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/Interpreter.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Interpreter.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Interpreter.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/Interpreter.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/Interpreter.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Interpreter.java Tue Nov 29 16:18:59 2011
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 import java.lang.reflect.Array;
 import java.lang.reflect.InvocationTargetException;
@@ -24,73 +24,73 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.jexl2.parser.SimpleNode;
+import org.apache.commons.jexl3.parser.SimpleNode;
 import org.apache.commons.logging.Log;
 
-import org.apache.commons.jexl2.parser.JexlNode;
-import org.apache.commons.jexl2.parser.ASTAdditiveNode;
-import org.apache.commons.jexl2.parser.ASTAdditiveOperator;
-import org.apache.commons.jexl2.parser.ASTAndNode;
-import org.apache.commons.jexl2.parser.ASTAmbiguous;
-import org.apache.commons.jexl2.parser.ASTArrayAccess;
-import org.apache.commons.jexl2.parser.ASTArrayLiteral;
-import org.apache.commons.jexl2.parser.ASTAssignment;
-import org.apache.commons.jexl2.parser.ASTBitwiseAndNode;
-import org.apache.commons.jexl2.parser.ASTBitwiseComplNode;
-import org.apache.commons.jexl2.parser.ASTBitwiseOrNode;
-import org.apache.commons.jexl2.parser.ASTBitwiseXorNode;
-import org.apache.commons.jexl2.parser.ASTBlock;
-import org.apache.commons.jexl2.parser.ASTConstructorNode;
-import org.apache.commons.jexl2.parser.ASTDivNode;
-import org.apache.commons.jexl2.parser.ASTEQNode;
-import org.apache.commons.jexl2.parser.ASTERNode;
-import org.apache.commons.jexl2.parser.ASTEmptyFunction;
-import org.apache.commons.jexl2.parser.ASTFalseNode;
-import org.apache.commons.jexl2.parser.ASTFunctionNode;
-import org.apache.commons.jexl2.parser.ASTForeachStatement;
-import org.apache.commons.jexl2.parser.ASTGENode;
-import org.apache.commons.jexl2.parser.ASTGTNode;
-import org.apache.commons.jexl2.parser.ASTIdentifier;
-import org.apache.commons.jexl2.parser.ASTIfStatement;
-import org.apache.commons.jexl2.parser.ASTJexlScript;
-import org.apache.commons.jexl2.parser.ASTLENode;
-import org.apache.commons.jexl2.parser.ASTLTNode;
-import org.apache.commons.jexl2.parser.ASTMapEntry;
-import org.apache.commons.jexl2.parser.ASTMapLiteral;
-import org.apache.commons.jexl2.parser.ASTMethodNode;
-import org.apache.commons.jexl2.parser.ASTModNode;
-import org.apache.commons.jexl2.parser.ASTMulNode;
-import org.apache.commons.jexl2.parser.ASTNENode;
-import org.apache.commons.jexl2.parser.ASTNRNode;
-import org.apache.commons.jexl2.parser.ASTNotNode;
-import org.apache.commons.jexl2.parser.ASTNullLiteral;
-import org.apache.commons.jexl2.parser.ASTNumberLiteral;
-import org.apache.commons.jexl2.parser.ASTOrNode;
-import org.apache.commons.jexl2.parser.ASTReference;
-import org.apache.commons.jexl2.parser.ASTReferenceExpression;
-import org.apache.commons.jexl2.parser.ASTReturnStatement;
-import org.apache.commons.jexl2.parser.ASTSizeFunction;
-import org.apache.commons.jexl2.parser.ASTSizeMethod;
-import org.apache.commons.jexl2.parser.ASTStringLiteral;
-import org.apache.commons.jexl2.parser.ASTTernaryNode;
-import org.apache.commons.jexl2.parser.ASTTrueNode;
-import org.apache.commons.jexl2.parser.ASTUnaryMinusNode;
-import org.apache.commons.jexl2.parser.ASTWhileStatement;
-import org.apache.commons.jexl2.parser.Node;
-import org.apache.commons.jexl2.parser.ParserVisitor;
-
-import org.apache.commons.jexl2.introspection.Uberspect;
-import org.apache.commons.jexl2.introspection.JexlMethod;
-import org.apache.commons.jexl2.introspection.JexlPropertyGet;
-import org.apache.commons.jexl2.introspection.JexlPropertySet;
-import org.apache.commons.jexl2.parser.ASTVar;
+import org.apache.commons.jexl3.parser.JexlNode;
+import org.apache.commons.jexl3.parser.ASTAdditiveNode;
+import org.apache.commons.jexl3.parser.ASTAdditiveOperator;
+import org.apache.commons.jexl3.parser.ASTAndNode;
+import org.apache.commons.jexl3.parser.ASTAmbiguous;
+import org.apache.commons.jexl3.parser.ASTArrayAccess;
+import org.apache.commons.jexl3.parser.ASTArrayLiteral;
+import org.apache.commons.jexl3.parser.ASTAssignment;
+import org.apache.commons.jexl3.parser.ASTBitwiseAndNode;
+import org.apache.commons.jexl3.parser.ASTBitwiseComplNode;
+import org.apache.commons.jexl3.parser.ASTBitwiseOrNode;
+import org.apache.commons.jexl3.parser.ASTBitwiseXorNode;
+import org.apache.commons.jexl3.parser.ASTBlock;
+import org.apache.commons.jexl3.parser.ASTConstructorNode;
+import org.apache.commons.jexl3.parser.ASTDivNode;
+import org.apache.commons.jexl3.parser.ASTEQNode;
+import org.apache.commons.jexl3.parser.ASTERNode;
+import org.apache.commons.jexl3.parser.ASTEmptyFunction;
+import org.apache.commons.jexl3.parser.ASTFalseNode;
+import org.apache.commons.jexl3.parser.ASTFunctionNode;
+import org.apache.commons.jexl3.parser.ASTForeachStatement;
+import org.apache.commons.jexl3.parser.ASTGENode;
+import org.apache.commons.jexl3.parser.ASTGTNode;
+import org.apache.commons.jexl3.parser.ASTIdentifier;
+import org.apache.commons.jexl3.parser.ASTIfStatement;
+import org.apache.commons.jexl3.parser.ASTJexlScript;
+import org.apache.commons.jexl3.parser.ASTLENode;
+import org.apache.commons.jexl3.parser.ASTLTNode;
+import org.apache.commons.jexl3.parser.ASTMapEntry;
+import org.apache.commons.jexl3.parser.ASTMapLiteral;
+import org.apache.commons.jexl3.parser.ASTMethodNode;
+import org.apache.commons.jexl3.parser.ASTModNode;
+import org.apache.commons.jexl3.parser.ASTMulNode;
+import org.apache.commons.jexl3.parser.ASTNENode;
+import org.apache.commons.jexl3.parser.ASTNRNode;
+import org.apache.commons.jexl3.parser.ASTNotNode;
+import org.apache.commons.jexl3.parser.ASTNullLiteral;
+import org.apache.commons.jexl3.parser.ASTNumberLiteral;
+import org.apache.commons.jexl3.parser.ASTOrNode;
+import org.apache.commons.jexl3.parser.ASTReference;
+import org.apache.commons.jexl3.parser.ASTReferenceExpression;
+import org.apache.commons.jexl3.parser.ASTReturnStatement;
+import org.apache.commons.jexl3.parser.ASTSizeFunction;
+import org.apache.commons.jexl3.parser.ASTSizeMethod;
+import org.apache.commons.jexl3.parser.ASTStringLiteral;
+import org.apache.commons.jexl3.parser.ASTTernaryNode;
+import org.apache.commons.jexl3.parser.ASTTrueNode;
+import org.apache.commons.jexl3.parser.ASTUnaryMinusNode;
+import org.apache.commons.jexl3.parser.ASTWhileStatement;
+import org.apache.commons.jexl3.parser.Node;
+import org.apache.commons.jexl3.parser.ParserVisitor;
+
+import org.apache.commons.jexl3.introspection.Uberspect;
+import org.apache.commons.jexl3.introspection.JexlMethod;
+import org.apache.commons.jexl3.introspection.JexlPropertyGet;
+import org.apache.commons.jexl3.introspection.JexlPropertySet;
+import org.apache.commons.jexl3.parser.ASTVar;
 
 /**
  * An interpreter of JEXL syntax.
  *
  * @since 2.0
  */
-public class Interpreter implements ParserVisitor {
+public class Interpreter extends ParserVisitor {
     /** The logger. */
     protected final Log logger;
     /** The uberspect. */
@@ -265,7 +265,7 @@ public class Interpreter implements Pars
      */
     protected JexlNode findNullOperand(RuntimeException xrt, JexlNode node, Object left, Object right) {
         if (xrt instanceof ArithmeticException
-                && (Object) JexlException.NULL_OPERAND == xrt.getMessage()) {
+            && (Object) JexlException.NULL_OPERAND == xrt.getMessage()) {
             if (left == null) {
                 return node.jjtGetChild(0);
             }
@@ -364,7 +364,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTAdditiveNode node, Object data) {
+    protected Object visit(ASTAdditiveNode node, Object data) {
         /**
          * The pattern for exception mgmt is to let the child*.jjtAccept
          * out of the try/catch loop so that if one fails, the ex will
@@ -399,12 +399,12 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTAdditiveOperator node, Object data) {
+    protected Object visit(ASTAdditiveOperator node, Object data) {
         throw new UnsupportedOperationException("Shoud not be called.");
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTAndNode node, Object data) {
+    protected Object visit(ASTAndNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         try {
             boolean leftValue = arithmetic.toBoolean(left);
@@ -427,7 +427,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTArrayAccess node, Object data) {
+    protected Object visit(ASTArrayAccess node, Object data) {
         // first objectNode is the identifier
         Object object = node.jjtGetChild(0).jjtAccept(this, data);
         // can have multiple nodes - either an expression, integer literal or reference
@@ -446,7 +446,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTArrayLiteral node, Object data) {
+    protected Object visit(ASTArrayLiteral node, Object data) {
         Object literal = node.getLiteral();
         if (literal == null) {
             int childCount = node.jjtGetNumChildren();
@@ -462,7 +462,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTAssignment node, Object data) {
+    protected Object visit(ASTAssignment node, Object data) {
         // left contains the reference to assign to
         int register = -1;
         JexlNode left = node.jjtGetChild(0);
@@ -595,7 +595,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTBitwiseAndNode node, Object data) {
+    protected Object visit(ASTBitwiseAndNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -606,7 +606,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTBitwiseComplNode node, Object data) {
+    protected Object visit(ASTBitwiseComplNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         try {
             return arithmetic.bitwiseComplement(left);
@@ -616,7 +616,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTBitwiseOrNode node, Object data) {
+    protected Object visit(ASTBitwiseOrNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -627,7 +627,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTBitwiseXorNode node, Object data) {
+    protected Object visit(ASTBitwiseXorNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -638,7 +638,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTBlock node, Object data) {
+    protected Object visit(ASTBlock node, Object data) {
         int numChildren = node.jjtGetNumChildren();
         Object result = null;
         for (int i = 0; i < numChildren; i++) {
@@ -648,13 +648,13 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTDivNode node, Object data) {
+    protected Object visit(ASTDivNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
             return arithmetic.divide(left, right);
         } catch (ArithmeticException xrt) {
-            if (!strict && xrt instanceof ArithmeticException) {
+            if (!strict) {
                 return new Double(0.0);
             }
             JexlNode xnode = findNullOperand(xrt, node, left, right);
@@ -663,7 +663,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTEmptyFunction node, Object data) {
+    protected Object visit(ASTEmptyFunction node, Object data) {
         Object o = node.jjtGetChild(0).jjtAccept(this, data);
         if (o == null) {
             return Boolean.TRUE;
@@ -685,7 +685,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTEQNode node, Object data) {
+    protected Object visit(ASTEQNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -696,12 +696,12 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTFalseNode node, Object data) {
+    protected Object visit(ASTFalseNode node, Object data) {
         return Boolean.FALSE;
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTForeachStatement node, Object data) {
+    protected Object visit(ASTForeachStatement node, Object data) {
         Object result = null;
         /* first objectNode is the loop variable */
         ASTReference loopReference = (ASTReference) node.jjtGetChild(0);
@@ -737,7 +737,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTGENode node, Object data) {
+    protected Object visit(ASTGENode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -748,7 +748,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTGTNode node, Object data) {
+    protected Object visit(ASTGTNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -759,7 +759,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTERNode node, Object data) {
+    protected Object visit(ASTERNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -816,7 +816,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTIdentifier node, Object data) {
+    protected Object visit(ASTIdentifier node, Object data) {
         if (isCancelled()) {
             throw new JexlException.Cancel(node);
         }
@@ -841,12 +841,12 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTVar node, Object data) {
+    protected Object visit(ASTVar node, Object data) {
         return visit((ASTIdentifier) node, data);
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTIfStatement node, Object data) {
+    protected Object visit(ASTIfStatement node, Object data) {
         int n = 0;
         try {
             Object result = null;
@@ -873,7 +873,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTNumberLiteral node, Object data) {
+    protected Object visit(ASTNumberLiteral node, Object data) {
         if (data != null && node.isInteger()) {
             return getAttribute(data, node.getLiteral(), node);
         }
@@ -881,7 +881,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTJexlScript node, Object data) {
+    protected Object visit(ASTJexlScript node, Object data) {
         int numChildren = node.jjtGetNumChildren();
         Object result = null;
         for (int i = 0; i < numChildren; i++) {
@@ -892,7 +892,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTLENode node, Object data) {
+    protected Object visit(ASTLENode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -903,7 +903,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTLTNode node, Object data) {
+    protected Object visit(ASTLTNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -914,14 +914,14 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTMapEntry node, Object data) {
+    protected Object visit(ASTMapEntry node, Object data) {
         Object key = node.jjtGetChild(0).jjtAccept(this, data);
         Object value = node.jjtGetChild(1).jjtAccept(this, data);
         return new Object[]{key, value};
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTMapLiteral node, Object data) {
+    protected Object visit(ASTMapLiteral node, Object data) {
         int childCount = node.jjtGetNumChildren();
         Map<Object, Object> map = new HashMap<Object, Object>();
 
@@ -1024,7 +1024,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTMethodNode node, Object data) {
+    protected Object visit(ASTMethodNode node, Object data) {
         // the object to invoke the method on should be in the data argument
         if (data == null) {
             // if the method node is the first child of the (ASTReference) parent,
@@ -1044,7 +1044,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTFunctionNode node, Object data) {
+    protected Object visit(ASTFunctionNode node, Object data) {
         // objectNode 0 is the prefix
         String prefix = node.jjtGetChild(0).image;
         Object namespace = resolveNamespace(prefix, node);
@@ -1054,7 +1054,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTConstructorNode node, Object data) {
+    protected Object visit(ASTConstructorNode node, Object data) {
         if (isCancelled()) {
             throw new JexlException.Cancel(node);
         }
@@ -1107,7 +1107,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTModNode node, Object data) {
+    protected Object visit(ASTModNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -1122,7 +1122,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTMulNode node, Object data) {
+    protected Object visit(ASTMulNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -1134,7 +1134,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTNENode node, Object data) {
+    protected Object visit(ASTNENode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -1146,7 +1146,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTNRNode node, Object data) {
+    protected Object visit(ASTNRNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         Object right = node.jjtGetChild(1).jjtAccept(this, data);
         try {
@@ -1202,18 +1202,18 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTNotNode node, Object data) {
+    protected Object visit(ASTNotNode node, Object data) {
         Object val = node.jjtGetChild(0).jjtAccept(this, data);
         return arithmetic.toBoolean(val) ? Boolean.FALSE : Boolean.TRUE;
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTNullLiteral node, Object data) {
+    protected Object visit(ASTNullLiteral node, Object data) {
         return null;
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTOrNode node, Object data) {
+    protected Object visit(ASTOrNode node, Object data) {
         Object left = node.jjtGetChild(0).jjtAccept(this, data);
         try {
             boolean leftValue = arithmetic.toBoolean(left);
@@ -1236,7 +1236,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTReference node, Object data) {
+    protected Object visit(ASTReference node, Object data) {
         // could be array access, identifier or map literal
         // followed by zero or more ("." and array access, method, size,
         // identifier or integer literal)
@@ -1291,13 +1291,13 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTReferenceExpression node, Object data) {
+    protected Object visit(ASTReferenceExpression node, Object data) {
         ASTArrayAccess upper = node;
         return visit(upper, data);
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTReturnStatement node, Object data) {
+    protected Object visit(ASTReturnStatement node, Object data) {
         Object val = node.jjtGetChild(0).jjtAccept(this, data);
         throw new JexlException.Return(node, null, val);
     }
@@ -1322,7 +1322,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTSizeFunction node, Object data) {
+    protected Object visit(ASTSizeFunction node, Object data) {
         Object val = node.jjtGetChild(0).jjtAccept(this, data);
         if (val == null) {
             throw new JexlException(node, "size() : argument is null", null);
@@ -1331,12 +1331,12 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTSizeMethod node, Object data) {
+    protected Object visit(ASTSizeMethod node, Object data) {
         return Integer.valueOf(sizeOf(node, data));
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTStringLiteral node, Object data) {
+    protected Object visit(ASTStringLiteral node, Object data) {
         if (data != null) {
             return getAttribute(data, node.getLiteral(), node);
         }
@@ -1344,7 +1344,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTTernaryNode node, Object data) {
+    protected Object visit(ASTTernaryNode node, Object data) {
         Object condition = node.jjtGetChild(0).jjtAccept(this, data);
         if (node.jjtGetNumChildren() == 3) {
             if (condition != null && arithmetic.toBoolean(condition)) {
@@ -1361,12 +1361,12 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTTrueNode node, Object data) {
+    protected Object visit(ASTTrueNode node, Object data) {
         return Boolean.TRUE;
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTUnaryMinusNode node, Object data) {
+    protected Object visit(ASTUnaryMinusNode node, Object data) {
         JexlNode valNode = node.jjtGetChild(0);
         Object val = valNode.jjtAccept(this, data);
         try {
@@ -1382,7 +1382,7 @@ public class Interpreter implements Pars
     }
 
     /** {@inheritDoc} */
-    public Object visit(ASTWhileStatement node, Object data) {
+    protected Object visit(ASTWhileStatement node, Object data) {
         Object result = null;
         /* first objectNode is the expression */
         Node expressionNode = node.jjtGetChild(0);
@@ -1587,7 +1587,7 @@ public class Interpreter implements Pars
      * @param data the data
      * @return does not return
      */
-    public Object visit(SimpleNode node, Object data) {
+    protected Object visit(SimpleNode node, Object data) {
         throw new UnsupportedOperationException("Not supported yet.");
     }
 
@@ -1597,7 +1597,7 @@ public class Interpreter implements Pars
      * @param data the data
      * @return does not return
      */
-    public Object visit(ASTAmbiguous node, Object data) {
+    protected Object visit(ASTAmbiguous node, Object data) {
         throw new UnsupportedOperationException("unexpected type of node");
     }
 }

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Interpreter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlArithmetic.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlArithmetic.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlArithmetic.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlArithmetic.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlArithmetic.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlArithmetic.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlArithmetic.java Tue Nov 29 16:18:59 2011
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
@@ -111,7 +111,7 @@ public class JexlArithmetic {
      * @param number the big decimal to round
      * @return the rounded big decimal
      */
-    public BigDecimal roundBigDecimal(final BigDecimal number) {
+    protected BigDecimal roundBigDecimal(final BigDecimal number) {
         int mscale = getMathScale();
         if (mscale >= 0) {
             return number.setScale(mscale, getMathContext().getRoundingMode());
@@ -193,6 +193,85 @@ public class JexlArithmetic {
                 || o instanceof Short
                 || o instanceof Character;
     }
+    
+    /**
+     * Whether we consider the narrow class as a potential candidate for narrowing the source.
+     * @param narrow the target narrow class
+     * @param source the orginal source class
+     * @return true if attempt to narrow source to target is accepted
+     */
+    protected boolean narrowAccept(Class<?> narrow, Class<?> source) {
+        return narrow == null || narrow.equals(source);
+    }
+
+    /**
+     * Given a Number, return back the value attempting to narrow it to a target class.
+     * @param original the original number
+     * @param narrow the attempted target class
+     * @return  the narrowed number or the source if no narrowing was possible
+     */
+    protected Number narrowNumber(Number original, Class<?> narrow) {
+        if (original == null) {
+            return original;
+        }
+        Number result = original;
+        if (original instanceof BigDecimal) {
+            BigDecimal bigd = (BigDecimal) original;
+            // if it's bigger than a double it can't be narrowed
+            if (bigd.compareTo(BIGD_DOUBLE_MAX_VALUE) > 0) {
+                return original;
+            } else {
+                try {
+                    long l = bigd.longValueExact();
+                    // coerce to int when possible (int being so often used in method parms)
+                    if (narrowAccept(narrow, Integer.class)
+                            && l <= Integer.MAX_VALUE
+                            && l >= Integer.MIN_VALUE) {
+                        return Integer.valueOf((int) l);
+                    } else if (narrowAccept(narrow, Long.class)) {
+                        return Long.valueOf(l);
+                    }
+                } catch (ArithmeticException xa) {
+                    // ignore, no exact value possible
+                }
+            }
+        }
+        if (original instanceof Double || original instanceof Float || original instanceof BigDecimal) {
+            double value = original.doubleValue();
+            if (narrowAccept(narrow, Float.class)
+                    && value <= Float.MAX_VALUE
+                    && value >= Float.MIN_VALUE) {
+                result = Float.valueOf(result.floatValue());
+            }
+            // else it fits in a double only
+        } else {
+            if (original instanceof BigInteger) {
+                BigInteger bigi = (BigInteger) original;
+                // if it's bigger than a Long it can't be narrowed
+                if (bigi.compareTo(BIGI_LONG_MAX_VALUE) > 0
+                        || bigi.compareTo(BIGI_LONG_MIN_VALUE) < 0) {
+                    return original;
+                }
+            }
+            long value = original.longValue();
+            if (narrowAccept(narrow, Byte.class)
+                    && value <= Byte.MAX_VALUE
+                    && value >= Byte.MIN_VALUE) {
+                // it will fit in a byte
+                result = Byte.valueOf((byte) value);
+            } else if (narrowAccept(narrow, Short.class)
+                    && value <= Short.MAX_VALUE
+                    && value >= Short.MIN_VALUE) {
+                result = Short.valueOf((short) value);
+            } else if (narrowAccept(narrow, Integer.class)
+                    && value <= Integer.MAX_VALUE
+                    && value >= Integer.MIN_VALUE) {
+                result = Integer.valueOf((int) value);
+            }
+            // else it fits in a long
+        }
+        return result;
+    }
 
     /**
      * Given a BigInteger, narrow it to an Integer or Long if it fits and the arguments
@@ -819,7 +898,7 @@ public class JexlArithmetic {
             controlNullOperand();
             return 0;
         } else if (val instanceof Double) {
-            if (!Double.isNaN((Double) val)) {
+            if (!Double.isNaN(((Double) val).doubleValue())) {
                 return 0;
             } else {
                 return ((Double) val).intValue();
@@ -852,7 +931,7 @@ public class JexlArithmetic {
             controlNullOperand();
             return 0L;
         } else if (val instanceof Double) {
-            if (!Double.isNaN((Double) val)) {
+            if (!Double.isNaN(((Double) val).doubleValue())) {
                 return 0;
             } else {
                 return ((Double) val).longValue();
@@ -889,7 +968,7 @@ public class JexlArithmetic {
         } else if (val instanceof BigInteger) {
             return (BigInteger) val;
         } else if (val instanceof Double) {
-            if (!Double.isNaN((Double) val)) {
+            if (!Double.isNaN(((Double) val).doubleValue())) {
                 return new BigInteger(val.toString());
             } else {
                 return BigInteger.ZERO;
@@ -932,7 +1011,7 @@ public class JexlArithmetic {
             }
             return roundBigDecimal(new BigDecimal(string, getMathContext()));
         } else if (val instanceof Double) {
-            if (!Double.isNaN((Double) val)) {
+            if (!Double.isNaN(((Double) val).doubleValue())) {
                 return roundBigDecimal(new BigDecimal(val.toString(), getMathContext()));
             } else {
                 return BigDecimal.ZERO;
@@ -997,7 +1076,7 @@ public class JexlArithmetic {
             return "";
         } else if (val instanceof Double) {
             Double dval = (Double) val;
-            if (Double.isNaN(dval)) {
+            if (Double.isNaN(dval.doubleValue())) {
                 return "";
             } else {
                 return dval.toString();
@@ -1021,82 +1100,4 @@ public class JexlArithmetic {
         return narrowNumber(original, null);
     }
 
-    /**
-     * Whether we consider the narrow class as a potential candidate for narrowing the source.
-     * @param narrow the target narrow class
-     * @param source the orginal source class
-     * @return true if attempt to narrow source to target is accepted
-     */
-    protected boolean narrowAccept(Class<?> narrow, Class<?> source) {
-        return narrow == null || narrow.equals(source);
-    }
-
-    /**
-     * Given a Number, return back the value attempting to narrow it to a target class.
-     * @param original the original number
-     * @param narrow the attempted target class
-     * @return  the narrowed number or the source if no narrowing was possible
-     */
-    protected Number narrowNumber(Number original, Class<?> narrow) {
-        if (original == null) {
-            return original;
-        }
-        Number result = original;
-        if (original instanceof BigDecimal) {
-            BigDecimal bigd = (BigDecimal) original;
-            // if it's bigger than a double it can't be narrowed
-            if (bigd.compareTo(BIGD_DOUBLE_MAX_VALUE) > 0) {
-                return original;
-            } else {
-                try {
-                    long l = bigd.longValueExact();
-                    // coerce to int when possible (int being so often used in method parms)
-                    if (narrowAccept(narrow, Integer.class)
-                            && l <= Integer.MAX_VALUE
-                            && l >= Integer.MIN_VALUE) {
-                        return Integer.valueOf((int) l);
-                    } else if (narrowAccept(narrow, Long.class)) {
-                        return Long.valueOf(l);
-                    }
-                } catch (ArithmeticException xa) {
-                    // ignore, no exact value possible
-                }
-            }
-        }
-        if (original instanceof Double || original instanceof Float || original instanceof BigDecimal) {
-            double value = original.doubleValue();
-            if (narrowAccept(narrow, Float.class)
-                    && value <= Float.MAX_VALUE
-                    && value >= Float.MIN_VALUE) {
-                result = Float.valueOf(result.floatValue());
-            }
-            // else it fits in a double only
-        } else {
-            if (original instanceof BigInteger) {
-                BigInteger bigi = (BigInteger) original;
-                // if it's bigger than a Long it can't be narrowed
-                if (bigi.compareTo(BIGI_LONG_MAX_VALUE) > 0
-                        || bigi.compareTo(BIGI_LONG_MIN_VALUE) < 0) {
-                    return original;
-                }
-            }
-            long value = original.longValue();
-            if (narrowAccept(narrow, Byte.class)
-                    && value <= Byte.MAX_VALUE
-                    && value >= Byte.MIN_VALUE) {
-                // it will fit in a byte
-                result = Byte.valueOf((byte) value);
-            } else if (narrowAccept(narrow, Short.class)
-                    && value <= Short.MAX_VALUE
-                    && value >= Short.MIN_VALUE) {
-                result = Short.valueOf((short) value);
-            } else if (narrowAccept(narrow, Integer.class)
-                    && value <= Integer.MAX_VALUE
-                    && value >= Integer.MIN_VALUE) {
-                result = Integer.valueOf((int) value);
-            }
-            // else it fits in a long
-        }
-        return result;
-    }
 }
\ No newline at end of file

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlArithmetic.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlContext.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlContext.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlContext.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlContext.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlContext.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlContext.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlContext.java Tue Nov 29 16:18:59 2011
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 /**
  * Manages variables which can be referenced in a JEXL expression.

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlContext.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlEngine.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlEngine.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlEngine.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlEngine.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlEngine.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlEngine.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlEngine.java Tue Nov 29 16:18:59 2011
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -37,18 +37,17 @@ import java.util.Map.Entry;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import org.apache.commons.jexl2.parser.ParseException;
-import org.apache.commons.jexl2.parser.Parser;
-import org.apache.commons.jexl2.parser.JexlNode;
-import org.apache.commons.jexl2.parser.TokenMgrError;
-import org.apache.commons.jexl2.parser.ASTJexlScript;
-
-import org.apache.commons.jexl2.introspection.Uberspect;
-import org.apache.commons.jexl2.introspection.UberspectImpl;
-import org.apache.commons.jexl2.introspection.JexlMethod;
-import org.apache.commons.jexl2.parser.ASTArrayAccess;
-import org.apache.commons.jexl2.parser.ASTIdentifier;
-import org.apache.commons.jexl2.parser.ASTReference;
+import org.apache.commons.jexl3.parser.ParseException;
+import org.apache.commons.jexl3.parser.Parser;
+import org.apache.commons.jexl3.parser.JexlNode;
+import org.apache.commons.jexl3.parser.TokenMgrError;
+import org.apache.commons.jexl3.parser.ASTJexlScript;
+
+import org.apache.commons.jexl3.introspection.Uberspect;
+import org.apache.commons.jexl3.introspection.JexlMethod;
+import org.apache.commons.jexl3.parser.ASTArrayAccess;
+import org.apache.commons.jexl3.parser.ASTIdentifier;
+import org.apache.commons.jexl3.parser.ASTReference;
 
 /**
  * <p>
@@ -126,7 +125,8 @@ public class JexlEngine {
      */
     private static final class UberspectHolder {
         /** The default uberspector that handles all introspection patterns. */
-        private static final Uberspect UBERSPECT = new UberspectImpl(LogFactory.getLog(JexlEngine.class));
+        private static final Uberspect UBERSPECT =
+                new org.apache.commons.jexl3.internal.introspection.Uberspect(LogFactory.getLog(JexlEngine.class));
 
         /** Non-instantiable. */
         private UberspectHolder() {
@@ -216,7 +216,7 @@ public class JexlEngine {
         if (logger == null || logger.equals(LogFactory.getLog(JexlEngine.class))) {
             return UberspectHolder.UBERSPECT;
         }
-        return new UberspectImpl(logger);
+        return new org.apache.commons.jexl3.internal.introspection.Uberspect(logger);
     }
 
     /**
@@ -280,7 +280,7 @@ public class JexlEngine {
      * as null.
      * <p>This method is <em>not</em> thread safe; it should be called as an optional step of the JexlEngine
      * initialization code before expression creation &amp; evaluation.</p>
-     * <p>As of 2.1, you need a JexlThreadedArithmetic instance for this call to also modify the JexlArithmetic
+     * <p>As of 3.0, you need a JexlThreadedArithmetic instance for this call to also modify the JexlArithmetic
      * leniency behavior.</p>
      * @see JexlEngine#setSilent
      * @see JexlEngine#setDebug
@@ -397,7 +397,7 @@ public class JexlEngine {
      * @return the script instance
      */
     protected Expression createExpression(ASTJexlScript tree, String text) {
-        return new ExpressionImpl(this, text, tree);
+        return new JexlScript(this, text, tree);
     }
 
     /**
@@ -443,7 +443,7 @@ public class JexlEngine {
      * @return A {@link Script} which can be executed using a {@link JexlContext}.
      * @throws JexlException if there is a problem parsing the script.
      */
-    public Script createScript(String scriptText) {
+    public JexlScript createScript(String scriptText) {
         return createScript(scriptText, null, null);
     }
 
@@ -456,7 +456,7 @@ public class JexlEngine {
      * @return A {@link Script} which can be executed using a {@link JexlContext}.
      * @throws JexlException if there is a problem parsing the script.
      */
-    public Script createScript(String scriptText, String... names) {
+    public JexlScript createScript(String scriptText, String... names) {
         return createScript(scriptText, null, names);
     }
 
@@ -472,7 +472,7 @@ public class JexlEngine {
      * @return A {@link Script} which can be executed using a {@link JexlContext}.
      * @throws JexlException if there is a problem parsing the script.
      */
-    public Script createScript(String scriptText, JexlInfo info, String[] names) {
+    public JexlScript createScript(String scriptText, JexlInfo info, String[] names) {
         if (scriptText == null) {
             throw new NullPointerException("scriptText is null");
         }
@@ -487,8 +487,8 @@ public class JexlEngine {
      * @param tree the parse AST tree
      * @return the script instance
      */
-    protected Script createScript(ASTJexlScript tree, String text) {
-        return new ExpressionImpl(this, text, tree);
+    protected JexlScript createScript(ASTJexlScript tree, String text) {
+        return new JexlScript(this, text, tree);
     }
 
     /**
@@ -664,11 +664,16 @@ public class JexlEngine {
     public Object invokeMethod(Object obj, String meth, Object... args) {
         JexlException xjexl = null;
         Object result = null;
-        JexlInfo info = debugInfo();
+        final JexlInfo info = jexlInfo();
+        JexlInfo.Handle handle = new JexlInfo.Handle() {
+            public JexlInfo jexlInfo() {
+                return info;
+            }
+        };
         try {
-            JexlMethod method = uberspect.getMethod(obj, meth, args, info);
+            JexlMethod method = uberspect.getMethod(obj, meth, args, handle);
             if (method == null && arithmetic.narrowArguments(args)) {
-                method = uberspect.getMethod(obj, meth, args, info);
+                method = uberspect.getMethod(obj, meth, args, handle);
             }
             if (method != null) {
                 result = method.invoke(obj, args);
@@ -722,11 +727,16 @@ public class JexlEngine {
     protected Object doCreateInstance(Object clazz, Object... args) {
         JexlException xjexl = null;
         Object result = null;
-        JexlInfo info = debugInfo();
+        final JexlInfo info = jexlInfo();
+        JexlInfo.Handle handle = new JexlInfo.Handle() {
+            public JexlInfo jexlInfo() {
+                return info;
+            }
+        };
         try {
-            JexlMethod ctor = uberspect.getConstructor(clazz, args, info);
+            JexlMethod ctor = uberspect.getConstructor(clazz, args, handle);
             if (ctor == null && arithmetic.narrowArguments(args)) {
-                ctor = uberspect.getConstructor(clazz, args, info);
+                ctor = uberspect.getConstructor(clazz, args, handle);
             }
             if (ctor != null) {
                 result = ctor.invoke(clazz, args);
@@ -877,14 +887,10 @@ public class JexlEngine {
      * @return the set of variables, each as a list of strings (ant-ish variables use more than 1 string)
      *         or the empty set if no variables are used
      */
-    public Set<List<String>> getVariables(Script script) {
-        if (script instanceof ExpressionImpl) {
-            Set<List<String>> refs = new LinkedHashSet<List<String>>();
-            getVariables(((ExpressionImpl) script).script, refs, null);
-            return refs;
-        } else {
-            return Collections.<List<String>>emptySet();
-        }
+    protected Set<List<String>> getVariables(JexlNode script) {
+        Set<List<String>> refs = new LinkedHashSet<List<String>>();
+        getVariables(script, refs, null);
+        return refs;
     }
 
     /**
@@ -952,30 +958,25 @@ public class JexlEngine {
      * Gets the array of parameters from a script.
      * @param script the script
      * @return the parameters which may be empty (but not null) if no parameters were defined
+     * @since 3.0
      */
-    protected String[] getParameters(Script script) {
-        if (script instanceof ExpressionImpl) {
-            return ((ExpressionImpl) script).getParameters();
-        } else {
-            return new String[0];
-        }
+    protected String[] getParameters(JexlScript script) {
+        return script.getParameters();
     }
 
     /**
      * Gets the array of local variable from a script.
      * @param script the script
      * @return the local variables array which may be empty (but not null) if no local variables were defined
+     * @since 3.0
      */
-    protected String[] getLocalVariables(Script script) {
-        if (script instanceof ExpressionImpl) {
-            return ((ExpressionImpl) script).getLocalVariables();
-        } else {
-            return new String[0];
-        }
+    protected String[] getLocalVariables(JexlScript script) {
+        return script.getLocalVariables();
     }
 
     /**
      * A script scope, stores the declaration of parameters and local variables.
+     * @since 3.0
      */
     public static final class Scope {
         /**
@@ -1103,7 +1104,7 @@ public class JexlEngine {
                 String[] pa = new String[parms];
                 int p = 0;
                 for (Map.Entry<String, Integer> entry : namedRegisters.entrySet()) {
-                    if (entry.getValue() < parms) {
+                    if (entry.getValue().intValue() < parms) {
                         pa[p++] = entry.getKey();
                     }
                 }
@@ -1122,7 +1123,7 @@ public class JexlEngine {
                 String[] pa = new String[parms];
                 int p = 0;
                 for (Map.Entry<String, Integer> entry : namedRegisters.entrySet()) {
-                    if (entry.getValue() >= parms) {
+                    if (entry.getValue().intValue() >= parms) {
                         pa[p++] = entry.getKey();
                     }
                 }
@@ -1135,6 +1136,7 @@ public class JexlEngine {
 
     /**
      * A call frame, created from a scope, stores the arguments and local variables as "registers".
+     * @since 3.0
      */
     public static final class Frame {
         /** Registers or arguments. */
@@ -1178,7 +1180,7 @@ public class JexlEngine {
     protected ASTJexlScript parse(CharSequence expression, JexlInfo info, Scope frame) {
         String expr = cleanExpression(expression);
         ASTJexlScript script = null;
-        DebugInfo dbgInfo = null;
+        JexlInfo jexlInfo = null;
         synchronized (parser) {
             if (cache != null) {
                 script = cache.get(expr);
@@ -1193,14 +1195,12 @@ public class JexlEngine {
                 Reader reader = new StringReader(expr);
                 // use first calling method of JexlEngine as debug info
                 if (info == null) {
-                    dbgInfo = debugInfo();
-                } else if (info instanceof DebugInfo) {
-                    dbgInfo = (DebugInfo) info;
+                    jexlInfo = jexlInfo();
                 } else {
-                    dbgInfo = info.debugInfo();
+                    jexlInfo = info;
                 }
                 parser.setFrame(frame);
-                script = parser.parse(reader, dbgInfo);
+                script = parser.parse(reader, jexlInfo);
                 // reaccess in case local variables have been declared
                 frame = parser.getFrame();
                 if (frame != null) {
@@ -1210,9 +1210,9 @@ public class JexlEngine {
                     cache.put(expr, script);
                 }
             } catch (TokenMgrError xtme) {
-                throw new JexlException.Tokenization(dbgInfo, expression, xtme);
+                throw new JexlException.Tokenization(jexlInfo, expression, xtme);
             } catch (ParseException xparse) {
-                throw new JexlException.Parsing(dbgInfo, expression, xparse);
+                throw new JexlException.Parsing(jexlInfo, expression, xparse);
             } finally {
                 parser.setFrame(null);
             }
@@ -1227,8 +1227,8 @@ public class JexlEngine {
      * @param c column number
      * @return a JexlInfo instance
      */
-    protected DebugInfo createInfo(String fn, int l, int c) {
-        return new DebugInfo(fn, l, c);
+    protected JexlInfo createInfo(String fn, int l, int c) {
+        return new JexlInfo(fn, l, c);
     }
 
     /**
@@ -1237,8 +1237,8 @@ public class JexlEngine {
      * not owned by JexlEngine, UnifiedJEXL or {Script,Expression}Factory.</p>
      * @return an Info if debug is set, null otherwise
      */
-    protected DebugInfo debugInfo() {
-        DebugInfo info = null;
+    protected JexlInfo jexlInfo() {
+        JexlInfo info = null;
         if (debug) {
             Throwable xinfo = new Throwable();
             xinfo.fillInStackTrace();

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlEngine.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlException.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlException.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlException.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlException.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlException.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlException.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlException.java Tue Nov 29 16:18:59 2011
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.UndeclaredThrowableException;
-import org.apache.commons.jexl2.parser.JexlNode;
-import org.apache.commons.jexl2.parser.ParseException;
-import org.apache.commons.jexl2.parser.TokenMgrError;
+import org.apache.commons.jexl3.parser.JexlNode;
+import org.apache.commons.jexl3.parser.ParseException;
+import org.apache.commons.jexl3.parser.TokenMgrError;
 
 /**
  * Wraps any error that might occur during interpretation of a script or expression.
@@ -46,7 +46,7 @@ public class JexlException extends Runti
     public JexlException(JexlNode node, String msg) {
         super(msg);
         mark = node;
-        info = node != null ? node.debugInfo() : null;
+        info = node != null ? node.jexlInfo() : null;
 
     }
 
@@ -59,7 +59,7 @@ public class JexlException extends Runti
     public JexlException(JexlNode node, String msg, Throwable cause) {
         super(msg, unwrap(cause));
         mark = node;
-        info = node != null ? node.debugInfo() : null;
+        info = node != null ? node.jexlInfo() : null;
     }
 
     /**
@@ -115,7 +115,7 @@ public class JexlException extends Runti
      * @return the formatted message
      */
     protected String parserError(String prefix, String expr) {
-        int begin = info.debugInfo().getColumn();
+        int begin = info.getColumn();
         int end = begin + MIN_EXCHARLOC;
         begin -= MIN_EXCHARLOC;
         if (begin < 0) {
@@ -133,6 +133,7 @@ public class JexlException extends Runti
 
     /**
      * Thrown when tokenization fails.
+     * @since 3.0
      */
     public static class Tokenization extends JexlException {
         /**
@@ -151,14 +152,14 @@ public class JexlException extends Runti
          * @param cause the cause
          * @return the info to use
          */
-        private static DebugInfo merge(JexlInfo node, TokenMgrError cause) {
-            DebugInfo dbgn = node != null ? node.debugInfo() : null;
+        private static JexlInfo merge(JexlInfo node, TokenMgrError cause) {
+            JexlInfo dbgn = node != null ? node : null;
             if (cause == null) {
                 return dbgn;
             } else if (dbgn == null) {
-                return new DebugInfo("", cause.getLine(), cause.getColumn());
+                return new JexlInfo("", cause.getLine(), cause.getColumn());
             } else {
-                return new DebugInfo(dbgn.getName(), cause.getLine(), cause.getColumn());
+                return new JexlInfo(dbgn.getName(), cause.getLine(), cause.getColumn());
             }
         }
 
@@ -177,6 +178,7 @@ public class JexlException extends Runti
 
     /**
      * Thrown when parsing fails.
+     * @since 3.0
      */
     public static class Parsing extends JexlException {
         /**
@@ -195,14 +197,14 @@ public class JexlException extends Runti
          * @param cause the cause
          * @return the info to use
          */
-        private static DebugInfo merge(JexlInfo node, ParseException cause) {
-            DebugInfo dbgn = node != null ? node.debugInfo() : null;
+        private static JexlInfo merge(JexlInfo node, ParseException cause) {
+            JexlInfo dbgn = node != null ? node : null;
             if (cause == null) {
                 return dbgn;
             } else if (dbgn == null) {
-                return new DebugInfo("", cause.getLine(), cause.getColumn());
+                return new JexlInfo("", cause.getLine(), cause.getColumn());
             } else {
-                return new DebugInfo(dbgn.getName(), cause.getLine(), cause.getColumn());
+                return new JexlInfo(dbgn.getName(), cause.getLine(), cause.getColumn());
             }
         }
 
@@ -221,6 +223,7 @@ public class JexlException extends Runti
 
     /**
      * Thrown when a variable is unknown.
+     * @since 3.0
      */
     public static class Variable extends JexlException {
         /**
@@ -247,6 +250,7 @@ public class JexlException extends Runti
 
     /**
      * Thrown when a property is unknown.
+     * @since 3.0
      */
     public static class Property extends JexlException {
         /**
@@ -273,6 +277,7 @@ public class JexlException extends Runti
 
     /**
      * Thrown when a method or ctor is unknown, ambiguous or inaccessible.
+     * @since 3.0
      */
     public static class Method extends JexlException {
         /**
@@ -299,6 +304,7 @@ public class JexlException extends Runti
 
     /**
      * Thrown to return a value.
+     * @since 3.0
      */
     protected static class Return extends JexlException {
         /** The returned value. */
@@ -325,6 +331,7 @@ public class JexlException extends Runti
 
     /**
      * Thrown to cancel a script execution.
+     * @since 3.0
      */
     protected static class Cancel extends JexlException {
         /**
@@ -372,7 +379,7 @@ public class JexlException extends Runti
         Debugger dbg = new Debugger();
         StringBuilder msg = new StringBuilder();
         if (info != null) {
-            msg.append(info.debugString());
+            msg.append(info.toString());
         }
         if (dbg.debug(mark)) {
             msg.append("![");

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlInfo.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlInfo.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlInfo.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlInfo.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlInfo.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlInfo.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlInfo.java Tue Nov 29 16:18:59 2011
@@ -14,21 +14,84 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
+
 
 /**
- * Interface for objects carrying information usefull to debugging.
- * @since 1.0
+ * Helper class to carry in info such as a url/file name, line and column for
+ * debugging information reporting.
  */
-public interface JexlInfo {
+public class JexlInfo {
+    /** line number. */
+    protected final int line;
+    /** column number. */
+    protected final int column;
+    /** name. */
+    protected final String name;
+    
+    /** 
+     * Create info.
+     * @param tn template name
+     * @param l line number
+     * @param c column
+     */
+    public JexlInfo(String tn, int l, int c) {
+        name = tn;
+        line = l;
+        column = c;
+    }
+    
     /**
-     * Formats this information for debugging purpose.
-     * @return a human readable string.
+     * Denotes objects that can expose a JexlInfo instance.
      */
-    String debugString();
+    public interface Handle {
+        /**
+         * Gets the associated JexlInfo instance.
+         * @return the info
+         */
+        JexlInfo jexlInfo();
+    }
+
     /**
-     * Gets the underlying debugging information.
-     * @return a debug info instance
+     * Formats this info in the form 'name&#064;line:column'.
+     * @return the formatted info
      */
-    DebugInfo debugInfo();
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(name != null? name : "");
+        if (line > 0) {
+            sb.append("@");
+            sb.append(line);
+            if (column > 0) {
+                sb.append(":");
+                sb.append(column);
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Gets the file/script/url name.
+     * @return template name
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Gets the line number.
+     * @return line number.
+     */
+    public int getLine() {
+        return line;
+    }
+
+    /**
+     * Gets the column number.
+     * @return the column.
+     */
+    public int getColumn() {
+        return column;
+    }
 }
+

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlInfo.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlScript.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/ExpressionImpl.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlScript.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlScript.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/ExpressionImpl.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/ExpressionImpl.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlScript.java Tue Nov 29 16:18:59 2011
@@ -14,21 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.Callable;
 
-import org.apache.commons.jexl2.parser.ASTJexlScript;
+import org.apache.commons.jexl3.parser.ASTJexlScript;
 
 /**
- * Instances of ExpressionImpl are created by the {@link JexlEngine},
+ * Instances of JexlScript are created by the {@link JexlEngine},
  * and this is the default implementation of the {@link Expression} and
  * {@link Script} interface.
- * @since 1.0
+ * @since 3.0
  */
-public class ExpressionImpl implements Expression, Script {
+public class JexlScript implements Expression, Script {
     /** The engine for this expression. */
     protected final JexlEngine jexl;
     /**
@@ -47,7 +47,7 @@ public class ExpressionImpl implements E
      * @param expr the expression.
      * @param ref the parsed expression.
      */
-    protected ExpressionImpl(JexlEngine engine, String expr, ASTJexlScript ref) {
+    protected JexlScript(JexlEngine engine, String expr, ASTJexlScript ref) {
         jexl = engine;
         expression = expr;
         script = ref;
@@ -117,35 +117,50 @@ public class ExpressionImpl implements E
     }
 
     /**
-     * {@inheritDoc}
+     * Gets this script parameters.
+     * @return the parameters or null
+     * @since 3.0
      */
     public String[] getParameters() {
         return script.getParameters();
     }
 
     /**
-     * {@inheritDoc}
+     * Gets this script local variables.
+     * @return the local variables or null
      */
     public String[] getLocalVariables() {
         return script.getLocalVariables();
     }
 
     /**
-     * {@inheritDoc}
+     * Gets this script variables.
+     * <p>Note that since variables can be in an ant-ish form (ie foo.bar.quux), each variable is returned as 
+     * a list of strings where each entry is a fragment of the variable ({"foo", "bar", "quux"} in the example.</p>
+     * @return the variables or null
      */
     public Set<List<String>> getVariables() {
-        return jexl.getVariables(this);
+        return jexl.getVariables(script);
     }
 
     /**
-     * {@inheritDoc}
+     * Creates a Callable from this script.
+     * <p>This allows to submit it to an executor pool and provides support for asynchronous calls.</p>
+     * <p>The interpreter will handle interruption/cancellation gracefully if needed.</p>
+     * @param context the context
+     * @return the callable
      */
     public Callable<Object> callable(JexlContext context) {
         return callable(context, (Object[]) null);
     }
 
     /**
-     * {@inheritDoc}
+     * Creates a Callable from this script.
+     * <p>This allows to submit it to an executor pool and provides support for asynchronous calls.</p>
+     * <p>The interpreter will handle interruption/cancellation gracefully if needed.</p>
+     * @param context the context
+     * @param args the script arguments
+     * @return the callable
      */
     public Callable<Object> callable(JexlContext context, Object... args) {
         final Interpreter interpreter = jexl.createInterpreter(context);
@@ -161,8 +176,6 @@ public class ExpressionImpl implements E
                 }
                 return result;
             }
-
         };
     }
-
 }
\ No newline at end of file

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlScript.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlScript.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlThreadedArithmetic.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlThreadedArithmetic.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlThreadedArithmetic.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlThreadedArithmetic.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlThreadedArithmetic.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/JexlThreadedArithmetic.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlThreadedArithmetic.java Tue Nov 29 16:18:59 2011
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 import java.math.MathContext;
 
 /**
  * A derived arithmetic that allows different threads to operate with
  * different strict/lenient/math modes using the same JexlEngine.
+ * @since 3.0
  */
 public class JexlThreadedArithmetic extends JexlArithmetic {
     

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/JexlThreadedArithmetic.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Main.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/Main.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Main.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Main.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/Main.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/Main.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Main.java Tue Nov 29 16:18:59 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 import java.io.BufferedReader;
 import java.io.File;

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Main.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Main.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/MapContext.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/MapContext.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/MapContext.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/MapContext.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/MapContext.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/MapContext.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/MapContext.java Tue Nov 29 16:18:59 2011
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 import java.util.HashMap;
 import java.util.Map;

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/MapContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/NamespaceResolver.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/NamespaceResolver.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/NamespaceResolver.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/NamespaceResolver.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/NamespaceResolver.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/NamespaceResolver.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/NamespaceResolver.java Tue Nov 29 16:18:59 2011
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 /**
  * 
@@ -28,6 +28,7 @@ package org.apache.commons.jexl2;
  * JEXL itself reserves 'jexl' and 'ujexl' as namespaces for internal purpose; resolving those may lead to unexpected
  * results.
  * </p>
+ * @since 3.0
  */
 public interface NamespaceResolver {
     /**

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/NamespaceResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/ObjectContext.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/ObjectContext.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/ObjectContext.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/ObjectContext.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/ObjectContext.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/ObjectContext.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/ObjectContext.java Tue Nov 29 16:18:59 2011
@@ -14,11 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 /**
  * Wraps an Object as a Jexl context.
  * @param <T> the wrapped object type to use
+ * @since 3.0
  */
 public class ObjectContext<T> implements JexlContext {
     /** The property solving jexl engine. */

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/ObjectContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/ReadonlyContext.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/ReadonlyContext.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/ReadonlyContext.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/ReadonlyContext.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/ReadonlyContext.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/ReadonlyContext.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/ReadonlyContext.java Tue Nov 29 16:18:59 2011
@@ -14,10 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 /**
  * A readonly context wrapper.
+ * @since 3.0
  */
 public final class ReadonlyContext implements JexlContext {
     /** The wrapped context. */

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/ReadonlyContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Script.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/Script.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Script.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Script.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/Script.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/Script.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Script.java Tue Nov 29 16:18:59 2011
@@ -14,11 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
-
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.Callable;
+package org.apache.commons.jexl3;
 
 /**
  * <p>A JEXL Script.</p>
@@ -51,6 +47,7 @@ public interface Script {
      * @param args the arguments
      * @return The result of this script, usually the result of 
      *      the last statement.
+     * @since 3.0
      */
     Object execute(JexlContext context, Object... args);
 
@@ -59,43 +56,4 @@ public interface Script {
      * @return The script to be executed.
      */
     String getText();
-
-    /**
-     * Gets this script parameters.
-     * @return the parameters or null
-     */
-    String[] getParameters();
-
-    /**
-     * Gets this script local variables.
-     * @return the local variables or null
-     */
-    String[] getLocalVariables();
-
-    /**
-     * Gets this script variables.
-     * <p>Note that since variables can be in an ant-ish form (ie foo.bar.quux), each variable is returned as 
-     * a list of strings where each entry is a fragment of the variable ({"foo", "bar", "quux"} in the example.</p>
-     * @return the variables or null
-     */
-    Set<List<String>> getVariables();
-
-    /**
-     * Creates a Callable from this script.
-     * <p>This allows to submit it to an executor pool and provides support for asynchronous calls.</p>
-     * <p>The interpreter will handle interruption/cancellation gracefully if needed.</p>
-     * @param context the context
-     * @return the callable
-     */
-    Callable<Object> callable(JexlContext context);
-
-    /**
-     * Creates a Callable from this script.
-     * <p>This allows to submit it to an executor pool and provides support for asynchronous calls.</p>
-     * <p>The interpreter will handle interruption/cancellation gracefully if needed.</p>
-     * @param context the context
-     * @param args the script arguments
-     * @return the callable
-     */
-    Callable<Object> callable(JexlContext context, Object... args);
 }

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Script.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/Script.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/UnifiedJEXL.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/UnifiedJEXL.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/UnifiedJEXL.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/UnifiedJEXL.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/UnifiedJEXL.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/UnifiedJEXL.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/UnifiedJEXL.java Tue Nov 29 16:18:59 2011
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2;
+package org.apache.commons.jexl3;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -26,11 +26,11 @@ import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
-import org.apache.commons.jexl2.introspection.JexlMethod;
-import org.apache.commons.jexl2.introspection.Uberspect;
-import org.apache.commons.jexl2.parser.ASTJexlScript;
-import org.apache.commons.jexl2.parser.JexlNode;
-import org.apache.commons.jexl2.parser.StringParser;
+import org.apache.commons.jexl3.introspection.JexlMethod;
+import org.apache.commons.jexl3.introspection.Uberspect;
+import org.apache.commons.jexl3.parser.ASTJexlScript;
+import org.apache.commons.jexl3.parser.JexlNode;
+import org.apache.commons.jexl3.parser.StringParser;
 
 /**
  * An evaluator similar to the Unified EL evaluator used in JSP/JSF based on JEXL.
@@ -92,9 +92,9 @@ public final class UnifiedJEXL {
     /** The default cache size. */
     private static final int CACHE_SIZE = 256;
     /** The first character for immediate expressions. */
-    private static final char IMM_CHAR = '$';
+    private final char immediateChar;
     /** The first character for deferred expressions. */
-    private static final char DEF_CHAR = '#';
+    private final char deferredChar;
 
     /**
      * Creates a new instance of UnifiedJEXL with a default size cache.
@@ -110,8 +110,21 @@ public final class UnifiedJEXL {
      * @param cacheSize the number of expressions in this cache
      */
     public UnifiedJEXL(JexlEngine aJexl, int cacheSize) {
+        this(aJexl, cacheSize, '$', '#');
+    }
+    
+    /**
+     * Creates a new instance of UnifiedJEXL creating a local cache.
+     * @param aJexl the JexlEngine to use.
+     * @param cacheSize the number of expressions in this cache
+     * @param immediate the immediate expression character, default is '$'
+     * @param deferred the deferred expression character, default is '#'
+     */
+    public UnifiedJEXL(JexlEngine aJexl, int cacheSize, char immediate, char deferred) {
         this.jexl = aJexl;
         this.cache = aJexl.new SoftCache<String, Expression>(cacheSize);
+        immediateChar = immediate;
+        deferredChar = deferred;
     }
 
     /**
@@ -487,7 +500,7 @@ public final class UnifiedJEXL {
         /** {@inheritDoc} */
         @Override
         public StringBuilder asString(StringBuilder strb) {
-            strb.append(isImmediate() ? IMM_CHAR : DEF_CHAR);
+            strb.append(isImmediate() ? immediateChar : deferredChar);
             strb.append("{");
             strb.append(expr);
             strb.append("}");
@@ -620,7 +633,7 @@ public final class UnifiedJEXL {
         @Override
         protected Expression prepare(Interpreter interpreter) {
             String value = interpreter.interpret(node).toString();
-            JexlNode dnode = jexl.parse(value, jexl.isDebug() ? node.debugInfo() : null, null);
+            JexlNode dnode = jexl.parse(value, jexl.isDebug() ? node.jexlInfo() : null, null);
             return new ImmediateExpression(value, dnode, this);
         }
 
@@ -830,9 +843,9 @@ public final class UnifiedJEXL {
                 default: // in case we ever add new expression type
                     throw new UnsupportedOperationException("unexpected expression type");
                 case CONST:
-                    if (c == IMM_CHAR) {
+                    if (c == immediateChar) {
                         state = ParseState.IMMEDIATE0;
-                    } else if (c == DEF_CHAR) {
+                    } else if (c == deferredChar) {
                         inested = i;
                         state = ParseState.DEFERRED0;
                     } else if (c == '\\') {
@@ -853,7 +866,7 @@ public final class UnifiedJEXL {
                         }
                     } else {
                         // revert to CONST
-                        strb.append(IMM_CHAR);
+                        strb.append(immediateChar);
                         strb.append(c);
                         state = ParseState.CONST;
                     }
@@ -869,7 +882,7 @@ public final class UnifiedJEXL {
                         }
                     } else {
                         // revert to CONST
-                        strb.append(DEF_CHAR);
+                        strb.append(deferredChar);
                         strb.append(c);
                         state = ParseState.CONST;
                     }
@@ -898,7 +911,7 @@ public final class UnifiedJEXL {
                     }
                     // nested immediate in deferred; need to balance count of '{' & '}'
                     if (c == '{') {
-                        if (expr.charAt(i - 1) == IMM_CHAR) {
+                        if (expr.charAt(i - 1) == immediateChar) {
                             inner += 1;
                             strb.deleteCharAt(strb.length() - 1);
                             nested = true;
@@ -935,10 +948,10 @@ public final class UnifiedJEXL {
                     }
                     break;
                 case ESCAPE:
-                    if (c == DEF_CHAR) {
-                        strb.append(DEF_CHAR);
-                    } else if (c == IMM_CHAR) {
-                        strb.append(IMM_CHAR);
+                    if (c == deferredChar) {
+                        strb.append(deferredChar);
+                    } else if (c == immediateChar) {
+                        strb.append(immediateChar);
                     } else {
                         strb.append('\\');
                         strb.append(c);
@@ -1061,10 +1074,10 @@ public final class UnifiedJEXL {
             if (directive == null) {
                 throw new NullPointerException("null prefix");
             }
-            if ("$".equals(directive)
-                    || "${".equals(directive)
-                    || "#".equals(directive)
-                    || "#{".equals(directive)) {
+            if (Character.toString(immediateChar).equals(directive)
+                || (Character.toString(immediateChar) + "{").equals(directive)
+                || Character.toString(deferredChar).equals(directive)
+                || (Character.toString(deferredChar) + "{").equals(directive)) {
                 throw new IllegalArgumentException(directive + ": is not a valid directive pattern");
             }
             if (reader == null) {

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/UnifiedJEXL.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/UnifiedJEXL.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/AbstractExecutor.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/internal/AbstractExecutor.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/AbstractExecutor.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/AbstractExecutor.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/internal/AbstractExecutor.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/internal/AbstractExecutor.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/AbstractExecutor.java Tue Nov 29 16:18:59 2011
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.jexl2.internal;
-import org.apache.commons.jexl2.internal.introspection.MethodKey;
-import org.apache.commons.jexl2.introspection.JexlMethod;
-import org.apache.commons.jexl2.introspection.JexlPropertySet;
-import org.apache.commons.jexl2.introspection.JexlPropertyGet;
+package org.apache.commons.jexl3.internal;
+import org.apache.commons.jexl3.internal.introspection.MethodKey;
+import org.apache.commons.jexl3.introspection.JexlMethod;
+import org.apache.commons.jexl3.introspection.JexlPropertySet;
+import org.apache.commons.jexl3.introspection.JexlPropertyGet;
 import java.lang.reflect.InvocationTargetException;
 
 /**

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/AbstractExecutor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/AbstractExecutor.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Copied: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/ArrayIterator.java (from r1206774, commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/internal/ArrayIterator.java)
URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/ArrayIterator.java?p2=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/ArrayIterator.java&p1=commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/internal/ArrayIterator.java&r1=1206774&r2=1207941&rev=1207941&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl2/internal/ArrayIterator.java (original)
+++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/ArrayIterator.java Tue Nov 29 16:18:59 2011
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.commons.jexl2.internal;
+package org.apache.commons.jexl3.internal;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;