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)'
+ '''
+ }
+
}