Launcher/LaunchServer/src/main/java/ru/gravit/launchserver/manangers/NodeTransformer.java

41 lines
1.3 KiB
Java

package ru.gravit.launchserver.manangers;
import java.util.ArrayList;
import java.util.List;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.tree.ClassNode;
import ru.gravit.launchserver.asm.SafeClassWriter;
import ru.gravit.launchserver.binary.JARLauncherBinary;
import ru.gravit.launchserver.manangers.BuildHookManager.Transformer;
public class NodeTransformer implements Transformer {
@FunctionalInterface
public interface ClassNodeTransformer {
void transform(ClassNode node, String classname, JARLauncherBinary data);
}
private final List<ClassNodeTransformer> transLst;
public List<ClassNodeTransformer> getTransLst() {
return transLst;
}
public NodeTransformer() {
transLst = new ArrayList<>();
}
@Override
public byte[] transform(byte[] input, String classname, JARLauncherBinary data) {
ClassReader cr = new ClassReader(input);
ClassNode cn = new ClassNode();
cr.accept(cn, ClassReader.SKIP_DEBUG);
for (ClassNodeTransformer tr : transLst) tr.transform(cn, classname, data);
ClassWriter cw = new SafeClassWriter(data.reader, ClassWriter.COMPUTE_MAXS);
cn.accept(cw);
return cw.toByteArray();
}
}