aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Herzig <jonas@spark-squared.com>2021-11-13 10:09:04 +0100
committerJonas Herzig <jonas@spark-squared.com>2021-11-13 10:28:09 +0100
commitf9fe968c431766ab0937f1b717700d2afa39c9bb (patch)
tree885b7f6051de70094b46a821d09d19d214961cea
parent26107cde7a9c47e444878736a9c34b64744c5f00 (diff)
downloadRemap-f9fe968c431766ab0937f1b717700d2afa39c9bb.tar.gz
Remap-f9fe968c431766ab0937f1b717700d2afa39c9bb.tar.bz2
Remap-f9fe968c431766ab0937f1b717700d2afa39c9bb.zip
Fix remapping of `@Invoker`s with unusual method names
-rw-r--r--src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt6
-rw-r--r--src/test/kotlin/com/replaymod/gradle/remap/mapper/mixin/TestMixinAccessors.kt17
2 files changed, 21 insertions, 2 deletions
diff --git a/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt b/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt
index a71c4d1..210e2d4 100644
--- a/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt
+++ b/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt
@@ -437,7 +437,9 @@ internal class PsiMapper(
private fun remapAccessors(mapping: ClassMapping<*, *>) {
file.accept(object : JavaRecursiveElementVisitor() {
override fun visitMethod(method: PsiMethod) {
- val annotation = method.getAnnotation(CLASS_ACCESSOR) ?: method.getAnnotation(CLASS_INVOKER) ?: return
+ val accessorAnnotation = method.getAnnotation(CLASS_ACCESSOR)
+ val invokerAnnotation = method.getAnnotation(CLASS_INVOKER)
+ val annotation = accessorAnnotation ?: invokerAnnotation ?: return
val methodName = method.name
val targetByName = when {
@@ -451,7 +453,7 @@ internal class PsiMapper(
it.name == null || it.name == "value"
}?.literalValue ?: targetByName ?: throw IllegalArgumentException("Cannot determine accessor target for $method")
- val mapped = if (methodName.startsWith("invoke")) {
+ val mapped = if (invokerAnnotation != null) {
mapping.methodMappings.find { it.obfuscatedName == target }?.deobfuscatedName
} else {
mapping.findFieldMapping(target)?.deobfuscatedName
diff --git a/src/test/kotlin/com/replaymod/gradle/remap/mapper/mixin/TestMixinAccessors.kt b/src/test/kotlin/com/replaymod/gradle/remap/mapper/mixin/TestMixinAccessors.kt
index aae4cba..6d9fb38 100644
--- a/src/test/kotlin/com/replaymod/gradle/remap/mapper/mixin/TestMixinAccessors.kt
+++ b/src/test/kotlin/com/replaymod/gradle/remap/mapper/mixin/TestMixinAccessors.kt
@@ -27,6 +27,23 @@ class TestMixinAccessors {
}
@Test
+ fun `remaps @Invoker with non-standard method name`() {
+ TestData.remap("""
+ @org.spongepowered.asm.mixin.Mixin(a.pkg.A.class)
+ interface MixinA {
+ @org.spongepowered.asm.mixin.gen.Invoker("aMethod")
+ void arbitraryName();
+ }
+ """.trimIndent()) shouldBe """
+ @org.spongepowered.asm.mixin.Mixin(b.pkg.B.class)
+ interface MixinA {
+ @org.spongepowered.asm.mixin.gen.Invoker("bMethod")
+ void arbitraryName();
+ }
+ """.trimIndent()
+ }
+
+ @Test
fun `remaps @Accessor`() {
TestData.remap("""
@org.spongepowered.asm.mixin.Mixin(a.pkg.A.class)