From 3bbcf132cb7c8009b713f1cd5c3d63e1511887aa Mon Sep 17 00:00:00 2001 From: Ethan Date: Tue, 17 Dec 2019 06:31:03 -0600 Subject: [PATCH] Classloader bug fixed that was introduced when writing scriptloader --- Cache/sound1.wav | Bin 6659 -> 6659 bytes Cache/sound2.wav | Bin 6659 -> 6659 bytes Cache/sound3.wav | Bin 6659 -> 1146 bytes .../java/org/rebotted/bot/data/APIData.java | 7 ++++--- .../rebotted/script/loader/ScriptLoader.java | 10 ++++++++-- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Cache/sound1.wav b/Cache/sound1.wav index 33496f9805cc5ee4bad93d58c042ee3ed191b9ba..fdf3a4be999d83834020734b6e16f8cdbf704a8d 100644 GIT binary patch literal 6659 zcmeIyyG{Z@6vpwPv$VA{zKMk-wiejB28jk)Z@b<#-Vvkm4qnl>@?mT|GrODl7>C`^ zlJ7?d!`U+h|ALw6a`|^msoBZORIL$>k1C}~@|vh9^De0oRSlxxM|O^g1%|M|_nh%% zb+y1S$L^;#4?bM)psFpPH|;f5Gvv#QtD`M~rC#m!v+Jo>y}oQbf`?2a6{hYJVYp)4 zS+{6athv_34Z21fBJzmi_$rS)FR+=b^c7hiy zD5LKe#a@r6$-l_Nc)9#JB*f%sWvtc+hX;iaCHWbt2>O=9fT#vx@F8~&0R{T7!26ps zMFQoO&@q@+UYKWRhIC1l=yQk6I<+2ImbI-pt^LHzEA>>XYiauEERe;AZ|=#GM&~4H zXo(RU%UT@Ykrii^yOmnfnxW3E8)jYEkghHD5PEF>!&Q$dwae$W~5&u*dwmvY&Ip@?mT|GrODl7>C`^ zlJ7?d!`U+h|ALw6a`|^msoBZORIL$>k1C}~@|vh9^De0oRSlxxM|O^g1%|M|_nh%% zb+y1S$L^;#4?bM)psFpPH|;f5Gvv#QtD`M~rC#m!v+Jo>y}oQbf`?2a6{hYJVYp)4 zS+{6athv_34Z21fBJzmi_$rS)FR+=b^c7hiy zD5LKe#a@r6$-l_Nc)9#JB*f%sWvtc+hX;iaCHWbt2>O=9fT#vx@F8~&0R{T7!26ps zMFQoO&@q@+UYKWRhIC1l=yQk6I<+2ImbI-pt^LHzEA>>XYiauEERe;AZ|=#GM&~4H zXo(RU%UT@Ykrii^yOmnfnxW3E8)jYEkghHD5PEF>!&Q$dwae$W~5&u*dwmvY&Ip+d2-L9euqP&*$FJ6@@fp~HdA_4Um_7((4`^oA$n@#(1F_Uxj_(a~UF zduuxo+)J>6T5{{{!=ushXgKJ#yt1k0vnhHn9NgX64Thup49iQZ=~VHH4*P?_pnuqH zHEOP9s8TMIX5z7EBpeEb!jWh!&ZIbAEU21kyLbi7cBk9(>2})9#(`IL9m~*ESrYgR zmrgQtd_NZ3^NH=p=|nQca@m|H$trn|j$5gD2lYm?+45;N8+AA;u49)By{O2NDDc?~ zn@%MeCXt{Ci3GzWQ)!mV@Hrtb6%U&ZEZcURa=GkI!O(GR+kz2FT`Q^zu|f-P zj_3Jo7V;Umz*H_L!0U@)h8k`nhaGzO@4+S9R*BeseNiO=xj+)6A)w-S;GIEca6=Rk z$xCGavZ9a>N}7%qVyFSA|G=NbO~g>svAkGB5lJ)=MU`|(*$0(}OlQdgbOD|~+|Q#= zb^u@{+wei>pG=pLoe=!z{T&e-c10ioA5y!=-@soE_bYynW`f!Im-oSu)cy}Y0gKHr AQ2+n{ literal 6659 zcmeIyxlY4C5XSLMM@dVEcoPaD(NcsKLkI*2r!lw084f|f227lAy%i5b!|v>^c7hiy zD5LKe#a@r6$-l_Nc)9#JB*f%sWvtc+hX;iaCHWbt2>O=9fT#vx@F8~&0R{T7!26ps zMFQoO&@q@+UYKWRhIC1l=yQk6I<+2ImbI-pt^LHzEA>>XYiauEERe;AZ|=#GM&~4H zXo(RU%UT@Ykrii^yOmnfnxW3E8)jYEkghHD5PEF>!&Q$dwae$W~5&u*dwmvY&Ip 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; } diff --git a/src/main/java/org/rebotted/script/loader/ScriptLoader.java b/src/main/java/org/rebotted/script/loader/ScriptLoader.java index 2a998d9..85ec2c8 100644 --- a/src/main/java/org/rebotted/script/loader/ScriptLoader.java +++ b/src/main/java/org/rebotted/script/loader/ScriptLoader.java @@ -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);