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/09/25 11:00:33 UTC

[groovy] 02/02: GROOVY-10637: SC: parameterized return type for getter method

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

commit 00f460f7c471df572ba1a1d6fb2d1340486a678c
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Thu May 26 15:17:52 2022 -0500

    GROOVY-10637: SC: parameterized return type for getter method
---
 .../sc/transformers/VariableExpressionTransformer.java      |  3 +++
 src/test/groovy/transform/stc/ConstructorsSTCTest.groovy    | 10 +++++-----
 src/test/groovy/transform/stc/GenericsSTCTest.groovy        |  1 -
 src/test/groovy/transform/stc/MyBean.java                   | 13 +++++++------
 4 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/transform/sc/transformers/VariableExpressionTransformer.java b/src/main/java/org/codehaus/groovy/transform/sc/transformers/VariableExpressionTransformer.java
index 95298d3947..cd90269c40 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/transformers/VariableExpressionTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/transformers/VariableExpressionTransformer.java
@@ -109,6 +109,9 @@ public class VariableExpressionTransformer {
         MethodCallExpression mce = callThisX(dmct.getName());
         mce.getMethod().setSourcePosition(ve);
         mce.setMethodTarget(dmct);
+        // GROOVY-10637: return type might be parameterized
+        mce.putNodeMetaData(StaticTypesMarker.INFERRED_TYPE,
+         ve.getNodeMetaData(StaticTypesMarker.INFERRED_TYPE));
         return mce;
     }
 }
diff --git a/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy b/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy
index c00eaff84e..b8f36a656f 100644
--- a/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy
@@ -346,17 +346,17 @@ class ConstructorsSTCTest extends StaticTypeCheckingTestCase {
     void testConstructJavaBeanFromMap() {
         assertScript '''import groovy.transform.stc.MyBean
 
-        MyBean bean = new MyBean(name:'Cedric')
-        assert bean.name == 'Cedric'
+        MyBean bean = new MyBean<String>(value:'Cedric')
+        assert bean.value == 'Cedric'
         '''
     }
     void testConstructJavaBeanFromMapAndSubclass() {
         assertScript '''import groovy.transform.stc.MyBean
-        class MyBean2 extends MyBean {
+        class MyBean2 extends MyBean<String> {
             int age
         }
-        MyBean2 bean = new MyBean2(name:'Cedric', age:33)
-        assert bean.name == 'Cedric'
+        MyBean2 bean = new MyBean2(value:'Cedric', age:33)
+        assert bean.value == 'Cedric'
         assert bean.age == 33
         '''
     }
diff --git a/src/test/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
index eb308f3b23..8c97b6ed2e 100644
--- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
@@ -717,7 +717,6 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
     }
 
     // GROOVY-10637
-    @NotYetImplemented
     void testReturnTypeInferenceWithMethodGenerics27() {
         assertScript '''
             class Outer extends groovy.transform.stc.MyBean<Inner> {
diff --git a/src/test/groovy/transform/stc/MyBean.java b/src/test/groovy/transform/stc/MyBean.java
index c50c8e2b65..7471e5b4e2 100644
--- a/src/test/groovy/transform/stc/MyBean.java
+++ b/src/test/groovy/transform/stc/MyBean.java
@@ -21,14 +21,15 @@ package groovy.transform.stc;
 /**
  * A simple Java bean, used by unit test for GROOVY-5578
  */
-public class MyBean {
-    private String name;
+public class MyBean<T> {
 
-    public String getName() {
-        return name;
+    private T value;
+
+    public T getValue() {
+        return value;
     }
 
-    public void setName(final String name) {
-        this.name = name;
+    public void setValue(final T value) {
+        this.value = value;
     }
 }