Small classloader optimization
This commit is contained in:
parent
09ffb73a70
commit
bbe5709070
|
|
@ -33,6 +33,7 @@ public class ModernFixCachingClassTransformer extends ClassTransformer {
|
||||||
|
|
||||||
private final File CLASS_CACHE_FOLDER = childFile(FMLPaths.GAMEDIR.get().resolve("modernfix").resolve("classCacheV1").toFile());
|
private final File CLASS_CACHE_FOLDER = childFile(FMLPaths.GAMEDIR.get().resolve("modernfix").resolve("classCacheV1").toFile());
|
||||||
private final LaunchPluginHandler pluginHandler;
|
private final LaunchPluginHandler pluginHandler;
|
||||||
|
private final Map<String, ILaunchPluginService> plugins;
|
||||||
private final TransformStore transformStore;
|
private final TransformStore transformStore;
|
||||||
private final TransformerAuditTrail auditTrail;
|
private final TransformerAuditTrail auditTrail;
|
||||||
private final TransformingClassLoader transformingClassLoader;
|
private final TransformingClassLoader transformingClassLoader;
|
||||||
|
|
@ -57,6 +58,9 @@ public class ModernFixCachingClassTransformer extends ClassTransformer {
|
||||||
/* Build a lookup table of all transformers for a given class */
|
/* Build a lookup table of all transformers for a given class */
|
||||||
this.transformersByClass = new HashMap<>();
|
this.transformersByClass = new HashMap<>();
|
||||||
try {
|
try {
|
||||||
|
Field pluginsField = LaunchPluginHandler.class.getDeclaredField("plugins");
|
||||||
|
pluginsField.setAccessible(true);
|
||||||
|
this.plugins = (Map<String, ILaunchPluginService>)pluginsField.get(this.pluginHandler);
|
||||||
Field transformersByTypeField = TransformStore.class.getDeclaredField("transformers");
|
Field transformersByTypeField = TransformStore.class.getDeclaredField("transformers");
|
||||||
transformersByTypeField.setAccessible(true);
|
transformersByTypeField.setAccessible(true);
|
||||||
Field transformersMapField = TransformList.class.getDeclaredField("transformers");
|
Field transformersMapField = TransformList.class.getDeclaredField("transformers");
|
||||||
|
|
@ -94,22 +98,25 @@ public class ModernFixCachingClassTransformer extends ClassTransformer {
|
||||||
}
|
}
|
||||||
final String internalName = className.replace('.', '/');
|
final String internalName = className.replace('.', '/');
|
||||||
final Type classDesc = Type.getObjectType(internalName);
|
final Type classDesc = Type.getObjectType(internalName);
|
||||||
final EnumMap<ILaunchPluginService.Phase, List<ILaunchPluginService>> launchPluginTransformerSet = pluginHandler.computeLaunchPluginTransformerSet(classDesc, false, reason, this.auditTrail);
|
ArrayList<ILaunchPluginService> pluginList = new ArrayList<>();
|
||||||
|
for(ILaunchPluginService plugin : plugins.values()) {
|
||||||
|
if(!plugin.handlesClass(classDesc, inputClass.length == 0, reason).isEmpty()) {
|
||||||
|
pluginList.add(plugin);
|
||||||
|
}
|
||||||
|
}
|
||||||
final boolean needsTransforming = transformStore.needsTransforming(internalName);
|
final boolean needsTransforming = transformStore.needsTransforming(internalName);
|
||||||
if (!needsTransforming && launchPluginTransformerSet.isEmpty()) {
|
if (!needsTransforming && pluginList.isEmpty()) {
|
||||||
return inputClass;
|
return inputClass;
|
||||||
}
|
}
|
||||||
/* Now compute the hash list for the required transformers */
|
/* Now compute the hash list for the required transformers */
|
||||||
ArrayList<byte[]> hashList = new ArrayList<>();
|
ArrayList<byte[]> hashList = new ArrayList<>();
|
||||||
for(List<ILaunchPluginService> pluginList : launchPluginTransformerSet.values()) {
|
pluginList.sort((service1, service2) -> Comparator.<String>naturalOrder().compare(service1.name(), service2.name()));
|
||||||
pluginList.sort((service1, service2) -> Comparator.<String>naturalOrder().compare(service1.name(), service2.name()));
|
for(ILaunchPluginService service : pluginList) {
|
||||||
for(ILaunchPluginService service : pluginList) {
|
byte[] hash = obtainHash(service, className);
|
||||||
byte[] hash = obtainHash(service, className);
|
if(hash == null) {
|
||||||
if(hash == null) {
|
return super.transform(inputClass, className, reason);
|
||||||
return super.transform(inputClass, className, reason);
|
|
||||||
}
|
|
||||||
hashList.add(hash);
|
|
||||||
}
|
}
|
||||||
|
hashList.add(hash);
|
||||||
}
|
}
|
||||||
if(needsTransforming) {
|
if(needsTransforming) {
|
||||||
List<ITransformer<?>> transformers = this.transformersByClass.get(internalName);
|
List<ITransformer<?>> transformers = this.transformersByClass.get(internalName);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user