Skip to content

Commit d2249c6

Browse files
committed
GROOVY-11693: include exception in extension module load fail message
4_0_X backport
1 parent 03d1aa6 commit d2249c6

File tree

1 file changed

+34
-31
lines changed

1 file changed

+34
-31
lines changed

src/main/java/org/codehaus/groovy/runtime/m12n/MetaInfExtensionModule.java

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,24 @@
2020

2121
import groovy.lang.GroovyRuntimeException;
2222

23-
import java.util.ArrayList;
24-
import java.util.LinkedList;
2523
import java.util.List;
24+
import java.util.Objects;
2625
import java.util.Properties;
26+
import java.util.function.Function;
2727
import java.util.logging.Logger;
28+
import java.util.stream.Stream;
29+
30+
import static java.util.logging.Level.WARNING;
31+
import static java.util.stream.Collectors.toList;
2832

2933
/**
30-
* A {@link SimpleExtensionModule} implementation which reads extension classes
34+
* A {@link SimpleExtensionModule} implementation which reads extension class
3135
* metadata from META-INF.
3236
*
3337
* @since 2.0.0
3438
*/
39+
@SuppressWarnings("rawtypes")
3540
public class MetaInfExtensionModule extends SimpleExtensionModule {
36-
private static final Logger LOG = Logger.getLogger(MetaInfExtensionModule.class.getName());
37-
38-
public static final String MODULE_INSTANCE_CLASSES_KEY = "extensionClasses";
39-
public static final String MODULE_STATIC_CLASSES_KEY = "staticExtensionClasses";
4041

4142
private final List<Class> instanceExtensionClasses;
4243
private final List<Class> staticExtensionClasses;
@@ -57,38 +58,40 @@ private MetaInfExtensionModule(final String moduleName, final String moduleVersi
5758
this.staticExtensionClasses = staticExtensionClasses;
5859
}
5960

61+
//-----------------------------------------------------------------------
62+
63+
public static final String MODULE_INSTANCE_CLASSES_KEY = "extensionClasses";
64+
public static final String MODULE_STATIC_CLASSES_KEY = "staticExtensionClasses";
65+
6066
public static MetaInfExtensionModule newModule(final Properties properties, final ClassLoader loader) {
6167
String name = properties.getProperty(PropertiesModuleFactory.MODULE_NAME_KEY);
62-
if (name == null)
63-
throw new GroovyRuntimeException("Module file hasn't set the module name using key [" + PropertiesModuleFactory.MODULE_NAME_KEY + "]");
68+
if (name == null) {
69+
throw new GroovyRuntimeException("Module file has not set the module name using key: " + PropertiesModuleFactory.MODULE_NAME_KEY);
70+
}
6471
String version = properties.getProperty(PropertiesModuleFactory.MODULE_VERSION_KEY);
65-
if (version == null)
66-
throw new GroovyRuntimeException("Module file hasn't set the module version using key [" + PropertiesModuleFactory.MODULE_VERSION_KEY + "]");
67-
String[] extensionClasses = properties.getProperty(MODULE_INSTANCE_CLASSES_KEY, "").trim().split("[,; ]");
68-
String[] staticExtensionClasses = properties.getProperty(MODULE_STATIC_CLASSES_KEY, "").trim().split("[,; ]");
69-
List<Class> instanceClasses = new ArrayList<Class>(extensionClasses.length);
70-
List<Class> staticClasses = new ArrayList<Class>(staticExtensionClasses.length);
71-
List<String> errors = new LinkedList<String>();
72-
loadExtensionClass(loader, extensionClasses, instanceClasses, errors);
73-
loadExtensionClass(loader, staticExtensionClasses, staticClasses, errors);
74-
if (!errors.isEmpty()) {
75-
for (String error : errors) {
76-
LOG.warning("Module [" + name + "] - Unable to load extension class [" + error + "]");
77-
}
72+
if (version == null) {
73+
throw new GroovyRuntimeException("Module file has not set the module version using key: " + PropertiesModuleFactory.MODULE_VERSION_KEY);
7874
}
79-
return new MetaInfExtensionModule(name, version, instanceClasses, staticClasses);
80-
}
8175

82-
private static void loadExtensionClass(ClassLoader loader, String[] extensionClasses, List<Class> instanceClasses, List<String> errors) {
83-
for (String extensionClass : extensionClasses) {
76+
Function<String, Class> load = (extensionClass) -> {
8477
try {
8578
extensionClass = extensionClass.trim();
86-
if (extensionClass.length() > 0) {
87-
instanceClasses.add(loader.loadClass(extensionClass));
79+
if (!extensionClass.isEmpty()) {
80+
return loader.loadClass(extensionClass);
8881
}
89-
} catch (ClassNotFoundException | NoClassDefFoundError | UnsupportedClassVersionError e) {
90-
errors.add(extensionClass);
82+
} catch (ClassNotFoundException | RuntimeException | LinkageError error) {
83+
Logger logger = Logger.getLogger(MetaInfExtensionModule.class.getName());
84+
logger.log(WARNING, "Module [" + name + "] - Unable to load extension class: " + extensionClass, error);
9185
}
92-
}
86+
return null;
87+
};
88+
89+
String[] objectExtensionClasses = properties.getProperty(MODULE_INSTANCE_CLASSES_KEY, "").trim().split("[,; ]");
90+
String[] staticExtensionClasses = properties.getProperty( MODULE_STATIC_CLASSES_KEY, "").trim().split("[,; ]");
91+
92+
List<Class> objectClasses = Stream.of(objectExtensionClasses).map(load).filter(Objects::nonNull).collect(toList());
93+
List<Class> staticClasses = Stream.of(staticExtensionClasses).map(load).filter(Objects::nonNull).collect(toList());
94+
95+
return new MetaInfExtensionModule(name, version, objectClasses, staticClasses);
9396
}
9497
}

0 commit comments

Comments
 (0)