@@ -22,9 +22,11 @@ import org.junit.jupiter.params.provider.ValueSource
2222import org.vafer.jdeb.shaded.objectweb.asm.AnnotationVisitor
2323import org.vafer.jdeb.shaded.objectweb.asm.ClassReader
2424import org.vafer.jdeb.shaded.objectweb.asm.ClassVisitor
25+ import org.vafer.jdeb.shaded.objectweb.asm.ClassWriter
2526import org.vafer.jdeb.shaded.objectweb.asm.FieldVisitor
2627import org.vafer.jdeb.shaded.objectweb.asm.Label
2728import org.vafer.jdeb.shaded.objectweb.asm.MethodVisitor
29+ import org.vafer.jdeb.shaded.objectweb.asm.ModuleVisitor
2830import 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