Finish tests, add InsnList.setAt, sr -> sd

Added some sweet explanation too.
This commit is contained in:
Lucaskyy 2022-03-19 23:15:20 +01:00
parent 61c0541ef5
commit 8c56d15823
No known key found for this signature in database
GPG key ID: 1530BFF96D1EEB89
3 changed files with 17 additions and 4 deletions

View file

@ -6,7 +6,7 @@ import org.objectweb.asm.tree.MethodNode
data class PatchData(
val cls: ClassNode,
val method: MethodNode,
val sr: ScanData
val sd: ScanData
)
data class ScanData(

View file

@ -1,9 +1,10 @@
package net.revanced.patcher.writer
import org.objectweb.asm.tree.AbstractInsnNode
import org.objectweb.asm.tree.InsnList
object ASMWriter {
fun InsnList.testingWow() {
fun InsnList.setAt(index: Int, node: AbstractInsnNode) {
this[this.get(index)] = node
}
}

View file

@ -4,9 +4,11 @@ import net.revanced.patcher.patch.Patch
import net.revanced.patcher.patch.PatchResultSuccess
import net.revanced.patcher.signature.Signature
import net.revanced.patcher.util.ExtraTypes
import net.revanced.patcher.writer.ASMWriter.setAt
import org.junit.jupiter.api.Test
import org.objectweb.asm.Opcodes.*
import org.objectweb.asm.Type
import org.objectweb.asm.tree.LdcInsnNode
internal class PatcherTest {
private val testSigs: Array<Signature> = arrayOf(
@ -40,9 +42,19 @@ internal class PatcherTest {
patcher.addPatches(
Patch ("TestPatch") {
// Get the method from the resolver cache
val main = patcher.cache.methods["mainMethod"]
// Get the instruction list
val insn = main.method.instructions!!
// Let's modify it, so it prints "Hello, ReVanced!"
// Get the start index of our signature
// This will be the index of the LDC instruction
val startIndex = main.sd.startIndex
insn.setAt(startIndex, LdcInsnNode("Hello, ReVanced!"))
// Finally, tell the patcher that this patch was a success.
// You can also return PatchResultError with a message.
// If an exception is thrown inside this function,
// a PatchResultError will be returned with the error message.
PatchResultSuccess()
}
)