You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/11/18 19:55:30 UTC
[groovy] branch master updated: GROOVY-10846: STC: use erasure for placeholder with no upper bound
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 8a50593c5d GROOVY-10846: STC: use erasure for placeholder with no upper bound
8a50593c5d is described below
commit 8a50593c5d160558ce0c3470a4c8b40ab124712f
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Fri Nov 18 13:30:49 2022 -0600
GROOVY-10846: STC: use erasure for placeholder with no upper bound
---
.../transform/stc/StaticTypeCheckingVisitor.java | 3 ++-
src/test/groovy/transform/stc/GenericsSTCTest.groovy | 19 +++++++++++++++++++
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 0afd5ff3ec..baf1e2ecbc 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -3883,7 +3883,8 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
addSelfTypes(cn, owners);
}
} else {
- owners.add(Receiver.make(OBJECT_TYPE)); // T or T super Type
+ ClassNode cn = gt.getType().redirect(); // GROOVY-10846
+ owners.add(Receiver.make(cn)); // T or T super Type
}
}
diff --git a/src/test/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
index 8f5e047000..fcc5045359 100644
--- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
@@ -4166,6 +4166,25 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
'''
}
+ // GROOVY-10846
+ void testClassLevelGenericsForPropertyRead() {
+ for (vis in ['','public','protected','@groovy.transform.PackageScope']) {
+ assertScript """
+ class A {
+ $vis String b
+ }
+ class C<X extends A, Y extends List<X>> {
+ void test(X x) {
+ x.b = 'blah'
+ }
+ }
+ A a = []
+ new C<A, List<A>>().test(a)
+ assert a.b == 'blah'
+ """
+ }
+ }
+
// GROOVY-6919
void testMethodLevelGenericsForPropertyRead() {
assertScript '''