From 8b8d2d39b2d79cd4005d8105c57fa81be7467a6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 21 Apr 2009 12:43:05 +0000 Subject: [PATCH] added better error reporting --- .../collections/eval/JaninoEvaluator.java | 19 ++++++++++++++++--- .../iterators/FilteringMultiIterator.java | 2 +- .../mysema/query/collections/AliasTest.java | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/eval/JaninoEvaluator.java b/querydsl-collections/src/main/java/com/mysema/query/collections/eval/JaninoEvaluator.java index 38f60b7c7..f92ec9103 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/eval/JaninoEvaluator.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/eval/JaninoEvaluator.java @@ -24,14 +24,22 @@ public class JaninoEvaluator implements Evaluator{ private final ExpressionEvaluator ev; - public JaninoEvaluator(ExpressionEvaluator ev){ + private final Expr projection; + + private final List> sources; + + public JaninoEvaluator(ExpressionEvaluator ev, List> sources, Expr projection){ this.ev = Assert.notNull(ev); + this.sources = sources; + this.projection = projection; } public JaninoEvaluator(JavaOps ops, List> sources, Expr expr){ try { Class type = expr.getType() != null ? expr.getType() : Object.class; - ev = new JavaSerializer(ops).handle(expr).createExpressionEvaluator(sources, type); + this.ev = new JavaSerializer(ops).handle(expr).createExpressionEvaluator(sources, type); + this.sources = sources; + this.projection = expr; } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } @@ -43,7 +51,12 @@ public class JaninoEvaluator implements Evaluator{ return (T)ev.evaluate(args); } catch (InvocationTargetException e) { if (e.getCause() instanceof NullPointerException){ - throw new IllegalArgumentException("null path in expression"); + for (int i=0; i < args.length; i++){ + if (args[i] == null){ + throw new IllegalArgumentException("null for " + sources.get(i)); + } + } + throw new IllegalArgumentException("null in " + projection); }else{ throw new RuntimeException(e.getMessage(), e); } diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/iterators/FilteringMultiIterator.java b/querydsl-collections/src/main/java/com/mysema/query/collections/iterators/FilteringMultiIterator.java index ac4b2bf63..b2314af71 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/iterators/FilteringMultiIterator.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/iterators/FilteringMultiIterator.java @@ -81,7 +81,7 @@ public class FilteringMultiIterator extends MultiIterator implements IteratorSou logger.info("Filtering iterator for source"); ExpressionEvaluator ev = serializer.createExpressionEvaluator(sources, boolean.class); if (ev != null){ - return new JaninoEvaluator(ev); + return new JaninoEvaluator(ev, sources, where); }else{ return null; } diff --git a/querydsl-collections/src/test/java/com/mysema/query/collections/AliasTest.java b/querydsl-collections/src/test/java/com/mysema/query/collections/AliasTest.java index ad71aa948..cc29e4104 100644 --- a/querydsl-collections/src/test/java/com/mysema/query/collections/AliasTest.java +++ b/querydsl-collections/src/test/java/com/mysema/query/collections/AliasTest.java @@ -151,7 +151,7 @@ public class AliasTest extends AbstractQueryTest{ from(cat,cats).where(cat.mate.alive).list(cat); fail("expected RuntimeException"); }catch(RuntimeException e){ - assertEquals("null path in expression", e.getMessage()); + assertEquals("null in cat.mate.alive", e.getMessage()); } // 12