diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt | 10 | ||||
-rw-r--r-- | src/test/java/a/pkg/A.java | 2 | ||||
-rw-r--r-- | src/test/java/b/pkg/B.java | 2 | ||||
-rw-r--r-- | src/test/kotlin/com/replaymod/gradle/remap/pattern/TestChangeMerging.kt | 36 | ||||
-rw-r--r-- | src/test/kotlin/com/replaymod/gradle/remap/util/TestData.kt | 8 |
5 files changed, 55 insertions, 3 deletions
diff --git a/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt b/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt index a8d9f2a..c620c4c 100644 --- a/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt +++ b/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt @@ -31,7 +31,7 @@ internal class PsiMapper( ) { private val mixinMappings = mutableMapOf<String, ClassMapping<*, *>>() private val errors = mutableListOf<Pair<Int, String>>() - private val changes = TreeMap<TextRange, String>(Comparator.comparing<TextRange, Int> { it.startOffset }) + private val changes = TreeMap<TextRange, String>(compareBy<TextRange> { it.startOffset }.thenBy { it.endOffset }) private fun error(at: PsiElement, message: String) { val line = StringUtil.offsetToLineNumber(file.text, at.textOffset) @@ -40,7 +40,13 @@ internal class PsiMapper( private fun replace(e: PsiElement, with: String) = replace(e.textRange, with) private fun replace(textRange: TextRange, with: String) { - changes[textRange] = with + changes.compute(textRange) { _, replacement -> + if (replacement != null) { + replacement + with + } else { + with + } + } } private fun replaceIdentifier(parent: PsiElement, with: String) { diff --git a/src/test/java/a/pkg/A.java b/src/test/java/a/pkg/A.java index b5480d4..32fa2a9 100644 --- a/src/test/java/a/pkg/A.java +++ b/src/test/java/a/pkg/A.java @@ -10,6 +10,8 @@ public class A extends AParent implements AInterface { public A(A arg) { } + public static A create() { return new A(); } + public void aMethod() { aInterfaceMethod(); } diff --git a/src/test/java/b/pkg/B.java b/src/test/java/b/pkg/B.java index 88f46cf..3af7381 100644 --- a/src/test/java/b/pkg/B.java +++ b/src/test/java/b/pkg/B.java @@ -10,6 +10,8 @@ public class B extends BParent implements BInterface { public B(B arg) { } + public static B create() { return new B(); } + public void bMethod() { bInterfaceMethod(); } diff --git a/src/test/kotlin/com/replaymod/gradle/remap/pattern/TestChangeMerging.kt b/src/test/kotlin/com/replaymod/gradle/remap/pattern/TestChangeMerging.kt new file mode 100644 index 0000000..e8b86d2 --- /dev/null +++ b/src/test/kotlin/com/replaymod/gradle/remap/pattern/TestChangeMerging.kt @@ -0,0 +1,36 @@ +package com.replaymod.gradle.remap.pattern + +import com.replaymod.gradle.remap.util.TestData +import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.shouldBe +import io.kotest.matchers.string.shouldContain +import org.junit.jupiter.api.Test + +class TestChangeMerging { + @Test + fun `should work when mixed with remapping`() { + TestData.remap(""" + class Test { + private void test() { + a.pkg.A.create().aMethod(); + } + } + """.trimIndent(), """ + @remap.Pattern + private void addWrapping(a.pkg.A a) { + a.aMethod(); + } + """.trimIndent(), """ + @remap.Pattern + private void addWrapping(a.pkg.A a) { + (((a.bMethod()))); + } + """.trimIndent()) shouldBe """ + class Test { + private void test() { + (((b.pkg.B.create().bMethod()))); + } + } + """.trimIndent() + } +}
\ No newline at end of file diff --git a/src/test/kotlin/com/replaymod/gradle/remap/util/TestData.kt b/src/test/kotlin/com/replaymod/gradle/remap/util/TestData.kt index 0f83373..adb6f52 100644 --- a/src/test/kotlin/com/replaymod/gradle/remap/util/TestData.kt +++ b/src/test/kotlin/com/replaymod/gradle/remap/util/TestData.kt @@ -41,9 +41,15 @@ object TestData { findClasspathEntry("org.spongepowered.asm.mixin.Mixin"), findClasspathEntry("a.pkg.A"), ) + patternAnnotation = "remap.Pattern" } - fun remap(content: String): String = transformer.remap(mapOf("test.java" to content))["test.java"]!!.first + fun remap(content: String, patternsBefore: String = "", patternsAfter: String = ""): String = transformer.remap(mapOf( + "test.java" to content, + "pattern.java" to "class Patterns {\n$patternsBefore\n}", + ), mapOf( + "pattern.java" to "class Patterns {\n$patternsAfter\n}", + ))["test.java"]!!.first fun remapWithErrors(content: String) = transformer.remap(mapOf("test.java" to content))["test.java"]!! fun remapKt(content: String): String = transformer.remap(mapOf("test.kt" to content))["test.kt"]!!.first |