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 2016/05/18 19:11:52 UTC
groovy git commit: GROOVY-7826: do not show redirect for generic type
arguments to break the infinite recursion (closes #333)
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 <ma...@daniel-spilker.com>
Authored: Thu May 12 13:44:30 2016 +0200
Committer: pascalschumacher <pa...@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>> {
+ }
+}