Classloader bug fixed that was introduced when writing scriptloader

This commit is contained in:
Ethan
2019-12-17 06:31:03 -06:00
parent cdd2f2e673
commit 3bbcf132cb
5 changed files with 12 additions and 5 deletions
@@ -1,5 +1,6 @@
package org.rebotted.bot.data;
import org.rebotted.archive.ASMClassLoader;
import org.rebotted.archive.ClassArchive;
import java.io.File;
@@ -9,10 +10,10 @@ public class APIData {
private final Class<?> clazz;
private final double version;
private final File apiPath;
private final ClassLoader classLoader;
private final ASMClassLoader classLoader;
private final ClassArchive classArchive;
public APIData(Class<?> clazz, double version, File apiPath, ClassArchive classArchive, ClassLoader classLoader) {
public APIData(Class<?> clazz, double version, File apiPath, ClassArchive classArchive, ASMClassLoader classLoader) {
this.clazz = clazz;
this.version = version;
this.apiPath = apiPath;
@@ -36,7 +37,7 @@ public class APIData {
return apiPath;
}
public ClassLoader getClassLoader() {
public ASMClassLoader getClassLoader() {
return classLoader;
}
@@ -1,5 +1,7 @@
package org.rebotted.script.loader;
import org.rebotted.archive.ASMClassLoader;
import org.rebotted.archive.ClassArchive;
import org.rebotted.bot.data.APIData;
import org.rebotted.directory.DirectoryManager;
import org.rebotted.script.scriptdata.ScriptData;
@@ -32,13 +34,17 @@ public class ScriptLoader {
try {
for (File file : DirectoryManager.getInstance().getRootDirectory().getSubDirectory(DirectoryManager.SCRIPTS).getFiles()) {
if (file.getAbsolutePath().endsWith(".jar")) {
apiData.getClassArchive().addJar(file);
final ClassArchive classArchive = new ClassArchive();
classArchive.inheritClassArchive(apiData.getClassArchive());
classArchive.addJar(file);
final ASMClassLoader classLoader = new ASMClassLoader(classArchive);
classLoader.inheritClassLoader(apiData.getClassLoader());
try (JarInputStream inputStream = new JarInputStream(new FileInputStream(file))) {
JarEntry jarEntry;
while ((jarEntry = inputStream.getNextJarEntry()) != null) {
if (jarEntry.getName().endsWith(".class") && !jarEntry.getName().contains("$")) {
final String classPackage = jarEntry.getName().replace(".class", "");
final Class<?> clazz = apiData.getClassLoader().loadClass(classPackage.replaceAll("/", "."));
final Class<?> clazz = classLoader.loadClass(classPackage.replaceAll("/", "."));
if (clazz.isAnnotationPresent(ScriptManifest.class)) {
final ScriptManifest manifest = clazz.getAnnotation(ScriptManifest.class);
final ScriptData scriptData = new ScriptData(clazz, manifest.name(), manifest.description(), manifest.version(), manifest.author(), manifest.category(), file);