Open-source multiplayer game server compatible with the RuneScape client https://www.openrs2.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
openrs2/asm/src/main/java/dev/openrs2/asm/transform/Transformer.java

80 lines
2.3 KiB

package dev.openrs2.asm.transform;
import dev.openrs2.asm.classpath.ClassPath;
import dev.openrs2.asm.classpath.Library;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.FieldNode;
import org.objectweb.asm.tree.MethodNode;
import org.objectweb.asm.tree.analysis.AnalyzerException;
public abstract class Transformer {
public final void transform(ClassPath classPath) throws AnalyzerException {
preTransform(classPath);
boolean changed;
do {
changed = false;
prePass(classPath);
for (var library : classPath.getLibraries()) {
for (var clazz : library) {
changed |= transformClass(classPath, library, clazz);
for (var field : clazz.fields) {
changed |= transformField(classPath, library, clazz, field);
}
for (var method : clazz.methods) {
changed |= preTransformMethod(classPath, library, clazz, method);
if ((method.access & (Opcodes.ACC_NATIVE | Opcodes.ACC_ABSTRACT)) == 0) {
changed |= transformCode(classPath, library, clazz, method);
}
changed |= postTransformMethod(classPath, library, clazz, method);
}
}
}
postPass(classPath);
} while (changed);
postTransform(classPath);
}
protected void preTransform(ClassPath classPath) throws AnalyzerException {
/* empty */
}
protected void prePass(ClassPath classPath) throws AnalyzerException {
/* empty */
}
protected boolean transformClass(ClassPath classPath, Library library, ClassNode clazz) throws AnalyzerException {
return false;
}
protected boolean transformField(ClassPath classPath, Library library, ClassNode clazz, FieldNode field) throws AnalyzerException {
return false;
}
protected boolean preTransformMethod(ClassPath classPath, Library library, ClassNode clazz, MethodNode method) throws AnalyzerException {
return false;
}
protected boolean transformCode(ClassPath classPath, Library library, ClassNode clazz, MethodNode method) throws AnalyzerException {
return false;
}
protected boolean postTransformMethod(ClassPath classPath, Library library, ClassNode clazz, MethodNode method) throws AnalyzerException {
return false;
}
protected void postPass(ClassPath classPath) throws AnalyzerException {
/* empty */
}
protected void postTransform(ClassPath classPath) throws AnalyzerException {
/* empty */
}
}