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());
         }
     }