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>> { + } +}