Require explicit classloader for runtime inheritance
Previously, the runtime inheritance providers would always use the system classloader. Now you have to explicitly pass the classloader to use. Also add a 'verbose' flag for debugging.
This commit is contained in:
parent
41fefc0167
commit
25fcbb40fe
@ -11,7 +11,9 @@ public class RemappedRuntimeInheritanceProvider extends RuntimeInheritanceProvid
|
||||
private final JarMapping jarMapping;
|
||||
private final JarMapping inverseJarMapping;
|
||||
|
||||
public RemappedRuntimeInheritanceProvider(JarMapping jarMapping) {
|
||||
public RemappedRuntimeInheritanceProvider(ClassLoader classLoader, boolean verbose, JarMapping jarMapping) {
|
||||
super(classLoader, verbose);
|
||||
|
||||
this.jarMapping = jarMapping;
|
||||
this.inverseJarMapping = new JarMapping();
|
||||
|
||||
|
@ -35,18 +35,33 @@ import java.util.ArrayList;
|
||||
* Lookup class inheritance from classes loaded at runtime.
|
||||
*/
|
||||
public class RuntimeInheritanceProvider implements IInheritanceProvider {
|
||||
private final ClassLoader classLoader;
|
||||
private final boolean verbose;
|
||||
|
||||
public RuntimeInheritanceProvider(ClassLoader classLoader, boolean verbose) {
|
||||
this.classLoader = classLoader;
|
||||
this.verbose = verbose;
|
||||
}
|
||||
|
||||
// TODO: option to transform through a jarRemapper at runtime
|
||||
@Override
|
||||
public List<String> getParents(String internalClassName) {
|
||||
List<String> parents = new ArrayList<String>();
|
||||
String sourceClassName = toSourceName(internalClassName);
|
||||
Class clazz;
|
||||
try {
|
||||
clazz = ClassLoader.getSystemClassLoader().loadClass(sourceClassName); // load class without initializing
|
||||
clazz = classLoader.loadClass(sourceClassName); // load class without initializing
|
||||
//clazz = Class.forName(toSourceName(sourceClassName)); // runs static initializers - avoid!
|
||||
} catch (Throwable t) {
|
||||
SpecialSource.log("RuntimeInheritanceProvider failed: " + t);
|
||||
if (verbose) {
|
||||
System.out.println("RuntimeInheritanceProvider failed: " + t);
|
||||
t.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (clazz == null) {
|
||||
if (verbose) {
|
||||
System.out.println("RuntimeInheritanceProvider no class: " + sourceClassName);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -157,11 +157,11 @@ public class SpecialSource {
|
||||
inheritanceProviders.add(new JarInheritanceProvider(jar3));
|
||||
|
||||
if (options.has("live-remapped")) {
|
||||
inheritanceProviders.add(new RemappedRuntimeInheritanceProvider(jarMapping));
|
||||
inheritanceProviders.add(new RemappedRuntimeInheritanceProvider(ClassLoader.getSystemClassLoader(), !options.has("quiet"), jarMapping));
|
||||
}
|
||||
|
||||
if (options.has("live")) {
|
||||
inheritanceProviders.add(new RuntimeInheritanceProvider());
|
||||
inheritanceProviders.add(new RuntimeInheritanceProvider(ClassLoader.getSystemClassLoader(), !options.has("quiet")));
|
||||
}
|
||||
|
||||
|
||||
@ -170,7 +170,7 @@ public class SpecialSource {
|
||||
}
|
||||
}
|
||||
|
||||
public static void log(String message) {
|
||||
private static void log(String message) {
|
||||
if (options != null && !options.has("quiet")) {
|
||||
System.out.println(message);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user