You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/04/25 08:55:38 UTC
[groovy] 01/01: GROOVY-9526: Failed to reload classes with generic
parameters
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch GROOVY-9526
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit ab4147ae562c443dcb09f73597166a0891470d6c
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sat Apr 25 16:54:25 2020 +0800
GROOVY-9526: Failed to reload classes with generic parameters
---
src/main/java/groovy/util/GroovyScriptEngine.java | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/src/main/java/groovy/util/GroovyScriptEngine.java b/src/main/java/groovy/util/GroovyScriptEngine.java
index 7afd183..3a13407 100644
--- a/src/main/java/groovy/util/GroovyScriptEngine.java
+++ b/src/main/java/groovy/util/GroovyScriptEngine.java
@@ -24,7 +24,9 @@ import groovy.lang.GroovyCodeSource;
import groovy.lang.GroovyResourceLoader;
import groovy.lang.Script;
import org.codehaus.groovy.GroovyBugError;
+import org.codehaus.groovy.ast.ClassHelper;
import org.codehaus.groovy.ast.ClassNode;
+import org.codehaus.groovy.ast.GenericsType;
import org.codehaus.groovy.classgen.GeneratorContext;
import org.codehaus.groovy.control.ClassNodeResolver;
import org.codehaus.groovy.control.CompilationFailedException;
@@ -49,6 +51,7 @@ import java.net.URLConnection;
import java.security.AccessController;
import java.security.CodeSource;
import java.security.PrivilegedAction;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -199,6 +202,18 @@ public class GroovyScriptEngine implements ResourceConnector {
}
if (clazz != null) {
ClassNode cn = new ClassNode(clazz);
+ cn.setGenericsTypes(
+ Arrays.stream(clazz.getTypeParameters())
+ .map(e -> {
+ ClassNode type = ClassHelper.makeWithoutCaching(e.getName());
+ type.setRedirect(ClassHelper.OBJECT_TYPE);
+ return new GenericsType(
+ type,
+ null,
+ null
+ );
+ }).toArray(GenericsType[]::new)
+ );
return new LookupResult(null, cn);
}
} catch (ResourceException re) {