From 4a501a257e8b2836f4500f49c5695b3dd07665c5 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Tue, 6 Jun 2023 21:39:05 +0200 Subject: [PATCH] [Gradle] Restore Kapt import compatibility with older Kotlin plugin releases Still supported IDEA/Kotlin plugin releases relies on 'kotlin-annotation-processing-gradle' artifact name in compiler plugins classpath. I've restored this publication usage until we will stop support Kotlin plugin versions that doesn't know about 'kotlin-annotation-processing-embeddable' name. ^KTIJ-25586 Fixed --- buildSrc/src/main/kotlin/sbom.kt | 10 ++++++++- .../kotlin-gradle-plugin/build.gradle.kts | 1 - .../kapt/Kapt3KotlinGradleSubplugin.kt | 2 +- .../gradle/tasks/configuration/KaptConfig.kt | 2 +- .../build.gradle.kts | 21 +++++++++++++++++++ 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/kotlin/sbom.kt b/buildSrc/src/main/kotlin/sbom.kt index a22ec131024..8bfbf8ea03b 100644 --- a/buildSrc/src/main/kotlin/sbom.kt +++ b/buildSrc/src/main/kotlin/sbom.kt @@ -3,6 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +import org.gradle.api.NamedDomainObjectProvider import org.gradle.api.Project import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication @@ -18,7 +19,8 @@ import java.util.* fun Project.configureSbom( target: String? = null, documentName: String? = null, - gradleConfigurations: Iterable = setOf("runtimeClasspath") + gradleConfigurations: Iterable = setOf("runtimeClasspath"), + publication: NamedDomainObjectProvider? = null ): TaskProvider { val project = this val targetName = target ?: "${mainPublicationName}Publication" @@ -63,6 +65,12 @@ fun Project.configureSbom( val mainPublication = the().publications[mainPublicationName] as MavenPublication mainPublication.artifact(sbomArtifact) } + } else if (publication != null) { + pluginManager.withPlugin("kotlin-build-publishing") { + publication.configure { + artifact(sbomArtifact) + } + } } return spdxSbomTask diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts index 2c31ff3fc5f..eea1664d350 100644 --- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts @@ -104,7 +104,6 @@ dependencies { commonImplementation(project(":compiler:build-tools:kotlin-build-tools-api")) commonRuntimeOnly(project(":kotlin-compiler-embeddable")) - commonRuntimeOnly(project(":kotlin-annotation-processing-embeddable")) commonRuntimeOnly(project(":kotlin-android-extensions")) commonRuntimeOnly(project(":kotlin-compiler-runner")) { // Excluding dependency with not-relocated 'com.intellij' types diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt index fb742ae01bd..37ec6f52970 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt @@ -72,7 +72,7 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To val MAIN_KAPT_CONFIGURATION_NAME = "kapt" - const val KAPT_ARTIFACT_NAME = "kotlin-annotation-processing-embeddable" + const val KAPT_ARTIFACT_NAME = "kotlin-annotation-processing-gradle" val KAPT_SUBPLUGIN_ID = "org.jetbrains.kotlin.kapt3" fun getKaptConfigurationName(sourceSetName: String): String { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptConfig.kt index 1d179f87fb8..85721310fe3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptConfig.kt @@ -199,7 +199,7 @@ internal class KaptWithoutKotlincConfig : KaptConfig { project.configurations.findByName(Kapt3GradleSubplugin.KAPT_WORKER_DEPENDENCIES_CONFIGURATION_NAME) ?: project.configurations.create(Kapt3GradleSubplugin.KAPT_WORKER_DEPENDENCIES_CONFIGURATION_NAME).apply { dependencies.addAllLater(project.listProperty { - val kaptDependency = "org.jetbrains.kotlin:kotlin-annotation-processing-embeddable:${project.getKotlinPluginVersion()}" + val kaptDependency = "org.jetbrains.kotlin:kotlin-annotation-processing-gradle:${project.getKotlinPluginVersion()}" listOf( project.dependencies.create(kaptDependency), project.dependencies.kotlinDependency( diff --git a/plugins/kapt3/kotlin-annotation-processing-embeddable/build.gradle.kts b/plugins/kapt3/kotlin-annotation-processing-embeddable/build.gradle.kts index 9f2ae7cec53..97fd284cf32 100644 --- a/plugins/kapt3/kotlin-annotation-processing-embeddable/build.gradle.kts +++ b/plugins/kapt3/kotlin-annotation-processing-embeddable/build.gradle.kts @@ -1,3 +1,7 @@ +import org.gradle.api.publish.internal.PublicationInternal +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly +import plugins.KotlinBuildPublishingPlugin.Companion.ADHOC_COMPONENT_NAME + description = "Annotation Processor for Kotlin (for using with embeddable compiler)" plugins { @@ -10,6 +14,23 @@ dependencies { publish() +// Special compat publication for Kapt/Gradle until we will have minimal +// supported IDEA/Kotlin plugin version 1.9.0 +val publications: PublicationContainer = extensions.getByType().publications +val gradleCompatPublication = publications.register("gradleCompat") { + artifactId = "kotlin-annotation-processing-gradle" + from(components[ADHOC_COMPONENT_NAME]) + + // Workaround for https://github.com/gradle/gradle/issues/12324 + (this as PublicationInternal<*>).isAlias = true +} +val targetName = "${gradleCompatPublication.name.capitalizeAsciiOnly()}Publication" +configureSbom( + target = targetName, + documentName = "kotlin-annotation-processing-gradle", + publication = gradleCompatPublication +) + runtimeJar(rewriteDefaultJarDepsToShadedCompiler()) sourcesJar() javadocJar()