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.
78 lines
2.7 KiB
78 lines
2.7 KiB
package dev.openrs2.asm
|
|
|
|
import dev.openrs2.asm.classpath.ExtendedRemapper
|
|
import org.objectweb.asm.tree.AbstractInsnNode
|
|
import org.objectweb.asm.tree.ClassNode
|
|
import org.objectweb.asm.tree.FieldInsnNode
|
|
import org.objectweb.asm.tree.FieldNode
|
|
import org.objectweb.asm.tree.FrameNode
|
|
import org.objectweb.asm.tree.InvokeDynamicInsnNode
|
|
import org.objectweb.asm.tree.LdcInsnNode
|
|
import org.objectweb.asm.tree.MethodInsnNode
|
|
import org.objectweb.asm.tree.MethodNode
|
|
import org.objectweb.asm.tree.MultiANewArrayInsnNode
|
|
import org.objectweb.asm.tree.TypeInsnNode
|
|
|
|
fun ClassNode.remap(remapper: ExtendedRemapper) {
|
|
val originalName = name
|
|
name = remapper.mapType(originalName)
|
|
signature = remapper.mapSignature(signature, false)
|
|
superName = remapper.mapType(superName)
|
|
interfaces = interfaces?.map(remapper::mapType)
|
|
|
|
for (field in fields) {
|
|
field.remap(remapper, originalName)
|
|
}
|
|
|
|
for (method in methods) {
|
|
method.remap(remapper, originalName)
|
|
}
|
|
}
|
|
|
|
fun FieldNode.remap(remapper: ExtendedRemapper, owner: String) {
|
|
name = remapper.mapFieldName(owner, name, desc)
|
|
desc = remapper.mapDesc(desc)
|
|
signature = remapper.mapSignature(signature, true)
|
|
value = remapper.mapValue(value)
|
|
}
|
|
|
|
fun MethodNode.remap(remapper: ExtendedRemapper, owner: String) {
|
|
name = remapper.mapMethodName(owner, name, desc)
|
|
desc = remapper.mapMethodDesc(desc)
|
|
signature = remapper.mapSignature(signature, false)
|
|
exceptions = exceptions.map(remapper::mapType)
|
|
|
|
if (hasCode) {
|
|
ClassForNameUtils.remap(remapper, this)
|
|
|
|
for (insn in instructions) {
|
|
insn.remap(remapper)
|
|
}
|
|
|
|
for (tryCatch in tryCatchBlocks) {
|
|
tryCatch.type = remapper.mapType(tryCatch.type)
|
|
}
|
|
}
|
|
}
|
|
|
|
fun AbstractInsnNode.remap(remapper: ExtendedRemapper) {
|
|
when (this) {
|
|
is FrameNode -> throw UnsupportedOperationException("SKIP_FRAMES and COMPUTE_FRAMES must be used")
|
|
is FieldInsnNode -> {
|
|
val originalOwner = owner
|
|
owner = remapper.mapFieldOwner(originalOwner, name, desc)
|
|
name = remapper.mapFieldName(originalOwner, name, desc)
|
|
desc = remapper.mapDesc(desc)
|
|
}
|
|
is MethodInsnNode -> {
|
|
val originalOwner = owner
|
|
owner = remapper.mapMethodOwner(originalOwner, name, desc)
|
|
name = remapper.mapMethodName(originalOwner, name, desc)
|
|
desc = remapper.mapDesc(desc)
|
|
}
|
|
is InvokeDynamicInsnNode -> throw UnsupportedOperationException()
|
|
is TypeInsnNode -> desc = remapper.mapType(desc)
|
|
is LdcInsnNode -> cst = remapper.mapValue(cst)
|
|
is MultiANewArrayInsnNode -> desc = remapper.mapType(desc)
|
|
}
|
|
}
|
|
|