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