From 3f1d2dc4a3e76d0402bf14ceed1b18c68e851a73 Mon Sep 17 00:00:00 2001 From: Graham Date: Sun, 15 Dec 2019 19:29:20 +0000 Subject: [PATCH] Convert Transformer to Kotlin --- .../openrs2/asm/transform/Transformer.java | 80 ------------- .../dev/openrs2/asm/transform/Transformer.kt | 110 ++++++++++++++++++ 2 files changed, 110 insertions(+), 80 deletions(-) delete mode 100644 asm/src/main/java/dev/openrs2/asm/transform/Transformer.java create mode 100644 asm/src/main/java/dev/openrs2/asm/transform/Transformer.kt diff --git a/asm/src/main/java/dev/openrs2/asm/transform/Transformer.java b/asm/src/main/java/dev/openrs2/asm/transform/Transformer.java deleted file mode 100644 index 03ca6d46..00000000 --- a/asm/src/main/java/dev/openrs2/asm/transform/Transformer.java +++ /dev/null @@ -1,80 +0,0 @@ -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 */ - } -} diff --git a/asm/src/main/java/dev/openrs2/asm/transform/Transformer.kt b/asm/src/main/java/dev/openrs2/asm/transform/Transformer.kt new file mode 100644 index 00000000..cc941d64 --- /dev/null +++ b/asm/src/main/java/dev/openrs2/asm/transform/Transformer.kt @@ -0,0 +1,110 @@ +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 + +abstract class Transformer { + @Throws(AnalyzerException::class) + fun transform(classPath: ClassPath) { + preTransform(classPath) + + var changed: Boolean + do { + changed = false + + prePass(classPath) + for (library in classPath.libraries) { + for (clazz in library) { + changed = changed or transformClass(classPath, library, clazz) + + for (field in clazz.fields) { + changed = changed or transformField(classPath, library, clazz, field) + } + + for (method in clazz.methods) { + changed = changed or preTransformMethod(classPath, library, clazz, method) + + if (method.access and (Opcodes.ACC_NATIVE or Opcodes.ACC_ABSTRACT) == 0) { + changed = changed or transformCode(classPath, library, clazz, method) + } + + changed = changed or postTransformMethod(classPath, library, clazz, method) + } + } + } + postPass(classPath) + } while (changed) + + postTransform(classPath) + } + + @Throws(AnalyzerException::class) + protected open fun preTransform(classPath: ClassPath) { + /* empty */ + } + + @Throws(AnalyzerException::class) + protected open fun prePass(classPath: ClassPath) { + /* empty */ + } + + @Throws(AnalyzerException::class) + protected open fun transformClass(classPath: ClassPath, library: Library, clazz: ClassNode): Boolean { + return false + } + + @Throws(AnalyzerException::class) + protected open fun transformField( + classPath: ClassPath, + library: Library, + clazz: ClassNode, + field: FieldNode + ): Boolean { + return false + } + + @Throws(AnalyzerException::class) + protected open fun preTransformMethod( + classPath: ClassPath, + library: Library, + clazz: ClassNode, + method: MethodNode + ): Boolean { + return false + } + + @Throws(AnalyzerException::class) + protected open fun transformCode( + classPath: ClassPath, + library: Library, + clazz: ClassNode, + method: MethodNode + ): Boolean { + return false + } + + @Throws(AnalyzerException::class) + protected open fun postTransformMethod( + classPath: ClassPath, + library: Library, + clazz: ClassNode, + method: MethodNode + ): Boolean { + return false + } + + @Throws(AnalyzerException::class) + protected open fun postPass(classPath: ClassPath) { + /* empty */ + } + + @Throws(AnalyzerException::class) + protected open fun postTransform(classPath: ClassPath) { + /* empty */ + } +}