You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2020/02/21 03:45:43 UTC
[groovy] branch GROOVY_3_0_X updated: GROOVY-9414: Groovy 3.0.1 :
@Delegate does not work with default getter
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
new df251a4 GROOVY-9414: Groovy 3.0.1 : @Delegate does not work with default getter
df251a4 is described below
commit df251a4ead41300f9699da2b215b5c7a613b2be7
Author: Paul King <pa...@asert.com.au>
AuthorDate: Fri Feb 21 13:43:58 2020 +1000
GROOVY-9414: Groovy 3.0.1 : @Delegate does not work with default getter
---
.../groovy/transform/DelegateASTTransformation.java | 18 +++++++++++++++---
.../groovy/transform/DelegateTransformTest.groovy | 13 +++++++++++++
2 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
index 6e6a417..9eeba82 100644
--- a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
@@ -43,6 +43,7 @@ import org.codehaus.groovy.control.SourceUnit;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -203,11 +204,22 @@ public class DelegateASTTransformation extends AbstractASTTransformation {
if (propertyNameList == null || propertyNameList.isEmpty()) {
return true;
}
- final List<String> pNames = new ArrayList<>();
+ final Set<String> pNames = new HashSet<>();
+ final Set<String> mNames = new HashSet<>();
for (PropertyNode pNode : BeanUtils.getAllProperties(cNode, false, false, false)) {
- pNames.add(pNode.getField().getName());
+ String name = pNode.getField().getName();
+ pNames.add(name);
+ // add getter/setters since Groovy compiler hasn't added property accessors yet
+ String capitalized = Verifier.capitalize(name);
+ if ((pNode.getModifiers() & ACC_FINAL) == 0) {
+ mNames.add("set" + capitalized);
+ }
+ mNames.add("get" + capitalized);
+ boolean isPrimBool = pNode.getOriginType().equals(ClassHelper.boolean_TYPE);
+ if (isPrimBool) {
+ mNames.add("is" + capitalized);
+ }
}
- final List<String> mNames = new ArrayList<>();
for (MethodNode mNode : cNode.getAllDeclaredMethods()) {
mNames.add(mNode.getName());
}
diff --git a/src/test/org/codehaus/groovy/transform/DelegateTransformTest.groovy b/src/test/org/codehaus/groovy/transform/DelegateTransformTest.groovy
index f6b99f3..903ff4b 100644
--- a/src/test/org/codehaus/groovy/transform/DelegateTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/DelegateTransformTest.groovy
@@ -859,6 +859,19 @@ assert foo.dm.x == '123'
assert new B().s == '456'
'''
}
+
+ // GROOVY-9414
+ void testDelegateToPropertyViaGetter() {
+ assertScript '''
+ class Bar {
+ String name
+ }
+ class BarDelegate {
+ @Delegate(includes = "getName") Bar bar = new Bar(name: 'Baz')
+ }
+ assert new BarDelegate().name == 'Baz'
+ '''
+ }
}
interface DelegateFoo {