Repository: groovy
Updated Branches:
  refs/heads/GROOVY_2_4_X f282d21d8 -> de30aed50


GROOVY-7826: do not show redirect for generic type arguments to break the 
infinite recursion (closes #333)

only occurs when not using ASM resolving because the ASM resolved classes do 
not have generic type information


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/de30aed5
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/de30aed5
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/de30aed5

Branch: refs/heads/GROOVY_2_4_X
Commit: de30aed50902fb8483824d0e484f7c769b5636a4
Parents: f282d21
Author: Daniel Spilker <m...@daniel-spilker.com>
Authored: Thu May 12 13:44:30 2016 +0200
Committer: pascalschumacher <pascalschumac...@gmx.net>
Committed: Wed May 18 20:47:53 2016 +0200

----------------------------------------------------------------------
 src/main/org/codehaus/groovy/ast/ClassNode.java |  7 +++---
 .../org/codehaus/groovy/ast/Groovy7862Bug.java  | 23 ++++++++++++++++++++
 2 files changed, 26 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/de30aed5/src/main/org/codehaus/groovy/ast/ClassNode.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/ClassNode.java 
b/src/main/org/codehaus/groovy/ast/ClassNode.java
index 89da548..c011241 100644
--- a/src/main/org/codehaus/groovy/ast/ClassNode.java
+++ b/src/main/org/codehaus/groovy/ast/ClassNode.java
@@ -1170,7 +1170,7 @@ public class ClassNode extends AnnotatedNode implements 
Opcodes {
             for (int i = 0; i < genericsTypes.length; i++) {
                 if (i != 0) ret += ", ";
                 GenericsType genericsType = genericsTypes[i];
-                ret += genericTypeAsString(genericsType, showRedirect);
+                ret += genericTypeAsString(genericsType);
             }
             ret += ">";
         }
@@ -1184,10 +1184,9 @@ public class ClassNode extends AnnotatedNode implements 
Opcodes {
      * This exists to avoid a recursive definition of toString. The default 
toString
      * in GenericsType calls ClassNode.toString(), which calls 
GenericsType.toString(), etc. 
      * @param genericsType
-     * @param showRedirect
      * @return the string representing the generic type
      */
-    private String genericTypeAsString(GenericsType genericsType, boolean 
showRedirect) {
+    private String genericTypeAsString(GenericsType genericsType) {
         String ret = genericsType.getName();
         if (genericsType.getUpperBounds() != null) {
             ret += " extends ";
@@ -1196,7 +1195,7 @@ public class ClassNode extends AnnotatedNode implements 
Opcodes {
                 if (classNode.equals(this)) {
                     ret += classNode.getName();
                 } else {
-                    ret += classNode.toString(showRedirect);
+                    ret += classNode.toString(false);
                 }
                 if (i + 1 < genericsType.getUpperBounds().length) ret += " & ";
             }

http://git-wip-us.apache.org/repos/asf/groovy/blob/de30aed5/src/test/org/codehaus/groovy/ast/Groovy7862Bug.java
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/ast/Groovy7862Bug.java 
b/src/test/org/codehaus/groovy/ast/Groovy7862Bug.java
new file mode 100644
index 0000000..73ebe5b
--- /dev/null
+++ b/src/test/org/codehaus/groovy/ast/Groovy7862Bug.java
@@ -0,0 +1,23 @@
+package org.codehaus.groovy.ast;
+
+import groovy.lang.GroovyShell;
+import groovy.util.GroovyTestCase;
+import org.codehaus.groovy.control.CompilerConfiguration;
+
+public class Groovy7862Bug extends GroovyTestCase {
+  public void testComplexTypeArguments() throws Exception {
+    String script = "def f(org.codehaus.groovy.ast.Groovy7862Bug.C1 c1) { }";
+
+    CompilerConfiguration config = new CompilerConfiguration();
+    config.getOptimizationOptions().put("asmResolving", false);
+
+    GroovyShell shell = new GroovyShell(config);
+    shell.evaluate(script, "bug7862.groovy");
+  }
+
+  public static class C1<T2 extends C2<T2, T1>, T1 extends C1<T2, T1>> {
+  }
+
+  public static class C2<T2 extends C2<T2, T1>, T1 extends C1<T2, T1>> {
+  }
+}

Reply via email to