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 532711a091 GROOVY-11693: include exception in extension module load 
fail message
532711a091 is described below

commit 532711a0915c9c0405a3eb9337bbfab684006ae1
Author: Eric Milles <[email protected]>
AuthorDate: Tue Jul 15 15:18:32 2025 -0500

    GROOVY-11693: include exception in extension module load fail message
---
 .../runtime/m12n/MetaInfExtensionModule.java       | 65 +++++++++++-----------
 1 file changed, 34 insertions(+), 31 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/runtime/m12n/MetaInfExtensionModule.java 
b/src/main/java/org/codehaus/groovy/runtime/m12n/MetaInfExtensionModule.java
index 0e001bebd5..cdf222a890 100644
--- a/src/main/java/org/codehaus/groovy/runtime/m12n/MetaInfExtensionModule.java
+++ b/src/main/java/org/codehaus/groovy/runtime/m12n/MetaInfExtensionModule.java
@@ -20,23 +20,24 @@ package org.codehaus.groovy.runtime.m12n;
 
 import groovy.lang.GroovyRuntimeException;
 
-import java.util.ArrayList;
-import java.util.LinkedList;
+import java.lang.reflect.InaccessibleObjectException;
 import java.util.List;
+import java.util.Objects;
 import java.util.Properties;
-import java.util.logging.Logger;
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import static java.util.logging.Level.WARNING;
+import static java.util.stream.Collectors.toList;
 
 /**
- * A {@link SimpleExtensionModule} implementation which reads extension classes
+ * A {@link SimpleExtensionModule} implementation which reads extension class
  * metadata from META-INF.
  *
  * @since 2.0.0
  */
+@SuppressWarnings("rawtypes")
 public class MetaInfExtensionModule extends SimpleExtensionModule {
-    private static final Logger LOG = 
Logger.getLogger(MetaInfExtensionModule.class.getName());
-
-    public static final String MODULE_INSTANCE_CLASSES_KEY = 
"extensionClasses";
-    public static final String MODULE_STATIC_CLASSES_KEY = 
"staticExtensionClasses";
 
     private final List<Class> instanceExtensionClasses;
     private final List<Class> staticExtensionClasses;
@@ -57,38 +58,40 @@ public class MetaInfExtensionModule extends 
SimpleExtensionModule {
         this.staticExtensionClasses = staticExtensionClasses;
     }
 
+    //-----------------------------------------------------------------------
+
+    public static final String MODULE_INSTANCE_CLASSES_KEY = 
"extensionClasses";
+    public static final String MODULE_STATIC_CLASSES_KEY   = 
"staticExtensionClasses";
+
     public static MetaInfExtensionModule newModule(final Properties 
properties, final ClassLoader loader) {
         String name = 
properties.getProperty(PropertiesModuleFactory.MODULE_NAME_KEY);
-        if (name == null)
-            throw new GroovyRuntimeException("Module file hasn't set the 
module name using key [" + PropertiesModuleFactory.MODULE_NAME_KEY + "]");
+        if (name == null) {
+            throw new GroovyRuntimeException("Module file has not set the 
module name using key: " + PropertiesModuleFactory.MODULE_NAME_KEY);
+        }
         String version = 
properties.getProperty(PropertiesModuleFactory.MODULE_VERSION_KEY);
-        if (version == null)
-            throw new GroovyRuntimeException("Module file hasn't set the 
module version using key [" + PropertiesModuleFactory.MODULE_VERSION_KEY + "]");
-        String[] extensionClasses = 
properties.getProperty(MODULE_INSTANCE_CLASSES_KEY, "").trim().split("[,; ]");
-        String[] staticExtensionClasses = 
properties.getProperty(MODULE_STATIC_CLASSES_KEY, "").trim().split("[,; ]");
-        List<Class> instanceClasses = new 
ArrayList<Class>(extensionClasses.length);
-        List<Class> staticClasses = new 
ArrayList<Class>(staticExtensionClasses.length);
-        List<String> errors = new LinkedList<String>();
-        loadExtensionClass(loader, extensionClasses, instanceClasses, errors);
-        loadExtensionClass(loader, staticExtensionClasses, staticClasses, 
errors);
-        if (!errors.isEmpty()) {
-            for (String error : errors) {
-                LOG.warning("Module [" + name + "] - Unable to load extension 
class [" + error + "]");
-            }
+        if (version == null) {
+            throw new GroovyRuntimeException("Module file has not set the 
module version using key: " + PropertiesModuleFactory.MODULE_VERSION_KEY);
         }
-        return new MetaInfExtensionModule(name, version, instanceClasses, 
staticClasses);
-    }
 
-    private static void loadExtensionClass(ClassLoader loader, String[] 
extensionClasses, List<Class> instanceClasses, List<String> errors) {
-        for (String extensionClass : extensionClasses) {
+        Function<String, Class> load = (extensionClass) -> {
             try {
                 extensionClass = extensionClass.trim();
                 if (!extensionClass.isEmpty()) {
-                    instanceClasses.add(loader.loadClass(extensionClass));
+                    return loader.loadClass(extensionClass);
                 }
-            } catch (ClassNotFoundException | NoClassDefFoundError | 
UnsupportedClassVersionError e) {
-                errors.add(extensionClass);
+            } catch (ClassNotFoundException | InaccessibleObjectException | 
LinkageError error) {
+                var logger = 
java.util.logging.Logger.getLogger(MetaInfExtensionModule.class.getName());
+                logger.log(WARNING, "Module [" + name + "] - Unable to load 
extension class: " + extensionClass, error);
             }
-        }
+            return null;
+        };
+
+        String[] objectExtensionClasses = 
properties.getProperty(MODULE_INSTANCE_CLASSES_KEY, "").trim().split("[,; ]");
+        String[] staticExtensionClasses = properties.getProperty(  
MODULE_STATIC_CLASSES_KEY, "").trim().split("[,; ]");
+
+        List<Class> objectClasses = 
Stream.of(objectExtensionClasses).map(load).filter(Objects::nonNull).collect(toList());
+        List<Class> staticClasses = 
Stream.of(staticExtensionClasses).map(load).filter(Objects::nonNull).collect(toList());
+
+        return new MetaInfExtensionModule(name, version, objectClasses, 
staticClasses);
     }
 }

Reply via email to