mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-22 16:41:46 +03:00
[FEATURE] Новое API в JarHelper
This commit is contained in:
parent
5939ed758f
commit
c075697316
4 changed files with 36 additions and 11 deletions
|
@ -5,6 +5,7 @@
|
|||
import org.objectweb.asm.Type;
|
||||
import org.objectweb.asm.tree.*;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
import pro.gravit.utils.helper.JarHelper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
@ -30,7 +31,7 @@ private NodeUtils() {
|
|||
}
|
||||
|
||||
public static ClassNode forClass(Class<?> cls, int flags) {
|
||||
try (InputStream in = cls.getClassLoader().getResourceAsStream(cls.getName().replace('.', '/') + ".class")) {
|
||||
try (InputStream in = JarHelper.getClassBytesStream(cls)) {
|
||||
ClassNode ret = new ClassNode();
|
||||
new ClassReader(IOHelper.read(in)).accept(ret, flags);
|
||||
return ret;
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
import pro.gravit.launchserver.binary.BuildContext;
|
||||
import pro.gravit.launchserver.binary.LauncherConfigurator;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
import pro.gravit.utils.helper.JarHelper;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
import pro.gravit.utils.helper.SecurityHelper;
|
||||
|
||||
|
@ -120,10 +121,10 @@ public Path process(Path inputJar) throws IOException {
|
|||
Path outputJar = server.launcherBinary.nextPath("main");
|
||||
try (ZipOutputStream output = new ZipOutputStream(IOHelper.newOutput(outputJar))) {
|
||||
ClassNode cn = new ClassNode();
|
||||
new ClassReader(IOHelper.getResourceBytes(AutogenConfig.class.getName().replace('.', '/').concat(".class"))).accept(cn, 0);
|
||||
new ClassReader(JarHelper.getClassBytes(AutogenConfig.class)).accept(cn, 0);
|
||||
LauncherConfigurator launcherConfigurator = new LauncherConfigurator(cn);
|
||||
ClassNode cn1 = new ClassNode();
|
||||
new ClassReader(IOHelper.getResourceBytes(SecureAutogenConfig.class.getName().replace('.', '/').concat(".class"))).accept(cn1, 0);
|
||||
new ClassReader(JarHelper.getClassBytes(SecureAutogenConfig.class)).accept(cn1, 0);
|
||||
ConfigGenerator secureConfigurator = new ConfigGenerator(cn1);
|
||||
BuildContext context = new BuildContext(output, launcherConfigurator, this);
|
||||
server.buildHookManager.hook(context);
|
||||
|
@ -205,7 +206,7 @@ public Path process(Path inputJar) throws IOException {
|
|||
}
|
||||
// write additional classes
|
||||
for (Map.Entry<String, byte[]> ent : server.buildHookManager.getIncludeClass().entrySet()) {
|
||||
output.putNextEntry(newZipEntry(ent.getKey().replace('.', '/').concat(".class")));
|
||||
output.putNextEntry(newZipEntry(JarHelper.getClassFile(ent.getKey())));
|
||||
output.write(server.buildHookManager.classTransform(ent.getValue(), ent.getKey(), this));
|
||||
}
|
||||
// map for guard
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
import pro.gravit.launcher.LauncherInject;
|
||||
import pro.gravit.launchserver.asm.InjectClassAcceptor;
|
||||
import pro.gravit.utils.PublicURLClassLoader;
|
||||
import pro.gravit.utils.helper.JarHelper;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
@ -38,16 +39,10 @@ public static class TestClass
|
|||
public static void prepare() throws Exception {
|
||||
classLoader = new ASMClassLoader(ASMTransformersTest.class.getClassLoader());
|
||||
}
|
||||
InputStream getClass(Class<?> clazz)
|
||||
{
|
||||
String className = clazz.getName();
|
||||
String classAsPath = className.replace('.', '/') + ".class";
|
||||
return clazz.getClassLoader().getResourceAsStream(classAsPath);
|
||||
}
|
||||
@Test
|
||||
void testASM() throws Exception
|
||||
{
|
||||
ClassReader reader = new ClassReader(getClass(TestClass.class));
|
||||
ClassReader reader = new ClassReader(JarHelper.getClassBytes(TestClass.class));
|
||||
ClassNode node = new ClassNode();
|
||||
reader.accept(node, ClassReader.SKIP_DEBUG);
|
||||
node.name = "ASMTestClass";
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package pro.gravit.utils.helper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Path;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
@ -74,4 +75,31 @@ public static void jarMap(Class<?> clazz, Map<String, String> map, boolean overw
|
|||
Path file = IOHelper.getCodeSource(clazz);
|
||||
jarMap(file, map, overwrite);
|
||||
}
|
||||
|
||||
public static String getClassFile(Class<?> clazz)
|
||||
{
|
||||
return getClassFile(clazz.getName());
|
||||
}
|
||||
public static String getClassFile(String classname)
|
||||
{
|
||||
return classname.replace('.', '/').concat(".class");
|
||||
}
|
||||
public static byte[] getClassBytes(Class<?> clazz) throws IOException
|
||||
{
|
||||
return getClassBytes(clazz, clazz.getClassLoader());
|
||||
}
|
||||
public static byte[] getClassBytes(Class<?> clazz, ClassLoader classLoader) throws IOException
|
||||
{
|
||||
return IOHelper.read(classLoader.getResourceAsStream(getClassFile(clazz)));
|
||||
}
|
||||
public static InputStream getClassBytesStream(Class<?> clazz) throws IOException
|
||||
{
|
||||
return getClassBytesStream(clazz, clazz.getClassLoader());
|
||||
}
|
||||
public static InputStream getClassBytesStream(Class<?> clazz, ClassLoader classLoader) throws IOException
|
||||
{
|
||||
return classLoader.getResourceAsStream(getClassFile(clazz));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue