aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt13
-rw-r--r--src/test/java/a/pkg/A.java12
-rw-r--r--src/test/java/b/pkg/B.java12
-rw-r--r--src/test/kotlin/com/replaymod/gradle/remap/mapper/TestMixinInjections.kt38
4 files changed, 69 insertions, 6 deletions
diff --git a/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt b/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt
index a2be57a..3adc4f1 100644
--- a/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt
+++ b/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt
@@ -339,14 +339,15 @@ internal class PsiMapper(
}}")
}
targetMethods.firstOrNull()
- } ?: continue
- val mappedName = findMapping(targetMethod)?.deobfuscatedName ?: continue
+ }
+ val mappedName = targetMethod?.let(::findMapping)?.deobfuscatedName ?: targetName
val ambiguousName = mapping.methodMappings.count { it.deobfuscatedName == mappedName } > 1
- val mapped = mappedName + if (ambiguousName) {
- remapMethodDesc(ClassUtil.getAsmMethodSignature(targetMethod))
- } else {
- ""
+ val mapped = mappedName + when {
+ ambiguousName && targetMethod != null ->
+ remapMethodDesc(ClassUtil.getAsmMethodSignature(targetMethod))
+ targetDesc != null -> remapMethodDesc(targetDesc)
+ else -> ""
}
if (mapped != literalValue) {
diff --git a/src/test/java/a/pkg/A.java b/src/test/java/a/pkg/A.java
index d91a6e5..3143407 100644
--- a/src/test/java/a/pkg/A.java
+++ b/src/test/java/a/pkg/A.java
@@ -3,6 +3,12 @@ package a.pkg;
public class A extends AParent implements AInterface {
private int aField;
+ public A() {
+ }
+
+ public A(A arg) {
+ }
+
public void aMethod() {
}
@@ -21,6 +27,12 @@ public class A extends AParent implements AInterface {
public void commonOverloaded(A arg) {
}
+ public void unmappedOverloaded(Object arg) {
+ }
+
+ public void unmappedOverloaded(A arg) {
+ }
+
@Override
public void aInterfaceMethod() {
}
diff --git a/src/test/java/b/pkg/B.java b/src/test/java/b/pkg/B.java
index 48abdac..030ffa2 100644
--- a/src/test/java/b/pkg/B.java
+++ b/src/test/java/b/pkg/B.java
@@ -3,6 +3,12 @@ package b.pkg;
public class B extends BParent implements BInterface {
private int bField;
+ public B() {
+ }
+
+ public B(B arg) {
+ }
+
public void bMethod() {
}
@@ -21,6 +27,12 @@ public class B extends BParent implements BInterface {
public void commonOverloaded(B arg) {
}
+ public void unmappedOverloaded(Object arg) {
+ }
+
+ public void unmappedOverloaded(B arg) {
+ }
+
@Override
public void bInterfaceMethod() {
}
diff --git a/src/test/kotlin/com/replaymod/gradle/remap/mapper/TestMixinInjections.kt b/src/test/kotlin/com/replaymod/gradle/remap/mapper/TestMixinInjections.kt
index 7b9750e..3f8d55f 100644
--- a/src/test/kotlin/com/replaymod/gradle/remap/mapper/TestMixinInjections.kt
+++ b/src/test/kotlin/com/replaymod/gradle/remap/mapper/TestMixinInjections.kt
@@ -99,4 +99,42 @@ class TestMixinInjections {
}
""".trimIndent()
}
+
+ @Test
+ fun `remaps qualified method argument without mappings for target`() {
+ TestData.remap("""
+ @org.spongepowered.asm.mixin.Mixin(a.pkg.A.class)
+ class MixinA {
+ @org.spongepowered.asm.mixin.injection.Inject(method = "unmappedOverloaded(La/pkg/A;)V")
+ private void test() {}
+ }
+ """.trimIndent()) shouldBe """
+ @org.spongepowered.asm.mixin.Mixin(b.pkg.B.class)
+ class MixinA {
+ @org.spongepowered.asm.mixin.injection.Inject(method = "unmappedOverloaded(Lb/pkg/B;)V")
+ private void test() {}
+ }
+ """.trimIndent()
+ }
+
+ @Test
+ fun `remaps constructor target`() {
+ TestData.remap("""
+ @org.spongepowered.asm.mixin.Mixin(a.pkg.A.class)
+ class MixinA {
+ @org.spongepowered.asm.mixin.injection.Inject(method = "<init>()V")
+ private void test() {}
+ @org.spongepowered.asm.mixin.injection.Inject(method = "<init>(La/pkg/A;)V")
+ private void testArg() {}
+ }
+ """.trimIndent()) shouldBe """
+ @org.spongepowered.asm.mixin.Mixin(b.pkg.B.class)
+ class MixinA {
+ @org.spongepowered.asm.mixin.injection.Inject(method = "<init>()V")
+ private void test() {}
+ @org.spongepowered.asm.mixin.injection.Inject(method = "<init>(Lb/pkg/B;)V")
+ private void testArg() {}
+ }
+ """.trimIndent()
+ }
} \ No newline at end of file