diff --git a/src/loom010/kotlin/dev/architectury/plugin/loom/LoomInterface010.kt b/src/loom010/kotlin/dev/architectury/plugin/loom/LoomInterface010.kt index 1cbee13..134f1b3 100644 --- a/src/loom010/kotlin/dev/architectury/plugin/loom/LoomInterface010.kt +++ b/src/loom010/kotlin/dev/architectury/plugin/loom/LoomInterface010.kt @@ -30,6 +30,8 @@ class LoomInterface010(private val project: Project) : LoomInterface { extension.setGenerateSrgTiny(value) } + override val generateTransformerPropertiesInTask = false + override fun settingsPostEdit(action: (config: LoomInterface.LoomRunConfig) -> Unit) { extension.settingsPostEdit.add(Consumer { c -> action(LoomRunConfigImpl(c)) }) } diff --git a/src/loom010Legacy/kotlin/dev/architectury/plugin/loom/LoomInterface010Legacy.kt b/src/loom010Legacy/kotlin/dev/architectury/plugin/loom/LoomInterface010Legacy.kt index b96b927..96f0459 100644 --- a/src/loom010Legacy/kotlin/dev/architectury/plugin/loom/LoomInterface010Legacy.kt +++ b/src/loom010Legacy/kotlin/dev/architectury/plugin/loom/LoomInterface010Legacy.kt @@ -30,6 +30,8 @@ class LoomInterface010Legacy(private val project: Project) : LoomInterface { extension.setGenerateSrgTiny(value) } + override val generateTransformerPropertiesInTask = false + override fun settingsPostEdit(action: (config: LoomInterface.LoomRunConfig) -> Unit) { extension.settingsPostEdit.add(Consumer { c -> action(LoomRunConfigImpl(c)) }) } diff --git a/src/loom011/kotlin/dev/architectury/plugin/loom/LoomInterface011.kt b/src/loom011/kotlin/dev/architectury/plugin/loom/LoomInterface011.kt index 16cec2a..aa3fbd7 100644 --- a/src/loom011/kotlin/dev/architectury/plugin/loom/LoomInterface011.kt +++ b/src/loom011/kotlin/dev/architectury/plugin/loom/LoomInterface011.kt @@ -44,6 +44,8 @@ class LoomInterface011(private val project: Project) : LoomInterface { extension.setGenerateSrgTiny(value) } + override val generateTransformerPropertiesInTask = true + override fun settingsPostEdit(action: (config: LoomInterface.LoomRunConfig) -> Unit) { extension.settingsPostEdit.add(Consumer { c -> action(LoomRunConfigImpl(c)) }) } diff --git a/src/loom06/kotlin/dev/architectury/plugin/loom/LoomInterface06.kt b/src/loom06/kotlin/dev/architectury/plugin/loom/LoomInterface06.kt index c333520..98e1d52 100644 --- a/src/loom06/kotlin/dev/architectury/plugin/loom/LoomInterface06.kt +++ b/src/loom06/kotlin/dev/architectury/plugin/loom/LoomInterface06.kt @@ -33,6 +33,8 @@ class LoomInterface06(private val project: Project) : LoomInterface { extension.generateSrgTiny = value } + override val generateTransformerPropertiesInTask = false + override fun settingsPostEdit(action: (config: LoomInterface.LoomRunConfig) -> Unit) { extension.settingsPostEdit.add(Consumer { c -> action(LoomRunConfigImpl(c)) }) } diff --git a/src/loom09/kotlin/dev/architectury/plugin/loom/LoomInterface09.kt b/src/loom09/kotlin/dev/architectury/plugin/loom/LoomInterface09.kt index 3681510..26c21aa 100644 --- a/src/loom09/kotlin/dev/architectury/plugin/loom/LoomInterface09.kt +++ b/src/loom09/kotlin/dev/architectury/plugin/loom/LoomInterface09.kt @@ -30,6 +30,8 @@ class LoomInterface09(private val project: Project) : LoomInterface { extension.setGenerateSrgTiny(value) } + override val generateTransformerPropertiesInTask = false + override fun settingsPostEdit(action: (config: LoomInterface.LoomRunConfig) -> Unit) { extension.settingsPostEdit.add(Consumer { c -> action(LoomRunConfigImpl(c)) }) } diff --git a/src/main/kotlin/dev/architectury/plugin/ArchitecturyPluginExtension.kt b/src/main/kotlin/dev/architectury/plugin/ArchitecturyPluginExtension.kt index 6263ccb..c9d622e 100644 --- a/src/main/kotlin/dev/architectury/plugin/ArchitecturyPluginExtension.kt +++ b/src/main/kotlin/dev/architectury/plugin/ArchitecturyPluginExtension.kt @@ -91,29 +91,21 @@ open class ArchitectPluginExtension(val project: Project) { init { project.afterEvaluate { - if (transforms.isNotEmpty()) { - StringWriter().also { strWriter -> - TransformersWriter(strWriter).use { writer -> - for (transform in transforms.values) { - project.configurations.getByName(transform.configName).forEach { file -> - transform.transformers.map { it.apply(file.toPath()) } - .forEach { pair -> - writer.write(file.toPath(), pair.clazz, pair.properties) - } - } - } + if (loom.generateTransformerPropertiesInTask) { + // Only apply if this project has the configureLaunch task. + // This is needed because arch plugin can also apply to the root project + // where the task doesn't exist and our task isn't needed either. + if ("configureLaunch" in project.tasks.names) { + val task = project.tasks.register( + "prepareArchitecturyTransformer", + PrepareArchitecturyTransformer::class.java + ) + project.tasks.named("configureLaunch") { + it.dependsOn(task) } - - runtimeTransformerFile.writeText(strWriter.toString()) - } - - val properties = Properties() - properties(transforms.keys.first()).forEach { (key, value) -> - properties.setProperty(key, value) - } - propertiesTransformerFile.writer().use { - properties.store(it, "Architectury Runtime Transformer Properties") } + } else { + prepareTransformer() } } } @@ -131,6 +123,34 @@ open class ArchitectPluginExtension(val project: Project) { ) } + fun prepareTransformer() { + if (transforms.isNotEmpty()) { + StringWriter().also { strWriter -> + TransformersWriter(strWriter).use { writer -> + for (transform in transforms.values) { + project.configurations.getByName(transform.configName).forEach { file -> + transform.transformers.map { it.apply(file.toPath()) } + .forEach { pair -> + writer.write(file.toPath(), pair.clazz, pair.properties) + } + } + } + } + + runtimeTransformerFile.writeText(strWriter.toString()) + } + + + val properties = Properties() + properties(transforms.keys.first()).forEach { (key, value) -> + properties.setProperty(key, value) + } + propertiesTransformerFile.writer().use { + properties.store(it, "Architectury Runtime Transformer Properties") + } + } + } + private fun getCompileClasspath(): Iterable { return project.configurations.findByName("architecturyTransformerClasspath") ?: project.configurations.getByName("compileClasspath") diff --git a/src/main/kotlin/dev/architectury/plugin/PrepareArchitecturyTransformer.kt b/src/main/kotlin/dev/architectury/plugin/PrepareArchitecturyTransformer.kt new file mode 100644 index 0000000..24298bb --- /dev/null +++ b/src/main/kotlin/dev/architectury/plugin/PrepareArchitecturyTransformer.kt @@ -0,0 +1,11 @@ +package dev.architectury.plugin + +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.TaskAction + +open class PrepareArchitecturyTransformer : DefaultTask() { + @TaskAction + fun run() { + project.extensions.getByType(ArchitectPluginExtension::class.java).prepareTransformer() + } +} diff --git a/src/main/kotlin/dev/architectury/plugin/loom/LoomInterface.kt b/src/main/kotlin/dev/architectury/plugin/loom/LoomInterface.kt index ba1b36d..d1a0d7c 100644 --- a/src/main/kotlin/dev/architectury/plugin/loom/LoomInterface.kt +++ b/src/main/kotlin/dev/architectury/plugin/loom/LoomInterface.kt @@ -12,6 +12,16 @@ interface LoomInterface { val refmapName: String var generateSrgTiny: Boolean + /** + * Loom 0.11+ has to generate the runtime transformer properties file + * in a separate hook that is guaranteed to run after mod dep processing. + * (Which is a task hooked to `configureLaunch`.) + * This is just unfortunate `afterEvaluate` ordering, sadly. + * + * See [architectury-loom#72](https://github.com/architectury/architectury-loom/issues/72) + */ + val generateTransformerPropertiesInTask: Boolean + fun settingsPostEdit(action: (config: LoomRunConfig) -> Unit) fun setIdeConfigGenerated() fun setRemapJarInput(task: Jar, archiveFile: Provider)