From 430cb44d569b5a176abfdb71889ac3ff5b7b71af Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Wed, 6 Sep 2023 14:17:59 -0400 Subject: [PATCH] Enable KSP proguard rule gen in ir tests + fix them! (#492) * Enable KSP proguard rule gen in ir tests * Add a proguard rules validation check * Add another included build for rule gen * Don't add KSP deps in afterEvaluate * Don't enable it on K2 * It's a string * Use find * Always add dep for now * Fix test dir check --- .../moshix/ir/gradle/MoshiGradleSubplugin.kt | 36 ++++++++++--------- moshi-ir/moshi-kotlin-tests/build.gradle.kts | 19 ++++++++++ moshi-ir/moshi-kotlin-tests/gradle.properties | 2 +- 3 files changed, 40 insertions(+), 17 deletions(-) diff --git a/moshi-ir/moshi-gradle-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/gradle/MoshiGradleSubplugin.kt b/moshi-ir/moshi-gradle-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/gradle/MoshiGradleSubplugin.kt index e8558128..399b9e86 100644 --- a/moshi-ir/moshi-gradle-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/gradle/MoshiGradleSubplugin.kt +++ b/moshi-ir/moshi-gradle-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/gradle/MoshiGradleSubplugin.kt @@ -40,23 +40,27 @@ class MoshiGradleSubplugin : KotlinCompilerPluginSupportPlugin { "Please apply the KSP Gradle plugin ('com.google.devtools.ksp') to your buildscript and try again." ) } - target.afterEvaluate { project -> - // Add the KSP dependency to the appropriate configurations - // In KMP, we only add to androidJvm/jvm targets - val kExtension = project.kotlinExtension - val configurationsToAdd = - if (kExtension is KotlinMultiplatformExtension) { - kExtension.targets - .filter { it.platformType in SUPPORTED_PLATFORMS } - .map { - "ksp${it.targetName.replaceFirstChar { if (it.isLowerCase()) it.titlecase(US) else it.toString() }}" - } - } else { - listOf("ksp") + + fun addKspDep(configurationName: String) { + target.dependencies.add( + configurationName, + "dev.zacsweers.moshix:moshi-proguard-rule-gen:$VERSION" + ) + } + + // Add the KSP dependency to the appropriate configurations + // In KMP, we only add to androidJvm/jvm targets + val kExtension = target.kotlinExtension + if (kExtension is KotlinMultiplatformExtension) { + kExtension.targets + .matching { it.platformType in SUPPORTED_PLATFORMS } + .configureEach { + addKspDep( + "ksp${it.targetName.replaceFirstChar { if (it.isLowerCase()) it.titlecase(US) else it.toString() }}" + ) } - for (config in configurationsToAdd) { - target.dependencies.add(config, "dev.zacsweers.moshix:moshi-proguard-rule-gen:$VERSION") - } + } else { + addKspDep("ksp") } target.extensions.configure(KspExtension::class.java) { // Enable core moshi proguard rule gen diff --git a/moshi-ir/moshi-kotlin-tests/build.gradle.kts b/moshi-ir/moshi-kotlin-tests/build.gradle.kts index da1ddd0f..b9064fbe 100644 --- a/moshi-ir/moshi-kotlin-tests/build.gradle.kts +++ b/moshi-ir/moshi-kotlin-tests/build.gradle.kts @@ -19,12 +19,29 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { alias(libs.plugins.kotlinJvm) alias(libs.plugins.moshix) + alias(libs.plugins.ksp) } moshi { enableSealed.set(true) } +val proguardRuleValidator = + tasks.register("validateProguardRules") { + doNotTrackState("This is a validation task that should always run") + doLast { + logger.lifecycle("Validating proguard rules") + val proguardRulesDir = project.file("build/generated/ksp/test/resources/META-INF/proguard") + check(proguardRulesDir.exists() && proguardRulesDir.listFiles()!!.isNotEmpty()) { + "No proguard rules found! Did you forget to apply the KSP Gradle plugin?" + } + logger.lifecycle("Proguard rules properly generated ✅ ") + } + } + tasks.withType().configureEach { compilerOptions { freeCompilerArgs.addAll("-opt-in=kotlin.ExperimentalStdlibApi") } + if (name == "compileTestKotlin" && project.findProperty("kotlin.experimental.tryK2") != "true") { + finalizedBy(proguardRuleValidator) + } } dependencies { @@ -43,5 +60,7 @@ configurations.configureEach { .using(project(":moshi-ir:moshi-compiler-plugin")) substitute(module("dev.zacsweers.moshix:moshi-sealed-runtime")) .using(project(":moshi-sealed:runtime")) + substitute(module("dev.zacsweers.moshix:moshi-proguard-rule-gen")) + .using(project(":moshi-proguard-rule-gen")) } } diff --git a/moshi-ir/moshi-kotlin-tests/gradle.properties b/moshi-ir/moshi-kotlin-tests/gradle.properties index 35ed4a26..c90f60c8 100644 --- a/moshi-ir/moshi-kotlin-tests/gradle.properties +++ b/moshi-ir/moshi-kotlin-tests/gradle.properties @@ -1 +1 @@ -moshix.generateProguardRules=false \ No newline at end of file +moshix.generateProguardRules=true \ No newline at end of file