Repository: cayenne
Updated Branches:
  refs/heads/STABLE-4.0 5a5f07ada -> e448b4f64


CAY-2464 ClassCastException when returning PRUNED_NODE in expression transformer


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/0cc396e6
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/0cc396e6
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/0cc396e6

Branch: refs/heads/STABLE-4.0
Commit: 0cc396e6bbdd7a1cda6e6a82afe5d2086eede31d
Parents: 5a5f07a
Author: Nikita Timofeev <stari...@gmail.com>
Authored: Wed Aug 29 14:04:47 2018 +0300
Committer: Nikita Timofeev <stari...@gmail.com>
Committed: Wed Aug 29 14:04:47 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                                  |  9 +++++++++
 .../java/org/apache/cayenne/exp/Expression.java    |  2 +-
 .../org/apache/cayenne/exp/ExpressionTest.java     | 17 +++++++++++++++++
 3 files changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/0cc396e6/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index fbbf372..5e1bfad 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -8,6 +8,15 @@ To browse individual bug reports check out project issue 
tracker:
 https://issues.apache.org/jira/browse/CAY
 
 ----------------------------------
+Release: 4.0.1
+Date:
+----------------------------------
+
+Bug Fixes:
+
+CAY-2464 ClassCastException when returning PRUNED_NODE in expression 
transformer
+
+----------------------------------
 Release: 4.0
 Date: August 06, 2018
 ----------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0cc396e6/cayenne-server/src/main/java/org/apache/cayenne/exp/Expression.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/exp/Expression.java 
b/cayenne-server/src/main/java/org/apache/cayenne/exp/Expression.java
index 0d35cea..7f4c288 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/exp/Expression.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/Expression.java
@@ -671,7 +671,7 @@ public abstract class Expression implements Serializable, 
XMLSerializable {
                }
 
                // all the children are processed, only now transform this copy
-               return (transformer != null) ? (Expression) 
transformer.transform(copy) : copy;
+               return (transformer != null) ? transformer.transform(copy) : 
copy;
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0cc396e6/cayenne-server/src/test/java/org/apache/cayenne/exp/ExpressionTest.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/exp/ExpressionTest.java 
b/cayenne-server/src/test/java/org/apache/cayenne/exp/ExpressionTest.java
index e0e306b..be71289 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/exp/ExpressionTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/exp/ExpressionTest.java
@@ -26,8 +26,10 @@ import java.util.Date;
 import java.util.List;
 
 import org.apache.cayenne.ObjectId;
+import org.apache.cayenne.exp.parser.ASTFalse;
 import org.apache.cayenne.exp.parser.SimpleNode;
 import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.commons.collections.Transformer;
 import org.junit.Test;
 
 public class ExpressionTest {
@@ -429,4 +431,19 @@ public class ExpressionTest {
                assertEquals("a = enum:org.apache.cayenne.exp.ExpEnum1.TWO", 
buffer.toString());
        }
 
+       @Test
+       public void testCustomPruneTransform() {
+               Expression exp = ExpressionFactory.exp("(false and true) and 
true");
+               Expression transformed = exp.transform(new Transformer() {
+                       @Override
+                       public Object transform(Object node) {
+                               if (node instanceof ASTFalse) {
+                                       return Expression.PRUNED_NODE;
+                               }
+                               return node;
+                       }
+               });
+               assertEquals("true and true", transformed.toString());
+       }
+
 }

Reply via email to