mirror of
https://github.com/architectury/architectury-plugin.git
synced 2026-03-28 04:07:01 -05:00
Apply remap to production jar
This commit is contained in:
@@ -3,8 +3,14 @@ package dev.architectury.plugin
|
||||
import dev.architectury.plugin.utils.GradleSupport
|
||||
import dev.architectury.transformer.Transform
|
||||
import dev.architectury.transformer.Transformer
|
||||
import dev.architectury.transformer.input.OpenedFileAccess
|
||||
import dev.architectury.transformer.shadowed.impl.com.google.gson.Gson
|
||||
import dev.architectury.transformer.shadowed.impl.org.objectweb.asm.ClassReader
|
||||
import dev.architectury.transformer.shadowed.impl.org.objectweb.asm.ClassWriter
|
||||
import dev.architectury.transformer.shadowed.impl.org.objectweb.asm.Opcodes
|
||||
import dev.architectury.transformer.shadowed.impl.org.objectweb.asm.tree.ClassNode
|
||||
import dev.architectury.transformer.transformers.BuiltinProperties
|
||||
import dev.architectury.transformer.transformers.base.ClassEditTransformer
|
||||
import dev.architectury.transformer.util.Logger
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.RegularFileProperty
|
||||
@@ -14,6 +20,7 @@ import org.gradle.api.tasks.Internal
|
||||
import org.gradle.api.tasks.TaskAction
|
||||
import org.gradle.jvm.tasks.Jar
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import java.util.*
|
||||
import java.util.function.BiConsumer
|
||||
@@ -27,6 +34,9 @@ open class TransformingTask : Jar() {
|
||||
@Internal
|
||||
val transformers: ListProperty<Transformer> = project.objects.listProperty(Transformer::class.java)
|
||||
|
||||
@Internal
|
||||
val postTransformers: ListProperty<ClassEditTransformer> = project.objects.listProperty(ClassEditTransformer::class.java)
|
||||
|
||||
@Internal
|
||||
var platform: String? = null
|
||||
|
||||
@@ -47,6 +57,32 @@ open class TransformingTask : Jar() {
|
||||
Logger.debug("============================")
|
||||
Logger.debug("")
|
||||
Transform.runTransformers(input, output, transformers.get())
|
||||
|
||||
if (postTransformers.get().isNotEmpty()) {
|
||||
val postTransformers = postTransformers.get()
|
||||
val apply = { access: OpenedFileAccess ->
|
||||
access.handle({ path: String -> path.endsWith(".class") }) { path: String, bytes: ByteArray ->
|
||||
val reader = ClassReader(bytes)
|
||||
if (reader.access and Opcodes.ACC_MODULE == 0) {
|
||||
var node = ClassNode(Opcodes.ASM9)
|
||||
reader.accept(node, 0)
|
||||
postTransformers.forEach { node = it.doEdit(path, node) }
|
||||
access.modifyFile(path, node.toByteArray())
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Files.isDirectory(output)) {
|
||||
OpenedFileAccess.ofDirectory(output).use(apply)
|
||||
} else {
|
||||
OpenedFileAccess.ofJar(output).use(apply)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun ClassNode.toByteArray(): ByteArray {
|
||||
val writer = ClassWriter(0)
|
||||
this.accept(writer)
|
||||
return writer.toByteArray()
|
||||
}
|
||||
|
||||
operator fun invoke(transformer: Transformer) {
|
||||
@@ -66,6 +102,10 @@ open class TransformingTask : Jar() {
|
||||
})
|
||||
}
|
||||
|
||||
fun addPost(transformer: ClassEditTransformer) {
|
||||
postTransformers.add(transformer)
|
||||
}
|
||||
|
||||
fun add(transformer: Transformer, config: MutableMap<String, Any>.(file: Path) -> Unit) {
|
||||
add(transformer, BiConsumer { file, map ->
|
||||
config(map, file)
|
||||
|
||||
Reference in New Issue
Block a user