From 0a5aadad588a357130b3bbfc7b540b1a431e5c17 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sun, 15 Oct 2023 13:58:55 -0400 Subject: [PATCH 1/5] Use new Gradle 8.4 configuration APIs --- keeper-gradle-plugin/build.gradle.kts | 7 ++++--- .../java/com/slack/keeper/InferAndroidTestKeepRules.kt | 5 +++-- .../src/main/java/com/slack/keeper/KeeperPlugin.kt | 4 +--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/keeper-gradle-plugin/build.gradle.kts b/keeper-gradle-plugin/build.gradle.kts index 337b23aa..f8809822 100644 --- a/keeper-gradle-plugin/build.gradle.kts +++ b/keeper-gradle-plugin/build.gradle.kts @@ -108,9 +108,10 @@ mavenPublishing { // Fix missing implicit task dependency in Gradle's test kit tasks.named("processTestResources") { dependsOn("pluginUnderTestMetadata") } -val addTestPlugin: Configuration = configurations.create("addTestPlugin") +// TODO how can we lazily chain this to other configurations? +val addTestPlugin = configurations.dependencyScope("addTestPlugin").get() -configurations { testImplementation.get().extendsFrom(addTestPlugin) } +configurations { testImplementation.configure { extendsFrom(addTestPlugin) } } tasks.pluginUnderTestMetadata { // make sure the test can access plugins for coordination. @@ -123,7 +124,7 @@ dependencies { compileOnly(libs.zipflinger) compileOnly(libs.agp) - addTestPlugin(libs.agp) + addTestPlugin.invoke(libs.agp) addTestPlugin(libs.kgp) addTestPlugin(libs.kgp.api) testImplementation(libs.javapoet) diff --git a/keeper-gradle-plugin/src/main/java/com/slack/keeper/InferAndroidTestKeepRules.kt b/keeper-gradle-plugin/src/main/java/com/slack/keeper/InferAndroidTestKeepRules.kt index 50078224..283d8c27 100644 --- a/keeper-gradle-plugin/src/main/java/com/slack/keeper/InferAndroidTestKeepRules.kt +++ b/keeper-gradle-plugin/src/main/java/com/slack/keeper/InferAndroidTestKeepRules.kt @@ -18,7 +18,8 @@ package com.slack.keeper import java.util.Locale import javax.inject.Inject import org.gradle.api.DefaultTask -import org.gradle.api.artifacts.Configuration +import org.gradle.api.NamedDomainObjectProvider +import org.gradle.api.artifacts.ResolvableConfiguration import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.RegularFile import org.gradle.api.file.RegularFileProperty @@ -136,7 +137,7 @@ constructor(private val execOps: ExecOperations) : DefaultTask() { enableAssertions: Property, extensionJvmArgs: ListProperty, traceReferencesArgs: ListProperty, - r8Configuration: Configuration + r8Configuration: NamedDomainObjectProvider ): InferAndroidTestKeepRules.() -> Unit = { if (automaticallyAddR8Repo.get()) { // This is the maven repo where r8 tagged releases are hosted. Only the r8 artifact is diff --git a/keeper-gradle-plugin/src/main/java/com/slack/keeper/KeeperPlugin.kt b/keeper-gradle-plugin/src/main/java/com/slack/keeper/KeeperPlugin.kt index 6ed75bbd..2cd474a8 100644 --- a/keeper-gradle-plugin/src/main/java/com/slack/keeper/KeeperPlugin.kt +++ b/keeper-gradle-plugin/src/main/java/com/slack/keeper/KeeperPlugin.kt @@ -225,11 +225,9 @@ public class KeeperPlugin : Plugin { ) { // Set up r8 configuration val r8Configuration = - configurations.create(CONFIGURATION_NAME) { + configurations.resolvable(CONFIGURATION_NAME) { description = "R8 dependencies for Keeper. This is used solely for the TraceReferences CLI" isVisible = false - isCanBeConsumed = false - isCanBeResolved = true defaultDependencies { logger.debug("keeper r8 default version: $TRACE_REFERENCES_DEFAULT_VERSION") add(project.dependencies.create("com.android.tools:r8:$TRACE_REFERENCES_DEFAULT_VERSION")) From 0cb2d5ad35523c14ba90831b17fab7ccee7d6b0e Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sun, 15 Oct 2023 14:00:30 -0400 Subject: [PATCH 2/5] Update to Kotlin language version 1.9 --- keeper-gradle-plugin/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keeper-gradle-plugin/build.gradle.kts b/keeper-gradle-plugin/build.gradle.kts index f8809822..5c1afb1e 100644 --- a/keeper-gradle-plugin/build.gradle.kts +++ b/keeper-gradle-plugin/build.gradle.kts @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("jvm") version libs.versions.kotlin.get() `java-gradle-plugin` - id("org.jetbrains.dokka") version "1.8.20" + id("org.jetbrains.dokka") version "1.9.0" alias(libs.plugins.mavenPublish) alias(libs.plugins.binaryCompatibilityValidator) id("org.jetbrains.kotlin.plugin.sam.with.receiver") version libs.versions.kotlin.get() @@ -35,8 +35,8 @@ tasks.withType().configureEach { compilerOptions { jvmTarget.set(JvmTarget.JVM_17) // Match AGP's requirement // Because Gradle's Kotlin handling is stupid, this falls out of date quickly - apiVersion.set(KotlinVersion.KOTLIN_1_8) - languageVersion.set(KotlinVersion.KOTLIN_1_8) + apiVersion.set(KotlinVersion.KOTLIN_1_9) + languageVersion.set(KotlinVersion.KOTLIN_1_9) // freeCompilerArgs.add(listOf("-progressive")) // We use class SAM conversions because lambdas compiled into invokedynamic are not // Serializable, which causes accidental headaches with Gradle configuration caching. It's From fd4619a3351d965e2d69e1fdd93102724d95b74b Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sun, 15 Oct 2023 14:01:46 -0400 Subject: [PATCH 3/5] Update docs refs --- keeper-gradle-plugin/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keeper-gradle-plugin/build.gradle.kts b/keeper-gradle-plugin/build.gradle.kts index 5c1afb1e..b42b3bc0 100644 --- a/keeper-gradle-plugin/build.gradle.kts +++ b/keeper-gradle-plugin/build.gradle.kts @@ -93,9 +93,9 @@ tasks.withType().configureEach { } externalDocumentationLink { packageListUrl.set( - URI("https://developer.android.com/reference/tools/gradle-api/7.3/package-list").toURL() + URI("https://developer.android.com/reference/tools/gradle-api/8.1/package-list").toURL() ) - url.set(URI("https://developer.android.com/reference/tools/gradle-api/7.3/classes").toURL()) + url.set(URI("https://developer.android.com/reference/tools/gradle-api/8.1/classes").toURL()) } } } From 53c1be7eff6768400ac4509c9ccb46fe96f2c2e1 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sun, 15 Oct 2023 14:07:10 -0400 Subject: [PATCH 4/5] Clean up setup --- keeper-gradle-plugin/build.gradle.kts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/keeper-gradle-plugin/build.gradle.kts b/keeper-gradle-plugin/build.gradle.kts index b42b3bc0..498e17bd 100644 --- a/keeper-gradle-plugin/build.gradle.kts +++ b/keeper-gradle-plugin/build.gradle.kts @@ -91,11 +91,16 @@ tasks.withType().configureEach { .toURL() ) } + + val agpBaseUrlProvider = + libs.versions.agp + .map { it.substringBeforeLast('.') } + .map { agpBaseVersion -> + "https://developer.android.com/reference/tools/gradle-api/$agpBaseVersion" + } externalDocumentationLink { - packageListUrl.set( - URI("https://developer.android.com/reference/tools/gradle-api/8.1/package-list").toURL() - ) - url.set(URI("https://developer.android.com/reference/tools/gradle-api/8.1/classes").toURL()) + packageListUrl.set(agpBaseUrlProvider.map { "$it/package-list" }.map { URI(it).toURL() }) + url.set(agpBaseUrlProvider.map { "$it/classes" }.map { URI(it).toURL() }) } } } From 3db8b7ec526c7fb461c491b1135cc898a863a2c2 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sun, 15 Oct 2023 14:08:24 -0400 Subject: [PATCH 5/5] Does... this work --- .../main/java/com/slack/keeper/InferAndroidTestKeepRules.kt | 4 ++-- .../src/main/java/com/slack/keeper/KeeperPlugin.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/keeper-gradle-plugin/src/main/java/com/slack/keeper/InferAndroidTestKeepRules.kt b/keeper-gradle-plugin/src/main/java/com/slack/keeper/InferAndroidTestKeepRules.kt index 283d8c27..15616d28 100644 --- a/keeper-gradle-plugin/src/main/java/com/slack/keeper/InferAndroidTestKeepRules.kt +++ b/keeper-gradle-plugin/src/main/java/com/slack/keeper/InferAndroidTestKeepRules.kt @@ -19,7 +19,7 @@ import java.util.Locale import javax.inject.Inject import org.gradle.api.DefaultTask import org.gradle.api.NamedDomainObjectProvider -import org.gradle.api.artifacts.ResolvableConfiguration +import org.gradle.api.artifacts.DependencyScopeConfiguration import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.RegularFile import org.gradle.api.file.RegularFileProperty @@ -137,7 +137,7 @@ constructor(private val execOps: ExecOperations) : DefaultTask() { enableAssertions: Property, extensionJvmArgs: ListProperty, traceReferencesArgs: ListProperty, - r8Configuration: NamedDomainObjectProvider + r8Configuration: NamedDomainObjectProvider ): InferAndroidTestKeepRules.() -> Unit = { if (automaticallyAddR8Repo.get()) { // This is the maven repo where r8 tagged releases are hosted. Only the r8 artifact is diff --git a/keeper-gradle-plugin/src/main/java/com/slack/keeper/KeeperPlugin.kt b/keeper-gradle-plugin/src/main/java/com/slack/keeper/KeeperPlugin.kt index 2cd474a8..ac0dfda9 100644 --- a/keeper-gradle-plugin/src/main/java/com/slack/keeper/KeeperPlugin.kt +++ b/keeper-gradle-plugin/src/main/java/com/slack/keeper/KeeperPlugin.kt @@ -225,7 +225,7 @@ public class KeeperPlugin : Plugin { ) { // Set up r8 configuration val r8Configuration = - configurations.resolvable(CONFIGURATION_NAME) { + configurations.dependencyScope(CONFIGURATION_NAME) { description = "R8 dependencies for Keeper. This is used solely for the TraceReferences CLI" isVisible = false defaultDependencies {