From 51cf5a796dbf3a185bb80044976dc8f32ebbf040 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Tue, 24 May 2022 15:13:42 +0200 Subject: Properly support new expression matching in @Pattern Used to only compare the arguments, nether the class nor the qualifier (the outer class instance for inner classes constructor calls). --- .../gradle/remap/pattern/TestNewExpression.kt | 69 ++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/test/kotlin/com/replaymod/gradle/remap/pattern/TestNewExpression.kt (limited to 'src/test/kotlin/com/replaymod/gradle/remap') diff --git a/src/test/kotlin/com/replaymod/gradle/remap/pattern/TestNewExpression.kt b/src/test/kotlin/com/replaymod/gradle/remap/pattern/TestNewExpression.kt new file mode 100644 index 0000000..669cffb --- /dev/null +++ b/src/test/kotlin/com/replaymod/gradle/remap/pattern/TestNewExpression.kt @@ -0,0 +1,69 @@ +package com.replaymod.gradle.remap.pattern + +import com.replaymod.gradle.remap.util.TestData +import io.kotest.matchers.shouldBe +import org.junit.jupiter.api.Test + +class TestNewExpression { + @Test + fun `should find regular constructor`() { + TestData.remap(""" + class Test { + private void test() { + new a.pkg.A(null); + new a.pkg.A().new a.pkg.A.Inner(); + new a.pkg.AParent(null); + } + } + """.trimIndent(), """ + @remap.Pattern + private a.pkg.A matchNew(a.pkg.A arg) { + return new a.pkg.A(arg); + } + """.trimIndent(), """ + @remap.Pattern + private b.pkg.B matchNew(b.pkg.B arg) { + return arg; + } + """.trimIndent()) shouldBe """ + class Test { + private void test() { + null; + new b.pkg.B().new b.pkg.B.Inner(); + new b.pkg.BParent(null); + } + } + """.trimIndent() + } + + @Test + fun `should find inner class constructor`() { + TestData.remap(""" + class Test { + private void test() { + new a.pkg.A(null); + new a.pkg.A().new Inner(); + new a.pkg.AParent(null); + } + } + """.trimIndent(), """ + @remap.Pattern + private a.pkg.A.Inner matchNew(a.pkg.A arg) { + return arg.new a.pkg.A.Inner(); + } + """.trimIndent(), """ + @remap.Pattern + private b.pkg.B matchNew(b.pkg.B arg) { + return arg; + } + """.trimIndent()) shouldBe """ + class Test { + private void test() { + new b.pkg.B(null); + new b.pkg.B(); + new b.pkg.BParent(null); + } + } + """.trimIndent() + } +} \ No newline at end of file -- cgit