You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2021/03/19 20:01:35 UTC
[groovy] branch master updated: GROOVY-7945: resolve type of
"super" ctor call including type arguments
This is an automated email from the ASF dual-hosted git repository.
sunlan 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 d35e2d3 GROOVY-7945: resolve type of "super" ctor call including type arguments
d35e2d3 is described below
commit d35e2d3955d01bdefb9449ff54a8d30d69b32179
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 de4ac83..3d914a8 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -2184,11 +2184,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 acf0105..7b6128a 100644
--- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
@@ -761,6 +761,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#<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 '''