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 2023/01/18 00:02:46 UTC

[groovy] 04/05: GROOVY-5859, GROOVY-10407: stubgen: write param type arguments (not raw)

This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit f9cf0421e1da322a51f953901f2099424262055f
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Dec 12 12:30:03 2021 -0600

    GROOVY-5859, GROOVY-10407: stubgen: write param type arguments (not raw)
---
 .../groovy/tools/javac/JavaStubGenerator.java      | 13 +++++----
 .../{Groovy5859Bug.groovy => Groovy10407.groovy}   | 33 +++++++++++++---------
 .../{Groovy5859Bug.groovy => Groovy5859.groovy}    | 30 ++++++++++++--------
 3 files changed, 46 insertions(+), 30 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
index 829e8fd63d..03d716af93 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
@@ -532,11 +532,14 @@ public class JavaStubGenerator {
             Parameter[] normalized = new Parameter[parameters.length];
             for (int i = 0, n = parameters.length; i < n; i += 1) {
                 ClassNode normalizedType = parameters[i].getOriginType();
-                // GROOVY-7306: apply type arguments from declaring type to parameter type
-                normalizedType = correctToGenericsSpec(superTypeGenerics, normalizedType);
-                // workaround for GROOVY-5859: remove generic type info
-                normalizedType = normalizedType.getPlainNodeReference();
-
+                if (superType.getGenericsTypes() == null // GROOVY-10407
+                        && superType.redirect().getGenericsTypes() != null) {
+                    // GROOVY-5859: remove generic type info for raw type
+                    normalizedType = normalizedType.getPlainNodeReference();
+                } else {
+                    // GROOVY-7306: apply type arguments from declaring type to parameter type
+                    normalizedType = correctToGenericsSpec(superTypeGenerics, normalizedType);
+                }
                 normalized[i] = new Parameter(normalizedType, parameters[i].getName());
             }
 
diff --git a/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy5859Bug.groovy b/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy10407.groovy
similarity index 60%
copy from src/test/org/codehaus/groovy/tools/stubgenerator/Groovy5859Bug.groovy
copy to src/test/org/codehaus/groovy/tools/stubgenerator/Groovy10407.groovy
index 9d493912fd..e7d32f4565 100644
--- a/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy5859Bug.groovy
+++ b/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy10407.groovy
@@ -18,24 +18,31 @@
  */
 package org.codehaus.groovy.tools.stubgenerator
 
-class Groovy5859Bug extends StringSourcesStubTestCase {
+final class Groovy10407 extends StringSourcesStubTestCase {
+
     @Override
     Map<String, String> provideSources() {
-        ['TaggedsMap.groovy': '''import org.codehaus.groovy.tools.stubgenerator.Groovy5859Support
-
-class TaggedsMap extends Groovy5859Support {
-
-    TaggedsMap(SortedMap m) {
-        super()
-        putAll (m)
-    }
-}''',
-        'Blah.java': '''public class Blah { TaggedsMap map; }''']
+        [
+            'Pogo.groovy': '''
+                class Foo {
+                    Foo(Map<String, String> map) {
+                    }
+                }
+                class Bar extends Foo {
+                    Bar(Map<String, String> map) {
+                        super(map)
+                    }
+                }
+            ''',
+            'Main.java': '''
+                public class Main { Foo foo; }
+            ''',
+        ]
     }
 
     @Override
     void verifyStubs() {
-        def stubSource = stubJavaSourceFor('TaggedsMap')
-        assert stubSource.contains('super ((java.util.SortedMap)null);')
+        String stub = stubJavaSourceFor('Bar')
+        assert stub.contains('super ((java.util.Map<java.lang.String, java.lang.String>)null);')
     }
 }
diff --git a/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy5859Bug.groovy b/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy5859.groovy
similarity index 61%
rename from src/test/org/codehaus/groovy/tools/stubgenerator/Groovy5859Bug.groovy
rename to src/test/org/codehaus/groovy/tools/stubgenerator/Groovy5859.groovy
index 9d493912fd..08d444e6a0 100644
--- a/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy5859Bug.groovy
+++ b/src/test/org/codehaus/groovy/tools/stubgenerator/Groovy5859.groovy
@@ -18,24 +18,30 @@
  */
 package org.codehaus.groovy.tools.stubgenerator
 
-class Groovy5859Bug extends StringSourcesStubTestCase {
+final class Groovy5859 extends StringSourcesStubTestCase {
+
     @Override
     Map<String, String> provideSources() {
-        ['TaggedsMap.groovy': '''import org.codehaus.groovy.tools.stubgenerator.Groovy5859Support
-
-class TaggedsMap extends Groovy5859Support {
+        [
+            'Pogo.groovy': """
+                import ${this.class.name}Support
 
-    TaggedsMap(SortedMap m) {
-        super()
-        putAll (m)
-    }
-}''',
-        'Blah.java': '''public class Blah { TaggedsMap map; }''']
+                class Pogo extends ${this.class.simpleName}Support/*no type args*/ {
+                    Pogo(SortedMap map) {
+                        super(/*null*/)
+                        putAll(map)
+                    }
+                }
+            """,
+            'Main.java': '''
+                public class Main { Pogo pogo; }
+            '''
+        ]
     }
 
     @Override
     void verifyStubs() {
-        def stubSource = stubJavaSourceFor('TaggedsMap')
-        assert stubSource.contains('super ((java.util.SortedMap)null);')
+        String stub = stubJavaSourceFor('Pogo')
+        assert stub.contains('super ((java.util.SortedMap)null);')
     }
 }