Skip to content

Commit 9e5c06d

Browse files
authored
Test relocation of ModuleMainClass in module-info (#2109)
1 parent e37770c commit 9e5c06d

1 file changed

Lines changed: 41 additions & 0 deletions

File tree

src/test/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/BytecodeRemappingTest.kt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@ import org.junit.jupiter.params.provider.ValueSource
2222
import org.vafer.jdeb.shaded.objectweb.asm.AnnotationVisitor
2323
import org.vafer.jdeb.shaded.objectweb.asm.ClassReader
2424
import org.vafer.jdeb.shaded.objectweb.asm.ClassVisitor
25+
import org.vafer.jdeb.shaded.objectweb.asm.ClassWriter
2526
import org.vafer.jdeb.shaded.objectweb.asm.FieldVisitor
2627
import org.vafer.jdeb.shaded.objectweb.asm.Label
2728
import org.vafer.jdeb.shaded.objectweb.asm.MethodVisitor
29+
import org.vafer.jdeb.shaded.objectweb.asm.ModuleVisitor
2830
import org.vafer.jdeb.shaded.objectweb.asm.Opcodes
2931

3032
/**
@@ -221,6 +223,45 @@ class BytecodeRemappingTest {
221223
)
222224
}
223225

226+
@Test
227+
fun moduleMainClassIsRelocated() {
228+
val originalMainClass =
229+
$$"com/github/jengelman/gradle/plugins/shadow/internal/BytecodeRemappingTest$FixtureBase"
230+
val writer = ClassWriter(0)
231+
writer.visit(Opcodes.V9, Opcodes.ACC_MODULE, "module-info", null, null, null)
232+
writer.visitModule("example.module", 0, null).apply { visitMainClass(originalMainClass) }
233+
writer.visitEnd()
234+
val file =
235+
tempDir.resolve("module-info.class").toFile().apply { writeBytes(writer.toByteArray()) }
236+
val details =
237+
object : FileCopyDetails by noOpDelegate() {
238+
override fun getPath(): String = file.name
239+
240+
override fun getFile(): File = file
241+
}
242+
243+
val result = details.remapClass(relocators)
244+
var remappedMainClass: String? = null
245+
ClassReader(result)
246+
.accept(
247+
object : ClassVisitor(Opcodes.ASM9) {
248+
override fun visitModule(
249+
name: String,
250+
access: Int,
251+
version: String?,
252+
): ModuleVisitor =
253+
object : ModuleVisitor(Opcodes.ASM9) {
254+
override fun visitMainClass(mainClass: String) {
255+
remappedMainClass = mainClass
256+
}
257+
}
258+
},
259+
0,
260+
)
261+
262+
assertThat(remappedMainClass).isEqualTo(relocatedFixtureBase)
263+
}
264+
224265
@Test
225266
fun localVariableIsRelocated() {
226267
val result = fixtureSubjectDetails.remapClass(relocators)

0 commit comments

Comments
 (0)