Skip to content

Commit

Permalink
Merge pull request mvel#23 from mariofusco/parenthesis
Browse files Browse the repository at this point in the history
lookahead to avoid invalid casts
  • Loading branch information
mikebrock committed Oct 7, 2011
2 parents c02c1dc + 0d41f64 commit 82fcf3a
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
19 changes: 15 additions & 4 deletions src/main/java/org/mvel2/compiler/AbstractParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -1031,11 +1031,22 @@ else if ((cursor - 1) != start || (!isDigit(expr[cursor - 1])) && isDigit(lookAh
Class cls;
try {
if (tDescr.isClass() && (cls = getClassReference(pCtx, tDescr)) != null) {
st = cursor;
captureToEOS();

return lastNode = new TypeCast(expr, st, cursor - st,
cls, fields, pCtx);
// lookahead to check if it could be a real cast
boolean isCast = false;
for (int i = cursor; i < expr.length; i++) {
if (expr[i] == ' ' || expr[i] == '\t') continue;
isCast = isIdentifierPart(expr[i]) || expr[i] == '\'' || expr[i] == '"' || expr[i] == '(';
break;
}

if (isCast) {
st = cursor;
captureToEOS();

return lastNode = new TypeCast(expr, st, cursor - st,
cls, fields, pCtx);
}
}
}
catch (ClassNotFoundException e) {
Expand Down
12 changes: 12 additions & 0 deletions src/test/java/org/mvel2/tests/core/UnsupportedFeaturesTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,18 @@ public void testJavaStyleClassLiterals() {

OptimizerFactory.setDefaultOptimizer(OptimizerFactory.DYNAMIC);

assertEquals(String.class, MVEL.eval("String"));
assertEquals(String.class, MVEL.eval("java.lang.String"));
assertEquals(java.util.ArrayList.class, MVEL.eval("java.util.ArrayList"));

assertEquals(String.class, MVEL.eval("(String)"));
assertEquals(String.class, MVEL.eval("(java.lang.String)"));
assertEquals(java.util.ArrayList.class, MVEL.eval("(java.util.ArrayList)"));

assertEquals(String.class, MVEL.eval("(String.class)"));
assertEquals(String.class, MVEL.eval("(java.lang.String.class)"));
assertEquals(java.util.ArrayList.class, MVEL.eval("(java.util.ArrayList.class)"));

assertEquals(String.class, MVEL.eval("String.class"));
assertEquals(String.class, MVEL.eval("java.lang.String.class"));
assertEquals(java.util.ArrayList.class, MVEL.eval("java.util.ArrayList.class"));
Expand Down

0 comments on commit 82fcf3a

Please sign in to comment.