You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2021/02/09 21:16:04 UTC
[groovy] branch master updated: evaluateExpression: close class
loader before return
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 2a6a6a1 evaluateExpression: close class loader before return
2a6a6a1 is described below
commit 2a6a6a14cd9587ffe2f5b3c0c72bbdab97bfbb07
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue Feb 9 15:15:50 2021 -0600
evaluateExpression: close class loader before return
---
.../transform/stc/StaticTypeCheckingSupport.java | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
index cc598a3..76944d5 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -106,6 +106,7 @@ import static org.codehaus.groovy.ast.ClassHelper.makeWithoutCaching;
import static org.codehaus.groovy.ast.ClassHelper.short_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.void_WRAPPER_TYPE;
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
+import static org.codehaus.groovy.runtime.DefaultGroovyMethodsSupport.closeQuietly;
import static org.codehaus.groovy.syntax.Types.BITWISE_AND;
import static org.codehaus.groovy.syntax.Types.BITWISE_AND_EQUAL;
import static org.codehaus.groovy.syntax.Types.BITWISE_OR;
@@ -2150,14 +2151,18 @@ public abstract class StaticTypeCheckingSupport {
// disable preview features so class can be inspected by this JVM
copyConf.setPreviewFeatures(false);
CompilationUnit cu = new CompilationUnit(copyConf);
- cu.addClassNode(node);
- cu.compile(Phases.CLASS_GENERATION);
- List<GroovyClass> classes = cu.getClasses();
- Class<?> aClass = cu.getClassLoader().defineClass(className, classes.get(0).getBytes());
try {
- return aClass.getMethod("eval").invoke(null);
- } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
- throw new GroovyBugError(e);
+ cu.addClassNode(node);
+ cu.compile(Phases.CLASS_GENERATION);
+ List<GroovyClass> classes = cu.getClasses();
+ Class<?> aClass = cu.getClassLoader().defineClass(className, classes.get(0).getBytes());
+ try {
+ return aClass.getMethod("eval").invoke(null);
+ } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
+ throw new GroovyBugError(e);
+ }
+ } finally {
+ closeQuietly(cu.getClassLoader());
}
}