GROOVY-6611: fix compiler problem if generic signature and implements clause of the class mismatch by using only getGenericInterfaces()

Conflicts:

	src/main/org/codehaus/groovy/vmplugin/v5/Java5.java
diff --git a/src/main/org/codehaus/groovy/vmplugin/v5/Java5.java b/src/main/org/codehaus/groovy/vmplugin/v5/Java5.java
index 21d213e..4f3e54d 100644
--- a/src/main/org/codehaus/groovy/vmplugin/v5/Java5.java
+++ b/src/main/org/codehaus/groovy/vmplugin/v5/Java5.java
@@ -24,6 +24,12 @@
 

 import java.lang.annotation.*;

 import java.lang.reflect.*;

+import java.lang.annotation.Annotation;

+import java.lang.annotation.ElementType;

+import java.lang.annotation.Retention;

+import java.lang.annotation.RetentionPolicy;

+import java.lang.annotation.Target;

+import java.util.Arrays;

 import java.util.List;

 

 /**

@@ -359,10 +365,19 @@
         if (interfaceTypes.length == 0) {

             classNode.setInterfaces(ClassNode.EMPTY_ARRAY);

         } else {

-            Class[] interfaceClasses = clazz.getInterfaces();

             ClassNode[] ret = new ClassNode[interfaceTypes.length];

             for (int i = 0; i < interfaceTypes.length; i++) {

-                ret[i] = makeClassNode(cu, interfaceTypes[i], interfaceClasses[i]);

+                Type type = interfaceTypes[i];

+                while (!(type instanceof Class)) {

+                    ParameterizedType pt = (ParameterizedType) type;

+                    Type t2 = pt.getRawType();

+                    if (t2==type) {

+                        throw new GroovyBugError("Cannot transform generic signature of "+clazz+

+                                " with generic interface "+interfaceTypes[i]+" to a class.");

+                    }

+                    type = t2;

+                }

+                ret[i] = makeClassNode(cu, interfaceTypes[i], (Class) type);

             }

             classNode.setInterfaces(ret);

         }