You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2019/02/01 06:52:39 UTC

[groovy] 02/02: GROOVY-7160: NoSuchMethodError for varargs when type parameter extends interface (closes #869)

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

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

commit 406487017401b397a7818d402ff4c2d2fd74b327
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Jan 31 20:25:30 2019 +1000

    GROOVY-7160: NoSuchMethodError for varargs when type parameter extends interface (closes #869)
---
 .../groovy/ast/decompiled/MemberSignatureParser.java   |  5 ++++-
 .../classgen/asm/sc/BugsStaticCompileTest.groovy       | 18 +++++++++++++++++-
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java b/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java
index 436c02c..0cefbe2 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java
@@ -145,7 +145,10 @@ class MemberSignatureParser {
     }
 
     private static ClassNode applyErasure(ClassNode genericType, ClassNode erasure) {
-        if (genericType.isGenericsPlaceHolder()) {
+        if (genericType.isArray() && erasure.isArray() && genericType.getComponentType().isGenericsPlaceHolder()) {
+            genericType.setRedirect(erasure);
+            genericType.getComponentType().setRedirect(erasure.getComponentType());
+        } else if (genericType.isGenericsPlaceHolder()) {
             genericType.setRedirect(erasure);
         }
         return genericType;
diff --git a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
index 032f899..062054b 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
@@ -1464,5 +1464,21 @@ println someInt
             assert Groovy7784.multiVarArgs() == 'foo-bar-baz1-baz2'
         '''
     }
-}
 
+    // GROOVY-7160
+    void testGenericsArrayPlaceholder() {
+        assertScript '''
+            import static java.nio.file.AccessMode.*
+
+            @groovy.transform.CompileStatic
+            class Dummy {
+                static main() {
+                    // more than 5 to match `of(E first, E[] rest)` variant
+                    EnumSet.of(READ, WRITE, EXECUTE, READ, WRITE, EXECUTE)
+                }
+            }
+
+            assert Dummy.main() == [READ, WRITE, EXECUTE].toSet()
+        '''
+    }
+}