From 1f5fa5eb7c14da9466427c450d206a23b18f6f88 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Wed, 24 Jun 2020 14:56:38 +0300 Subject: [PATCH] Add back empty stub implementations of KotlinGradleSubplugin (KT-39809) * If a KotlinGradleSubplugin implements KotlinCompilerPluginSupportPlugin, don't apply it as a legacy plugin * Add the legacy KotlinGradleSubplugin implementations back so that when there's JAR hell with META-INF/services in the old artifacts pointing to the classes, loading the plugins with ServiceLoader (legacy implementation) from the new artifacts would not fail. * There's a corner case for plugins not in kotlin-gradle-plugin If a newer and older version of such a subplugin is used with an older version of the Kotlin Gradle plugin, the latter will find the META-INF entries and will try to load the subplugins from the new version. With the original fix for KT-39809, this would result in silently ignored empty stub implementations. Given that the Kotlin Gradle plugin can now check if a subplugin supports the new API, it's OK to keep the old entries and make the stub implementations throw a build error when called, so that improper plugin versions are not ignored and are clearly reported. Note that this is only necessary for the subplugins not bundled in the kotlin-gradle-plugin module, as those will always be in sync with the Kotlin version. Issue #KT-39809 Fixed --- .../kotlin/allopen/gradle/AllOpenSubplugin.kt | 26 +++++++- ...kotlin.gradle.plugin.KotlinGradleSubplugin | 1 + .../gradle/plugin/KotlinGradleSubplugin.kt | 2 +- .../jetbrains/kotlin/gradle/SubpluginsIT.kt | 60 ++++++++++++++++++- .../kapt/Kapt3KotlinGradleSubplugin.kt | 20 ++++++- .../gradle/plugin/SubpluginEnvironment.kt | 10 ++-- .../internal/ScriptingGradleSubplugin.kt | 16 ++++- .../android/internal/AndroidSubplugin.kt | 17 +++++- .../kotlin/noarg/gradle/NoArgSubplugin.kt | 25 +++++++- ...kotlin.gradle.plugin.KotlinGradleSubplugin | 1 + .../noarg/gradle/SamWithReceiverSubplugin.kt | 27 ++++++++- ...kotlin.gradle.plugin.KotlinGradleSubplugin | 1 + .../tools/kotlin-serialization/build.gradle | 2 +- .../gradle/SerializationSubplugin.kt | 32 ++++++++-- ...kotlin.gradle.plugin.KotlinGradleSubplugin | 1 + 15 files changed, 220 insertions(+), 21 deletions(-) create mode 100644 libraries/tools/kotlin-allopen/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin create mode 100644 libraries/tools/kotlin-noarg/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin create mode 100644 libraries/tools/kotlin-sam-with-receiver/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin create mode 100644 libraries/tools/kotlin-serialization/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin diff --git a/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt b/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt index 87ac25ebfd6..d98dbe25aef 100644 --- a/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt +++ b/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt @@ -16,15 +16,22 @@ package org.jetbrains.kotlin.allopen.gradle +import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.provider.Provider +import org.gradle.api.tasks.compile.AbstractCompile +import org.gradle.tooling.provider.model.ToolingModelBuilder import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.jetbrains.kotlin.allopen.gradle.model.builder.AllOpenModelBuilder +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.plugin.* import javax.inject.Inject class AllOpenGradleSubplugin @Inject internal constructor(private val registry: ToolingModelBuilderRegistry) : - KotlinCompilerPluginSupportPlugin { + KotlinCompilerPluginSupportPlugin, + @Suppress("DEPRECATION") // implementing to fix KT-39809 + KotlinGradleSubplugin { + companion object { fun getAllOpenExtension(project: Project): AllOpenExtension { return project.extensions.getByType(AllOpenExtension::class.java) @@ -68,4 +75,21 @@ class AllOpenGradleSubplugin @Inject internal constructor(private val registry: override fun getCompilerPluginId() = "org.jetbrains.kotlin.allopen" override fun getPluginArtifact(): SubpluginArtifact = JetBrainsSubpluginArtifact(artifactId = ALLOPEN_ARTIFACT_NAME) + + //region Stub implementation for legacy API, KT-39809 + internal constructor(): this(object : ToolingModelBuilderRegistry { + override fun register(p0: ToolingModelBuilder) = Unit + override fun getBuilder(p0: String): ToolingModelBuilder? = null + }) + + override fun isApplicable(project: Project, task: AbstractCompile): Boolean = true + + override fun apply( + project: Project, kotlinCompile: AbstractCompile, javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, + kotlinCompilation: KotlinCompilation? + ): List = throw GradleException( + "This version of the kotlin-allopen Gradle plugin is built for a newer Kotlin version. " + + "Please use an older version of kotlin-allopen or upgrade the Kotlin version to make them match." + ) + //endregion } \ No newline at end of file diff --git a/libraries/tools/kotlin-allopen/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin b/libraries/tools/kotlin-allopen/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin new file mode 100644 index 00000000000..aa0f60c496c --- /dev/null +++ b/libraries/tools/kotlin-allopen/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin @@ -0,0 +1 @@ +org.jetbrains.kotlin.allopen.gradle.AllOpenGradleSubplugin \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt index cae57b22c46..d6acf3d8966 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleSubplugin.kt @@ -123,7 +123,7 @@ interface KotlinCompilerPluginSupportPlugin : Plugin { fun getCompilerPluginId(): String fun getPluginArtifact(): SubpluginArtifact - fun getNativeCompilerPluginArtifact(): SubpluginArtifact? = null + fun getPluginArtifactForNative(): SubpluginArtifact? = null } open class SubpluginArtifact(val groupId: String, val artifactId: String, val version: String? = null) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SubpluginsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SubpluginsIT.kt index c8e3b32dbc5..c136dde55cc 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SubpluginsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SubpluginsIT.kt @@ -5,12 +5,10 @@ package org.jetbrains.kotlin.gradle -import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.util.checkBytecodeContains import org.jetbrains.kotlin.gradle.util.modify import org.junit.Test import java.io.File -import kotlin.test.assertEquals import kotlin.test.assertTrue class SubpluginsIT : BaseGradleIT() { @@ -193,4 +191,62 @@ class SubpluginsIT : BaseGradleIT() { assertFileExists("${kotlinClassesDir(sourceSet = "test")}MyTestClass.class") } } + + @Test + fun testKotlinVersionDowngradeInSupbrojectKt39809() = with(Project("multiprojectWithDependency")) { + setupWorkingDir() + + projectDir.resolve("projA/build.gradle").modify { + """ + buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.70") + } + } + + $it + """.trimIndent() + } + build(":projA:compileKotlin") { + assertSuccessful() + } + } + + @Test + fun testKotlinVersionDowngradeWithNewerSubpluginsKt39809() = with(Project("multiprojectWithDependency")) { + setupWorkingDir() + + val subprojectBuildGradle = projectDir.resolve("projA/build.gradle") + val originalScript = subprojectBuildGradle.readText() + + listOf("allopen", "noarg", "sam-with-receiver", "serialization").forEach { plugin -> + projectDir.resolve("projA/build.gradle").modify { + """ + buildscript { + repositories { + mavenLocal() + mavenCentral() + } + dependencies { + classpath("org.jetbrains.kotlin:kotlin-$plugin:${defaultBuildOptions().kotlinVersion}") + } + } + + apply plugin: "org.jetbrains.kotlin.plugin.${plugin.replace("-", ".")}" + + $originalScript + """.trimIndent() + } + build(":projA:compileKotlin", options = defaultBuildOptions().copy(kotlinVersion = "1.3.72")) { + assertFailed() + assertContains( + "This version of the kotlin-$plugin Gradle plugin is built for a newer Kotlin version. " + + "Please use an older version of kotlin-$plugin or upgrade the Kotlin version to make them match." + ) + } + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt index fc361d764a5..aa4a1b5a9f5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt @@ -22,7 +22,9 @@ import org.gradle.api.tasks.* import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.compile.JavaCompile import org.gradle.process.CommandLineArgumentProvider +import org.gradle.tooling.provider.model.ToolingModelBuilder import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.internal.kapt.incremental.CLASS_STRUCTURE_ARTIFACT_TYPE import org.jetbrains.kotlin.gradle.internal.kapt.incremental.StructureArtifactTransform import org.jetbrains.kotlin.gradle.model.builder.KaptModelBuilder @@ -41,7 +43,9 @@ import javax.inject.Inject // apply plugin: 'kotlin-kapt' class Kapt3GradleSubplugin @Inject internal constructor(private val registry: ToolingModelBuilderRegistry) : - KotlinCompilerPluginSupportPlugin { + KotlinCompilerPluginSupportPlugin, + @Suppress("DEPRECATION") // implementing to fix KT-39809 + KotlinGradleSubplugin { override fun apply(target: Project) { target.extensions.create("kapt", KaptExtension::class.java) @@ -587,6 +591,20 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To override fun getPluginArtifact(): SubpluginArtifact = JetBrainsSubpluginArtifact(artifactId = KAPT_ARTIFACT_NAME) + + //region Stub implementation for legacy API, KT-39809 + internal constructor(): this(object : ToolingModelBuilderRegistry { + override fun register(p0: ToolingModelBuilder) = Unit + override fun getBuilder(p0: String): ToolingModelBuilder? = null + }) + + override fun isApplicable(project: Project, task: AbstractCompile): Boolean = false + + override fun apply( + project: Project, kotlinCompile: AbstractCompile, javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, + kotlinCompilation: KotlinCompilation? + ): List = emptyList() + //endregion } private val artifactType = Attribute.of("artifactType", String::class.java) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt index be6aa1a586e..b563c0e6fcb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt @@ -42,9 +42,9 @@ class SubpluginEnvironment( val result = project.plugins.filterIsInstance() @Suppress("DEPRECATION", "UNCHECKED_CAST") - val compatibilitySubplugins = ServiceLoader.load(klass, classloader).map { - LegacyKotlinCompilerPluginSupportPlugin(it as KotlinGradleSubplugin) - } + val compatibilitySubplugins = ServiceLoader.load(klass, classloader) + .filter { it !is KotlinCompilerPluginSupportPlugin } + .map { LegacyKotlinCompilerPluginSupportPlugin(it as KotlinGradleSubplugin) } SubpluginEnvironment(result + compatibilitySubplugins, kotlinPluginVersion) } catch (e: NoClassDefFoundError) { @@ -70,7 +70,7 @@ class SubpluginEnvironment( project.addMavenDependency(PLUGIN_CLASSPATH_CONFIGURATION_NAME, artifact) } - subplugin.getNativeCompilerPluginArtifact()?.let { artifact -> + subplugin.getPluginArtifactForNative()?.let { artifact -> project.addMavenDependency(NATIVE_COMPILER_PLUGIN_CLASSPATH_CONFIGURATION_NAME, artifact) } @@ -165,7 +165,7 @@ internal class LegacyKotlinCompilerPluginSupportPlugin( override fun getCompilerPluginId(): String = oldPlugin.getCompilerPluginId() override fun getPluginArtifact(): SubpluginArtifact = oldPlugin.getPluginArtifact() - override fun getNativeCompilerPluginArtifact(): SubpluginArtifact? = oldPlugin.getNativeCompilerPluginArtifact() + override fun getPluginArtifactForNative(): SubpluginArtifact? = oldPlugin.getNativeCompilerPluginArtifact() } internal fun findJavaTaskForKotlinCompilation(compilation: KotlinCompilation<*>): TaskProvider? = diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt index 1666a206e68..d2ac70c7bd0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt @@ -14,8 +14,10 @@ import org.gradle.api.artifacts.transform.ArtifactTransform import org.gradle.api.attributes.Attribute import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.provider.Provider +import org.gradle.api.tasks.compile.AbstractCompile import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull import org.jetbrains.kotlin.gradle.internal.KaptGenerateStubsTask import org.jetbrains.kotlin.gradle.plugin.* @@ -207,7 +209,10 @@ fun Configuration.discoverScriptExtensionsFiles() = }.artifacts.artifactFiles -class ScriptingKotlinGradleSubplugin : KotlinCompilerPluginSupportPlugin { +class ScriptingKotlinGradleSubplugin : + KotlinCompilerPluginSupportPlugin, + @Suppress("DEPRECATION") // implementing to fix KT-39809 + KotlinGradleSubplugin { companion object { const val SCRIPTING_ARTIFACT_NAME = "kotlin-scripting-compiler-embeddable" @@ -250,4 +255,13 @@ class ScriptingKotlinGradleSubplugin : KotlinCompilerPluginSupportPlugin { override fun getCompilerPluginId() = "kotlin.scripting" override fun getPluginArtifact(): SubpluginArtifact = JetBrainsSubpluginArtifact(artifactId = SCRIPTING_ARTIFACT_NAME) + + //region Stub implementation for legacy API, KT-39809 + override fun isApplicable(project: Project, task: AbstractCompile): Boolean = false + + override fun apply( + project: Project, kotlinCompile: KotlinCompile, javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, + kotlinCompilation: KotlinCompilation? + ): List = emptyList() + //endregion } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt index d936346ee43..0e633b26cf3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt @@ -17,7 +17,9 @@ import org.gradle.api.file.FileCollection import org.gradle.api.provider.Provider import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.model.builder.KotlinAndroidExtensionModelBuilder import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation @@ -65,7 +67,11 @@ class AndroidExtensionsSubpluginIndicator @Inject internal constructor(private v } } -class AndroidSubplugin : KotlinCompilerPluginSupportPlugin { +class AndroidSubplugin : + KotlinCompilerPluginSupportPlugin, + @Suppress("DEPRECATION") // implementing to fix KT-39809 + KotlinGradleSubplugin +{ override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean { if (kotlinCompilation !is KotlinJvmAndroidCompilation) return false @@ -284,4 +290,13 @@ class AndroidSubplugin : KotlinCompilerPluginSupportPlugin { val builder = factory.newDocumentBuilder() return builder.parse(this) } + + //region Stub implementation for legacy API, KT-39809 + override fun isApplicable(project: Project, task: AbstractCompile): Boolean = false + + override fun apply( + project: Project, kotlinCompile: AbstractCompile, javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, + kotlinCompilation: KotlinCompilation? + ): List = emptyList() + //endregion } \ No newline at end of file diff --git a/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt b/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt index 6eb127fa915..cb5449f3951 100644 --- a/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt +++ b/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt @@ -16,15 +16,21 @@ package org.jetbrains.kotlin.noarg.gradle +import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.provider.Provider +import org.gradle.api.tasks.compile.AbstractCompile +import org.gradle.tooling.provider.model.ToolingModelBuilder import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.noarg.gradle.model.builder.NoArgModelBuilder import javax.inject.Inject class NoArgGradleSubplugin @Inject internal constructor(private val registry: ToolingModelBuilderRegistry) : - KotlinCompilerPluginSupportPlugin { + KotlinCompilerPluginSupportPlugin, + @Suppress("DEPRECATION") // implementing to fix KT-39809 + KotlinGradleSubplugin { companion object { fun getNoArgExtension(project: Project): NoArgExtension { @@ -73,4 +79,21 @@ class NoArgGradleSubplugin @Inject internal constructor(private val registry: To override fun getCompilerPluginId() = "org.jetbrains.kotlin.noarg" override fun getPluginArtifact(): SubpluginArtifact = JetBrainsSubpluginArtifact(artifactId = NOARG_ARTIFACT_NAME) + + //region Stub implementation for legacy API, KT-39809 + internal constructor(): this(object : ToolingModelBuilderRegistry { + override fun register(p0: ToolingModelBuilder) = Unit + override fun getBuilder(p0: String): ToolingModelBuilder? = null + }) + + override fun isApplicable(project: Project, task: AbstractCompile): Boolean = true + + override fun apply( + project: Project, kotlinCompile: AbstractCompile, javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, + kotlinCompilation: KotlinCompilation? + ): List = throw GradleException( + "This version of the kotlin-noarg Gradle plugin is built for a newer Kotlin version. " + + "Please use an older version of kotlin-noarg or upgrade the Kotlin version to make them match." + ) + //endregion } \ No newline at end of file diff --git a/libraries/tools/kotlin-noarg/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin b/libraries/tools/kotlin-noarg/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin new file mode 100644 index 00000000000..ebcbf030fc7 --- /dev/null +++ b/libraries/tools/kotlin-noarg/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin @@ -0,0 +1 @@ +org.jetbrains.kotlin.noarg.gradle.NoArgGradleSubplugin \ No newline at end of file diff --git a/libraries/tools/kotlin-sam-with-receiver/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/SamWithReceiverSubplugin.kt b/libraries/tools/kotlin-sam-with-receiver/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/SamWithReceiverSubplugin.kt index 8716c43cd75..96f937eb7d8 100644 --- a/libraries/tools/kotlin-sam-with-receiver/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/SamWithReceiverSubplugin.kt +++ b/libraries/tools/kotlin-sam-with-receiver/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/SamWithReceiverSubplugin.kt @@ -16,14 +16,22 @@ package org.jetbrains.kotlin.samWithReceiver.gradle +import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.provider.Provider +import org.gradle.api.tasks.compile.AbstractCompile +import org.gradle.tooling.provider.model.ToolingModelBuilder import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.noarg.gradle.model.builder.SamWithReceiverModelBuilder import javax.inject.Inject -class SamWithReceiverGradleSubplugin @Inject internal constructor(private val registry: ToolingModelBuilderRegistry) : KotlinCompilerPluginSupportPlugin { +class SamWithReceiverGradleSubplugin @Inject internal constructor(private val registry: ToolingModelBuilderRegistry) : + KotlinCompilerPluginSupportPlugin, + @Suppress("DEPRECATION") // implementing to fix KT-39809 + KotlinGradleSubplugin { + override fun apply(target: Project) { target.extensions.create("samWithReceiver", SamWithReceiverExtension::class.java) registry.register(SamWithReceiverModelBuilder()) @@ -64,4 +72,21 @@ class SamWithReceiverGradleSubplugin @Inject internal constructor(private val re override fun getCompilerPluginId() = "org.jetbrains.kotlin.samWithReceiver" override fun getPluginArtifact(): SubpluginArtifact = JetBrainsSubpluginArtifact(artifactId = SAM_WITH_RECEIVER_ARTIFACT_NAME) + + //region Stub implementation for legacy API, KT-39809 + internal constructor(): this(object : ToolingModelBuilderRegistry { + override fun register(p0: ToolingModelBuilder) = Unit + override fun getBuilder(p0: String): ToolingModelBuilder? = null + }) + + override fun isApplicable(project: Project, task: AbstractCompile): Boolean = true + + override fun apply( + project: Project, kotlinCompile: AbstractCompile, javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, + kotlinCompilation: KotlinCompilation? + ): List = throw GradleException( + "This version of the kotlin-sam-with-receiver Gradle plugin is built for a newer Kotlin version. " + + "Please use an older version of kotlin-sam-with-receiver or upgrade the Kotlin version to make them match." + ) + //endregion } \ No newline at end of file diff --git a/libraries/tools/kotlin-sam-with-receiver/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin b/libraries/tools/kotlin-sam-with-receiver/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin new file mode 100644 index 00000000000..e8f15aed835 --- /dev/null +++ b/libraries/tools/kotlin-sam-with-receiver/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin @@ -0,0 +1 @@ +org.jetbrains.kotlin.samWithReceiver.gradle.SamWithReceiverGradleSubplugin \ No newline at end of file diff --git a/libraries/tools/kotlin-serialization/build.gradle b/libraries/tools/kotlin-serialization/build.gradle index fbfbe5900b9..a48c198cd24 100644 --- a/libraries/tools/kotlin-serialization/build.gradle +++ b/libraries/tools/kotlin-serialization/build.gradle @@ -15,7 +15,7 @@ compileJava { dependencies { compileOnly project(':kotlin-gradle-plugin') - compileOnly project(':kotlin-gradle-plugin-api') + compile project(':kotlin-gradle-plugin-api') compileOnly kotlinStdlib() compileOnly project(path: ':kotlin-compiler-embeddable', configuration: 'runtimeJar') diff --git a/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt b/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt index af1601fffd6..ee24014bf5d 100644 --- a/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt +++ b/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt @@ -16,13 +16,21 @@ package org.jetbrains.kotlinx.serialization.gradle +import org.gradle.api.GradleException +import org.gradle.api.Project import org.gradle.api.provider.Provider -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin -import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact -import org.jetbrains.kotlin.gradle.plugin.SubpluginOption +import org.gradle.api.tasks.compile.AbstractCompile +import org.gradle.tooling.provider.model.ToolingModelBuilder +import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions +import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +class SerializationGradleSubplugin : + KotlinCompilerPluginSupportPlugin, + @Suppress("DEPRECATION") // implementing to fix KT-39809 + KotlinGradleSubplugin { -class SerializationGradleSubplugin : KotlinCompilerPluginSupportPlugin { companion object { const val SERIALIZATION_GROUP_NAME = "org.jetbrains.kotlin" const val SERIALIZATION_ARTIFACT_NAME = "kotlin-serialization" @@ -39,8 +47,20 @@ class SerializationGradleSubplugin : KotlinCompilerPluginSupportPlugin { override fun getPluginArtifact(): SubpluginArtifact = SubpluginArtifact(SERIALIZATION_GROUP_NAME, SERIALIZATION_ARTIFACT_NAME) - override fun getNativeCompilerPluginArtifact(): SubpluginArtifact? = + override fun getPluginArtifactForNative(): SubpluginArtifact? = SubpluginArtifact(SERIALIZATION_GROUP_NAME, SERIALIZATION_ARTIFACT_UNSHADED_NAME) override fun getCompilerPluginId() = "org.jetbrains.kotlinx.serialization" + + //region Stub implementation for legacy API, KT-39809 + override fun isApplicable(project: Project, task: AbstractCompile): Boolean = true + + override fun apply( + project: Project, kotlinCompile: AbstractCompile, javaCompile: AbstractCompile?, variantData: Any?, androidProjectHandler: Any?, + kotlinCompilation: KotlinCompilation? + ): List = throw GradleException( + "This version of the kotlin-serialization Gradle plugin is built for a newer Kotlin version. " + + "Please use an older version of kotlin-serialization or upgrade the Kotlin version to make them match." + ) + //endregion } diff --git a/libraries/tools/kotlin-serialization/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin b/libraries/tools/kotlin-serialization/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin new file mode 100644 index 00000000000..cf2b29e4ee6 --- /dev/null +++ b/libraries/tools/kotlin-serialization/src/main/resources/META-INF/services/org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin @@ -0,0 +1 @@ +org.jetbrains.kotlinx.serialization.gradle.SerializationGradleSubplugin \ No newline at end of file