You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by pa...@apache.org on 2015/05/23 01:25:40 UTC

[3/3] incubator-groovy git commit: GROOVY-7227: AST transformations relating to properties/fields should validate their includes/excludes lists (closes #22)

GROOVY-7227: AST transformations relating to properties/fields should validate their includes/excludes lists (closes #22)


Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/14a3a670
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/14a3a670
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/14a3a670

Branch: refs/heads/master
Commit: 14a3a67003beca8cc7f4b2619a3b1af39ec6312b
Parents: fd3ce1a
Author: Paul King <pa...@asert.com.au>
Authored: Fri May 22 23:50:14 2015 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Sat May 23 09:24:22 2015 +1000

----------------------------------------------------------------------
 .../codehaus/groovy/ast/tools/GeneralUtils.java |  2 +-
 .../transform/ToStringASTTransformation.java    |  2 +
 .../TupleConstructorASTTransformation.java      |  2 +
 .../transform/CanonicalTransformTest.groovy     | 51 --------------------
 .../transform/ToStringTransformTest.groovy      | 13 +++++
 5 files changed, 18 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/14a3a670/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java b/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java
index 16e8335..ce4b19e 100644
--- a/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java
+++ b/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java
@@ -383,7 +383,7 @@ public class GeneralUtils {
     }
 
     public static List<String> getInstancePropertyNames(ClassNode cNode) {
-        List<PropertyNode> pList = getInstanceProperties(cNode);
+        List<PropertyNode> pList = BeanUtils.getAllProperties(cNode, false, false, true);
         List<String> result = new ArrayList<String>(pList.size());
         for (PropertyNode pNode : pList) {
             result.add(pNode.getName());

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/14a3a670/src/main/org/codehaus/groovy/transform/ToStringASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/ToStringASTTransformation.java b/src/main/org/codehaus/groovy/transform/ToStringASTTransformation.java
index e16ee63..977940f 100644
--- a/src/main/org/codehaus/groovy/transform/ToStringASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/ToStringASTTransformation.java
@@ -82,6 +82,8 @@ public class ToStringASTTransformation extends AbstractASTTransformation {
             boolean allProperties = !memberHasValue(anno, "allProperties", false);
 
             if (!checkIncludeExclude(anno, excludes, includes, MY_TYPE_NAME)) return;
+            if (!checkPropertyList(cNode, includes, "includes", anno, MY_TYPE_NAME, includeFields)) return;
+            if (!checkPropertyList(cNode, excludes, "excludes", anno, MY_TYPE_NAME, includeFields)) return;
             createToString(cNode, includeSuper, includeFields, excludes, includes, includeNames, ignoreNulls, includePackage, cacheToString, includeSuperProperties, allProperties);
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/14a3a670/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index cf9c0ee..9c1420e 100644
--- a/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -113,6 +113,8 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
             List<String> excludes = getMemberList(anno, "excludes");
             List<String> includes = getMemberList(anno, "includes");
             if (!checkIncludeExclude(anno, excludes, includes, MY_TYPE_NAME)) return;
+            if (!checkPropertyList(cNode, includes, "includes", anno, MY_TYPE_NAME, includeFields)) return;
+            if (!checkPropertyList(cNode, excludes, "excludes", anno, MY_TYPE_NAME, includeFields)) return;
             // if @Immutable is found, let it pick up options and do work so we'll skip
             if (hasAnnotation(cNode, ImmutableASTTransformation.MY_TYPE)) return;
             createConstructor(this, cNode, includeFields, includeProperties, includeSuperFields, includeSuperProperties, callSuper, force, excludes, includes, useSetters, defaults);

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/14a3a670/src/test/org/codehaus/groovy/transform/CanonicalTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/CanonicalTransformTest.groovy b/src/test/org/codehaus/groovy/transform/CanonicalTransformTest.groovy
index 04710c5..211e9c3 100644
--- a/src/test/org/codehaus/groovy/transform/CanonicalTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/CanonicalTransformTest.groovy
@@ -18,10 +18,6 @@
  */
 package org.codehaus.groovy.transform
 
-/**
- * @author Paulo Poiati
- * @author Paul King
- */
 class CanonicalTransformTest extends GroovyShellTestCase {
 
     void testCanonical() {
@@ -593,51 +589,4 @@ class CanonicalTransformTest extends GroovyShellTestCase {
             }
         """
     }
-
-    // GROOVY-7227
-    void testIncludesAndExcludesTogetherResultsInError() {
-        def message = shouldFail {
-            evaluate("""
-                 import groovy.transform.Canonical
-                 @Canonical(includes='surName', excludes='surName')
-                 class Person {
-                     String surName
-                 }
-                 new Person(surName: "Doe").toString()
-             """)
-        }
-        assert message.contains("Error during @Canonical processing: Only one of 'includes' and 'excludes' should be supplied not both.")
-    }
-
-    // GROOVY-7227
-    void testIncludesWithInvalidPropertyNameResultsInError() {
-        def message = shouldFail {
-            evaluate("""
-                 import groovy.transform.Canonical
-                 @Canonical(includes='sirName')
-                 class Person {
-                     String surName
-                 }
-                 new Person(surName: "Doe").toString()
-             """)
-        }
-        assert message.contains("Error during @Canonical processing: 'includes' property 'sirName' does not exist.")
-    }
-
-    // GROOVY-7227
-    void testExcludesWithInvalidPropertyNameResultsInError() {
-        def message = shouldFail {
-            evaluate("""
-                 import groovy.transform.Canonical
-                 @Canonical(excludes='sirName')
-                 class Person {
-                     String firstName
-                     String surName
-                 }
-                 new Person(firstName: "John", surName: "Doe").toString()
-             """)
-        }
-        assert message.contains("Error during @Canonical processing: 'excludes' property 'sirName' does not exist.")
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/14a3a670/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy b/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
index 0df3b9d..237b6d4 100644
--- a/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
@@ -423,4 +423,17 @@ class ToStringTransformTest extends GroovyShellTestCase {
         assert message.contains("Error during @ToString processing: 'excludes' property 'sirName' does not exist.")
     }
 
+    void testExcludesWithPseudoPropertyName() {
+        evaluate '''
+            import groovy.transform.*
+
+            @ToString(excludes='full')
+            class Person {
+                String first, last
+                String getFull() { "$first $last" }
+            }
+            assert new Person(first: 'John', last: 'Smith').toString() == 'Person(John, Smith)'
+        '''
+    }
+
 }