Author: sebb Date: Wed Aug 5 19:08:49 2009 New Revision: 801362 URL: http://svn.apache.org/viewvc?rev=801362&view=rev Log: JEXL-73 Undefined variables not reported correctly
Modified: commons/proper/jexl/branches/2.0/src/main/java/org/apache/commons/jexl/Interpreter.java commons/proper/jexl/branches/2.0/src/test/java/org/apache/commons/jexl/IssuesTest.java Modified: commons/proper/jexl/branches/2.0/src/main/java/org/apache/commons/jexl/Interpreter.java URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/main/java/org/apache/commons/jexl/Interpreter.java?rev=801362&r1=801361&r2=801362&view=diff ============================================================================== --- commons/proper/jexl/branches/2.0/src/main/java/org/apache/commons/jexl/Interpreter.java (original) +++ commons/proper/jexl/branches/2.0/src/main/java/org/apache/commons/jexl/Interpreter.java Wed Aug 5 19:08:49 2009 @@ -292,14 +292,13 @@ isVariable &= objectNode instanceof ASTIdentifier; // if we get null back as a result, check for an ant variable if (isVariable) { - String name = ((ASTIdentifier) objectNode).image; if (v == 0) { - variableName = new StringBuilder(name); + variableName = new StringBuilder(left.jjtGetChild(0).image); v = 1; } for(; v <= c; ++v) { variableName.append('.'); - variableName.append(name); + variableName.append(left.jjtGetChild(v).image); } object = context.getVars().get(variableName.toString()); // disallow mixing ant & bean with same root; avoid ambiguity @@ -964,14 +963,13 @@ result = theNode.jjtAccept(this, result); // if we get null back a result, check for an ant variable if (result == null && isVariable) { - String name = ((ASTIdentifier) theNode).image; if (v == 0) { - variableName = new StringBuilder(name); + variableName = new StringBuilder(node.jjtGetChild(0).image); v = 1; } for(; v <= i; ++v) { variableName.append('.'); - variableName.append(name); + variableName.append(node.jjtGetChild(v).image); } result = vars.get(variableName.toString()); } @@ -1254,7 +1252,7 @@ } /** - * Unused, satisfy PArserVisitor interface. + * Unused, satisfy ParserVisitor interface. * @param node a node * @param data the date * @return does not return, Modified: commons/proper/jexl/branches/2.0/src/test/java/org/apache/commons/jexl/IssuesTest.java URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/test/java/org/apache/commons/jexl/IssuesTest.java?rev=801362&r1=801361&r2=801362&view=diff ============================================================================== --- commons/proper/jexl/branches/2.0/src/test/java/org/apache/commons/jexl/IssuesTest.java (original) +++ commons/proper/jexl/branches/2.0/src/test/java/org/apache/commons/jexl/IssuesTest.java Wed Aug 5 19:08:49 2009 @@ -213,4 +213,29 @@ assertEquals(jexpr.getExpression(), null, jexpr.evaluate(ctxt)); // OK } + // JEXL-73 + public void test73() throws Exception { + JexlContext ctxt = JexlHelper.createContext(); + JexlEngine jexl = new JexlEngine(); + jexl.setSilent(false); + jexl.setLenient(false); + Expression e; + e = jexl.createExpression("c.e"); + try { + /* Object o = */ e.evaluate(ctxt); + } catch(JexlException xjexl) { + String msg = xjexl.getMessage(); + assertTrue(msg.indexOf("variable c.e") > 0); + } + + ctxt.getVars().put("c", "{ 'a' : 3, 'b' : 5}"); + ctxt.getVars().put("e", Integer.valueOf(2)); + try { + /* Object o = */ e.evaluate(ctxt); + } catch(JexlException xjexl) { + String msg = xjexl.getMessage(); + assertTrue(msg.indexOf("variable c.e") > 0); + } + + } } \ No newline at end of file