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 2021/03/21 14:55:32 UTC
[groovy] branch GROOVY_3_0_X updated: GROOVY-7945: resolve type of
"super" ctor call including type arguments
This is an automated email from the ASF dual-hosted git repository.
emilles 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 08e7975 GROOVY-7945: resolve type of "super" ctor call including type arguments
08e7975 is described below
commit 08e79757d486a7b093ebed90199d7e4bf29f1025
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue Mar 16 15:04:24 2021 -0500
GROOVY-7945: resolve type of "super" ctor call including type arguments
---
.../transform/stc/StaticTypeCheckingVisitor.java | 8 ++++---
.../groovy/transform/stc/GenericsSTCTest.groovy | 28 ++++++++++++++++++++++
2 files changed, 33 insertions(+), 3 deletions(-)
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 7b79d14..abe3fce 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -2177,11 +2177,13 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
extension.afterMethodCall(call);
return;
}
- ClassNode receiver = call.getType();
+ ClassNode receiver;
if (call.isThisCall()) {
- receiver = typeCheckingContext.getEnclosingClassNode();
+ receiver = makeThis();
} else if (call.isSuperCall()) {
- receiver = typeCheckingContext.getEnclosingClassNode().getSuperClass();
+ receiver = makeSuper();
+ } else {
+ receiver = call.getType();
}
Expression arguments = call.getArguments();
ArgumentListExpression argumentList = InvocationWriter.makeArgumentList(arguments);
diff --git a/src/test/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
index ef55b9d..2c0b7bd 100644
--- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
@@ -418,6 +418,34 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
'''
}
+ // GROOVY-7945
+ void testSpecialCtorCallWithClassLiteral() {
+ shouldFailWithMessages '''
+ abstract class A<X, Y> {
+ private final Class<X> x
+ private final Class<Y> y
+
+ A(Class<X> x, Class<Y> y) {
+ this.x = x
+ this.y = y
+ }
+
+ void test() {
+ println("{$x} and {$y}")
+ }
+ }
+
+ class B extends A<String, Integer> {
+ B() {
+ super(Integer, String)
+ }
+ }
+
+ A<String, Integer> a = new B()
+ a.test()
+ ''', 'Cannot call A <String, Integer>#<init>(java.lang.Class <String>, java.lang.Class <Integer>) with arguments [java.lang.Class <java.lang.Integer>, java.lang.Class <java.lang.String>]'
+ }
+
// GROOVY-9460
void testMethodCallWithClassParameterUnbounded() {
assertScript '''