forked from openrs2/openrs2
parent
d9f874906d
commit
c02fe030fa
@ -1,40 +0,0 @@ |
||||
package dev.openrs2.asm.remap; |
||||
|
||||
import java.util.List; |
||||
|
||||
import dev.openrs2.asm.InsnMatcher; |
||||
import org.objectweb.asm.commons.Remapper; |
||||
import org.objectweb.asm.tree.AbstractInsnNode; |
||||
import org.objectweb.asm.tree.LdcInsnNode; |
||||
import org.objectweb.asm.tree.MethodInsnNode; |
||||
import org.objectweb.asm.tree.MethodNode; |
||||
|
||||
public final class ClassForNameRemapper { |
||||
private static final InsnMatcher INVOKE_MATCHER = InsnMatcher.compile("LDC INVOKESTATIC"); |
||||
|
||||
private static boolean isClassForName(List<AbstractInsnNode> match) { |
||||
var ldc = (LdcInsnNode) match.get(0); |
||||
if (!(ldc.cst instanceof String)) { |
||||
return false; |
||||
} |
||||
|
||||
var invokestatic = (MethodInsnNode) match.get(1); |
||||
return invokestatic.owner.equals("java/lang/Class") && |
||||
invokestatic.name.equals("forName") && |
||||
invokestatic.desc.equals("(Ljava/lang/String;)Ljava/lang/Class;"); |
||||
} |
||||
|
||||
public static void remap(Remapper remapper, MethodNode method) { |
||||
INVOKE_MATCHER.match(method).filter(ClassForNameRemapper::isClassForName).forEach(match -> { |
||||
var ldc = (LdcInsnNode) match.get(0); |
||||
var name = remapper.map((String) ldc.cst); |
||||
if (name != null) { |
||||
ldc.cst = name; |
||||
} |
||||
}); |
||||
} |
||||
|
||||
private ClassForNameRemapper() { |
||||
/* empty */ |
||||
} |
||||
} |
@ -0,0 +1,35 @@ |
||||
package dev.openrs2.asm.remap |
||||
|
||||
import dev.openrs2.asm.InsnMatcher |
||||
import org.objectweb.asm.commons.Remapper |
||||
import org.objectweb.asm.tree.AbstractInsnNode |
||||
import org.objectweb.asm.tree.LdcInsnNode |
||||
import org.objectweb.asm.tree.MethodInsnNode |
||||
import org.objectweb.asm.tree.MethodNode |
||||
|
||||
object ClassForNameRemapper { |
||||
private val INVOKE_MATCHER = InsnMatcher.compile("LDC INVOKESTATIC") |
||||
|
||||
private fun isClassForName(match: List<AbstractInsnNode>): Boolean { |
||||
val ldc = match[0] as LdcInsnNode |
||||
if (ldc.cst !is String) { |
||||
return false |
||||
} |
||||
|
||||
val invokestatic = match[1] as MethodInsnNode |
||||
return invokestatic.owner == "java/lang/Class" |
||||
&& invokestatic.name == "forName" |
||||
&& invokestatic.desc == "(Ljava/lang/String;)Ljava/lang/Class;" |
||||
} |
||||
|
||||
@JvmStatic |
||||
fun remap(remapper: Remapper, method: MethodNode) { |
||||
INVOKE_MATCHER.match(method).filter(ClassForNameRemapper::isClassForName).forEach { |
||||
val ldc = it[0] as LdcInsnNode |
||||
val name = remapper.map(ldc.cst as String) |
||||
if (name != null) { |
||||
ldc.cst = name |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue