diff --git a/src/main/kotlin/net/revanced/patcher/Patcher.kt b/src/main/kotlin/net/revanced/patcher/Patcher.kt index 6a9acfe..56081ce 100644 --- a/src/main/kotlin/net/revanced/patcher/Patcher.kt +++ b/src/main/kotlin/net/revanced/patcher/Patcher.kt @@ -2,36 +2,47 @@ package net.revanced.patcher import net.revanced.patcher.patch.Patch import net.revanced.patcher.signature.Signature -import net.revanced.patcher.store.MethodStore +import net.revanced.patcher.store.ASMStore import net.revanced.patcher.store.PatchStore +import net.revanced.patcher.util.Jar2ASM import java.io.InputStream import java.lang.IllegalStateException +/** + * The patcher. (docs WIP) + * + * @param input the input stream to read from, must be a JAR file (for now) + */ class Patcher( - private val input: InputStream, + input: InputStream, private val signatures: Array, patches: Array, ) { private val patchStore = PatchStore() - private val methodStore = MethodStore() + private val asmStore = ASMStore() private val scanned = false init { patchStore.addPatches(*patches) + loadJar(input) } fun scan() { - // methodStore.methods = PatternScanner(signatures).resolve() + val methods = PatternScanner(signatures).resolve() } fun patch(): String? { if (!scanned) throw IllegalStateException("Pattern scanner not yet ran") - for (patch in patchStore.patches) { + for ((_, patch) in patchStore.patches) { val result = patch.execute() if (result.isSuccess()) continue return result.error()!!.errorMessage() } return null } + + private fun loadJar(input: InputStream) { + asmStore.classes.putAll(Jar2ASM.jar2asm(input)) + } } \ No newline at end of file diff --git a/src/main/kotlin/net/revanced/patcher/PatternScanner.kt b/src/main/kotlin/net/revanced/patcher/PatternScanner.kt index 1d96b2f..a58b4b9 100644 --- a/src/main/kotlin/net/revanced/patcher/PatternScanner.kt +++ b/src/main/kotlin/net/revanced/patcher/PatternScanner.kt @@ -6,5 +6,4 @@ class PatternScanner(signatures: Array) { fun resolve() { TODO("Not yet implemented") } - } diff --git a/src/main/kotlin/net/revanced/patcher/store/MethodStore.kt b/src/main/kotlin/net/revanced/patcher/store/ASMStore.kt similarity index 54% rename from src/main/kotlin/net/revanced/patcher/store/MethodStore.kt rename to src/main/kotlin/net/revanced/patcher/store/ASMStore.kt index a1a0df5..c54e769 100644 --- a/src/main/kotlin/net/revanced/patcher/store/MethodStore.kt +++ b/src/main/kotlin/net/revanced/patcher/store/ASMStore.kt @@ -1,7 +1,9 @@ package net.revanced.patcher.store +import org.objectweb.asm.tree.ClassNode import org.objectweb.asm.tree.MethodNode -class MethodStore { +class ASMStore { + val classes: MutableMap = mutableMapOf() val methods: MutableMap = mutableMapOf() } \ No newline at end of file diff --git a/src/main/kotlin/net/revanced/patcher/util/Jar2ASM.kt b/src/main/kotlin/net/revanced/patcher/util/Jar2ASM.kt new file mode 100644 index 0000000..c39b76e --- /dev/null +++ b/src/main/kotlin/net/revanced/patcher/util/Jar2ASM.kt @@ -0,0 +1,18 @@ +package net.revanced.patcher.util + +import org.objectweb.asm.tree.ClassNode +import java.io.InputStream +import java.util.jar.JarInputStream + +object Jar2ASM { + fun jar2asm(input: InputStream): Map { + return buildMap { + val jar = JarInputStream(input) + var e = jar.nextJarEntry + while (e != null) { + TODO("Read jar file ...") + e = jar.nextJarEntry + } + } + } +} \ No newline at end of file