Add in "transform excluded" classes that we still need to take loading responsibility for

This commit is contained in:
Christian 2012-07-29 23:30:37 -04:00
parent b53ce2aa90
commit e1fc02b5b9
1 changed files with 22 additions and 7 deletions

View File

@ -14,9 +14,13 @@ import java.util.Map;
public class RelaunchClassLoader extends URLClassLoader public class RelaunchClassLoader extends URLClassLoader
{ {
private static String[] excludedPackages = { private static String[] excludedPackages = {
"java.", "sun.", "javax.", "java.", "sun.", "javax.",
"cpw.mods.fml.relauncher", "net.minecraftforge.classloading", "cpw.mods.fml.relauncher.", "net.minecraftforge.classloading."
};
private static String[] transformerExclusions =
{
"org.objectweb.asm.", "com.google.common." "org.objectweb.asm.", "com.google.common."
}; };
private List<URL> sources; private List<URL> sources;
@ -24,7 +28,7 @@ public class RelaunchClassLoader extends URLClassLoader
private List<IClassTransformer> transformers; private List<IClassTransformer> transformers;
private Map<String, Class> cachedClasses; private Map<String, Class> cachedClasses;
public RelaunchClassLoader(URL[] sources) public RelaunchClassLoader(URL[] sources)
{ {
super(sources, null); super(sources, null);
@ -57,11 +61,22 @@ public class RelaunchClassLoader extends URLClassLoader
return parent.loadClass(name); return parent.loadClass(name);
} }
} }
if (cachedClasses.containsKey(name)) if (cachedClasses.containsKey(name))
{ {
return cachedClasses.get(name); return cachedClasses.get(name);
} }
for (String st : transformerExclusions)
{
if (name.startsWith(st))
{
Class<?> cl = super.findClass(name);
cachedClasses.put(name, cl);
return cl;
}
}
try try
{ {
byte[] basicClass = readFully(findResource(name.replace('.', '/').concat(".class")).openStream()); byte[] basicClass = readFully(findResource(name.replace('.', '/').concat(".class")).openStream());
@ -96,8 +111,8 @@ public class RelaunchClassLoader extends URLClassLoader
{ {
return sources; return sources;
} }
private byte[] readFully(InputStream stream) private byte[] readFully(InputStream stream)
{ {
try try
@ -108,7 +123,7 @@ public class RelaunchClassLoader extends URLClassLoader
{ {
bos.write(r); bos.write(r);
} }
return bos.toByteArray(); return bos.toByteArray();
} }
catch (Throwable t) catch (Throwable t)