This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push:
new d2249c6b1d GROOVY-11693: include exception in extension module load
fail message
d2249c6b1d is described below
commit d2249c6b1da24cb0bf2fac85982d236d24d2446a
Author: Eric Milles <[email protected]>
AuthorDate: Tue Jul 15 15:18:32 2025 -0500
GROOVY-11693: include exception in extension module load fail message
4_0_X backport
---
.../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 2891ee4dc5..272aaedf59 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.util.List;
+import java.util.Objects;
import java.util.Properties;
+import java.util.function.Function;
import java.util.logging.Logger;
+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.length() > 0) {
- instanceClasses.add(loader.loadClass(extensionClass));
+ if (!extensionClass.isEmpty()) {
+ return loader.loadClass(extensionClass);
}
- } catch (ClassNotFoundException | NoClassDefFoundError |
UnsupportedClassVersionError e) {
- errors.add(extensionClass);
+ } catch (ClassNotFoundException | RuntimeException | LinkageError
error) {
+ Logger logger =
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);
}
}