forked from openrs2/openrs2
My rough plan for combining static scrambling and remapping is to split Library::remap into three passes: * Remove static methods, fields and initializers from the library, storing them in a temporary location. * Pass all classes through ClassNodeRemapper, as we do now. * Add static methods, fields and initializers to their new classes, remapping as we do so. This ensures a ClassNode is never in a state where it has a mixture of remapped and non-remapped fields, methods or instructions. This is important to ensure no conflicts can occur when we use the refactored names from the NameMap, rather than the auto-generated names. It means TypedRemapper needs the ability to provide the instructions that make up a field's initializer, such that Library::remap can move these instructions to a different InsnList. The new getFieldInitializer method and FieldInitializer type support this. Signed-off-by: Graham <gpe@openrs2.dev>bzip2
parent
1a41982b76
commit
a3ec4ec322
@ -0,0 +1,14 @@ |
|||||||
|
package dev.openrs2.asm.classpath |
||||||
|
|
||||||
|
import dev.openrs2.asm.MemberRef |
||||||
|
import org.objectweb.asm.Opcodes |
||||||
|
import org.objectweb.asm.tree.AbstractInsnNode |
||||||
|
import org.objectweb.asm.tree.FieldInsnNode |
||||||
|
|
||||||
|
class FieldInitializer(val instructions: List<AbstractInsnNode>, val version: Int, val maxStack: Int) { |
||||||
|
val dependencies = instructions.asSequence() |
||||||
|
.filterIsInstance<FieldInsnNode>() |
||||||
|
.filter { it.opcode == Opcodes.GETSTATIC } |
||||||
|
.map(::MemberRef) |
||||||
|
.toSet() |
||||||
|
} |
Loading…
Reference in new issue