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/05/17 19:01:50 UTC
[groovy] branch GROOVY_4_0_X updated: GROOVY-10316: STC: don't apply context generics for diamond ctor call
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push:
new fff8547e95 GROOVY-10316: STC: don't apply context generics for diamond ctor call
fff8547e95 is described below
commit fff8547e9502139d213f37fbc2d71376547f3db3
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue May 17 12:54:17 2022 -0500
GROOVY-10316: STC: don't apply context generics for diamond ctor call
---
.../groovy/transform/stc/StaticTypeCheckingVisitor.java | 3 ++-
src/test/groovy/transform/stc/GenericsSTCTest.groovy | 16 ++++++++++++++++
2 files changed, 18 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 fb1b8ce0c1..5b61567007 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -232,6 +232,7 @@ import static org.codehaus.groovy.ast.tools.WideningCategories.isIntCategory;
import static org.codehaus.groovy.ast.tools.WideningCategories.isLongCategory;
import static org.codehaus.groovy.ast.tools.WideningCategories.isNumberCategory;
import static org.codehaus.groovy.ast.tools.WideningCategories.lowestUpperBound;
+import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.init;
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.last;
import static org.codehaus.groovy.syntax.Types.ASSIGN;
@@ -2285,7 +2286,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
&& parameters.length == argumentTypes.length - 1) {
ctor = typeCheckMapConstructor(call, receiver, arguments);
} else {
- if (receiver.getGenericsTypes() != null) { // GROOVY-8909, GROOVY-9734, GROOVY-9844, GROOVY-9915, GROOVY-10482, et al.
+ if (asBoolean(receiver.getGenericsTypes())) { // GROOVY-10283, GROOVY-10316, GROOVY-10482, et al.
Map<GenericsTypeName, GenericsType> context = extractPlaceHoldersVisibleToDeclaration(receiver, ctor, argumentList);
parameters = Arrays.stream(parameters).map(p -> new Parameter(applyGenericsContext(context, p.getType()), p.getName())).toArray(Parameter[]::new);
}
diff --git a/src/test/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
index 56fd1a0f38..7967c9a586 100644
--- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
@@ -1289,6 +1289,22 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
'''
}
+ // GROOVY-10316
+ void testDiamondInferrenceFromConstructor28() {
+ assertScript '''
+ class A<T> {
+ A(T t) {
+ }
+ }
+ @groovy.transform.TupleConstructor(defaults=false)
+ class B<T> {
+ A<T> p
+ }
+ def b = new B<>(new A<>(1L))
+ A<Long> x = b.p // Cannot assign A<Object> to: A<Long>
+ '''
+ }
+
// GROOVY-10280
void testTypeArgumentPropagation() {
assertScript '''