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 2022/03/21 00:43:50 UTC
[groovy] 02/02: GROOVY-7288: fix for `@Delegate` target that implements trait(s) (port to 3_0_X)
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
commit 6b8c3ad5346af30b3995dfd165dcf8b8f737151b
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Fri Mar 18 10:38:01 2022 -0500
GROOVY-7288: fix for `@Delegate` target that implements trait(s) (port to 3_0_X)
---
.../groovy/transform/DelegateASTTransformation.java | 3 +--
.../traitx/TraitASTTransformationTest.groovy | 20 ++++++++++++++++++++
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
index 1e58a77..311edc3 100644
--- a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
@@ -38,7 +38,6 @@ import org.codehaus.groovy.ast.tools.BeanUtils;
import org.codehaus.groovy.control.CompilePhase;
import org.codehaus.groovy.control.SourceUnit;
-import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -187,7 +186,7 @@ public class DelegateASTTransformation extends AbstractASTTransformation {
if (skipInterfaces) return;
Set<ClassNode> addedInterfaces = getInterfacesAndSuperInterfaces(delegate.type);
- addedInterfaces.removeIf(i -> !Modifier.isPublic(i.getModifiers()));
+ addedInterfaces.removeIf(i -> (i.getModifiers() & (ACC_PUBLIC | ACC_SYNTHETIC)) != ACC_PUBLIC); // GROOVY-7288 and JDK16+
if (!addedInterfaces.isEmpty()) {
Set<ClassNode> ownerInterfaces = getInterfacesAndSuperInterfaces(delegate.owner);
for (ClassNode i : addedInterfaces) {
diff --git a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
index b62a851..228edeb 100644
--- a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
@@ -1760,6 +1760,26 @@ final class TraitASTTransformationTest {
'''
}
+ @Test // GROOVY-7288
+ void testClassWithTraitDelegate() {
+ assertScript '''
+ trait T {
+ final foo = 'bar'
+ }
+ class D implements T {
+ def m() {
+ return 'baz'
+ }
+ }
+ class C { // The class must be declared abstract or the method 'java.lang.String T__foo$get()' must be implemented
+ private @Delegate D provider = new D()
+ }
+ def c = new C()
+ assert c.foo == 'bar'
+ assert c.m() == 'baz'
+ '''
+ }
+
@Test // GROOVY-9739
void testTraitExtendsTraitWithDelegate() {
assertScript '''