[Gradle, MPP] Register the kotlin source set convention only for Gradle <= 8.1
#KT-52976 Fixed
This commit is contained in:
committed by
Space Team
parent
4ec48cfb82
commit
d9927214e1
+3
-4
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
|
||||
import org.jetbrains.kotlin.gradle.model.builder.KotlinModelBuilder
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessor
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.MavenPluginConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.compatibilityConventionRegistrar
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.tasks.InspectClassesForMultiModuleIC
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||
@@ -186,12 +187,10 @@ internal abstract class AbstractKotlinPlugin(
|
||||
kotlinSourceSet.kotlin.source(javaSourceSet.java)
|
||||
@Suppress("DEPRECATION")
|
||||
kotlinCompilation.source(kotlinSourceSet)
|
||||
@Suppress("DEPRECATION")
|
||||
javaSourceSet.addConvention(kotlinSourceSetDslName, kotlinSourceSet)
|
||||
project.compatibilityConventionRegistrar.addConvention(javaSourceSet, kotlinSourceSetDslName, kotlinSourceSet)
|
||||
javaSourceSet.addExtension(kotlinSourceSetDslName, kotlinSourceSet.kotlin)
|
||||
} else {
|
||||
@Suppress("DEPRECATION")
|
||||
javaSourceSet.addConvention(kotlinSourceSetDslName, kotlinCompilation.defaultSourceSet)
|
||||
project.compatibilityConventionRegistrar.addConvention(javaSourceSet, kotlinSourceSetDslName, kotlinCompilation.defaultSourceSet)
|
||||
javaSourceSet.addExtension(kotlinSourceSetDslName, kotlinCompilation.defaultSourceSet.kotlin)
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -178,6 +178,11 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin {
|
||||
ProjectIsolationStartParameterAccessor.Factory::class,
|
||||
DefaultProjectIsolationStartParameterAccessorVariantFactory()
|
||||
)
|
||||
|
||||
factories.putIfAbsent(
|
||||
CompatibilityConventionRegistrar.Factory::class,
|
||||
DefaultCompatibilityConventionRegistrar.Factory()
|
||||
)
|
||||
}
|
||||
|
||||
protected fun setupAttributeMatchingStrategy(
|
||||
|
||||
-16
@@ -22,22 +22,6 @@ import org.gradle.api.internal.HasConvention
|
||||
import org.gradle.api.plugins.ExtensionAware
|
||||
import org.gradle.api.plugins.ExtraPropertiesExtension
|
||||
|
||||
@Deprecated("Conventions are deprecated in Gradle")
|
||||
internal inline fun <reified T : Any> Any.addConvention(name: String, plugin: T) {
|
||||
// Verifying conventions are still available via reflection,
|
||||
// so Gradle could remove them in Gradle 8.0 release
|
||||
val conventionsIsAvailable = try {
|
||||
Class.forName("org.gradle.api.internal.HasConvention")
|
||||
true
|
||||
} catch (_: ClassNotFoundException) {
|
||||
false
|
||||
}
|
||||
|
||||
if (conventionsIsAvailable) {
|
||||
(this as HasConvention).convention.plugins[name] = plugin
|
||||
}
|
||||
}
|
||||
|
||||
internal inline fun <reified T : Any> Any.addExtension(name: String, extension: T) =
|
||||
(this as ExtensionAware).extensions.add(T::class.java, name, extension)
|
||||
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories
|
||||
import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory
|
||||
|
||||
/**
|
||||
* The concept of conventions in Gradle is outdated and superseded by extensions.
|
||||
* However, KGP has to maintain a few conventions for compatibility with old versions of AGP and the `kotlin-dsl` plugin.
|
||||
* This registrar adds conventions for the Gradle versions < 8.2, while for Gradle 8.2+ it does nothing.
|
||||
*/
|
||||
internal interface CompatibilityConventionRegistrar {
|
||||
fun addConvention(subject: Any, name: String, plugin: Any)
|
||||
|
||||
interface Factory : VariantImplementationFactories.VariantImplementationFactory {
|
||||
fun getInstance(): CompatibilityConventionRegistrar
|
||||
}
|
||||
}
|
||||
|
||||
internal class DefaultCompatibilityConventionRegistrar : CompatibilityConventionRegistrar {
|
||||
override fun addConvention(subject: Any, name: String, plugin: Any) {
|
||||
// no-op
|
||||
}
|
||||
|
||||
class Factory : CompatibilityConventionRegistrar.Factory {
|
||||
override fun getInstance() = DefaultCompatibilityConventionRegistrar()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
internal val Project.compatibilityConventionRegistrar
|
||||
get() = variantImplementationFactory<CompatibilityConventionRegistrar.Factory>()
|
||||
.getInstance()
|
||||
+2
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.sources.android.configurator
|
||||
|
||||
import com.android.build.gradle.api.AndroidSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.compatibilityConventionRegistrar
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||
|
||||
/*
|
||||
@@ -16,6 +17,6 @@ from this KotlinSourceSet. This mechanism is deprecated.
|
||||
@Suppress("DEPRECATION")
|
||||
internal object GradleConventionAddKotlinSourcesToAndroidSourceSetConfigurator : KotlinAndroidSourceSetConfigurator {
|
||||
override fun configure(target: KotlinAndroidTarget, kotlinSourceSet: KotlinSourceSet, androidSourceSet: AndroidSourceSet) {
|
||||
androidSourceSet.addConvention(KOTLIN_DSL_NAME, kotlinSourceSet)
|
||||
target.project.compatibilityConventionRegistrar.addConvention(androidSourceSet, KOTLIN_DSL_NAME, kotlinSourceSet)
|
||||
}
|
||||
}
|
||||
+2
@@ -161,4 +161,6 @@ private fun Project.registerVariantImplementations() {
|
||||
ArtifactTypeAttributeAccessorG70.ArtifactTypeAttributeAccessorVariantFactoryG70()
|
||||
factories[ProjectIsolationStartParameterAccessor.Factory::class] =
|
||||
ProjectIsolationStartParameterAccessorG70.Factory()
|
||||
factories[CompatibilityConventionRegistrar.Factory::class] =
|
||||
CompatibilityConventionRegistrarG70.Factory()
|
||||
}
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.internal.HasConvention
|
||||
|
||||
internal class CompatibilityConventionRegistrarG70 : CompatibilityConventionRegistrar {
|
||||
override fun addConvention(subject: Any, name: String, plugin: Any) {
|
||||
(subject as HasConvention).convention.plugins[name] = plugin
|
||||
}
|
||||
|
||||
internal class Factory : CompatibilityConventionRegistrar.Factory {
|
||||
override fun getInstance(): CompatibilityConventionRegistrar = CompatibilityConventionRegistrarG70()
|
||||
}
|
||||
}
|
||||
+2
@@ -162,4 +162,6 @@ private fun Project.registerVariantImplementations() {
|
||||
ArtifactTypeAttributeAccessorG71.ArtifactTypeAttributeAccessorVariantFactoryG71()
|
||||
factories[ProjectIsolationStartParameterAccessor.Factory::class] =
|
||||
ProjectIsolationStartParameterAccessorG71.Factory()
|
||||
factories[CompatibilityConventionRegistrar.Factory::class] =
|
||||
CompatibilityConventionRegistrarG71.Factory()
|
||||
}
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.internal.HasConvention
|
||||
|
||||
internal class CompatibilityConventionRegistrarG71 : CompatibilityConventionRegistrar {
|
||||
override fun addConvention(subject: Any, name: String, plugin: Any) {
|
||||
(subject as HasConvention).convention.plugins[name] = plugin
|
||||
}
|
||||
|
||||
internal class Factory : CompatibilityConventionRegistrar.Factory {
|
||||
override fun getInstance(): CompatibilityConventionRegistrar = CompatibilityConventionRegistrarG71()
|
||||
}
|
||||
}
|
||||
+2
@@ -151,4 +151,6 @@ private fun Project.registerVariantImplementations() {
|
||||
MppTestReportHelperG74.MppTestReportHelperVariantFactoryG74()
|
||||
factories[ProjectIsolationStartParameterAccessor.Factory::class] =
|
||||
ProjectIsolationStartParameterAccessorG74.Factory()
|
||||
factories[CompatibilityConventionRegistrar.Factory::class] =
|
||||
CompatibilityConventionRegistrarG74.Factory()
|
||||
}
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.internal.HasConvention
|
||||
|
||||
internal class CompatibilityConventionRegistrarG74 : CompatibilityConventionRegistrar {
|
||||
override fun addConvention(subject: Any, name: String, plugin: Any) {
|
||||
(subject as HasConvention).convention.plugins[name] = plugin
|
||||
}
|
||||
|
||||
internal class Factory : CompatibilityConventionRegistrar.Factory {
|
||||
override fun getInstance(): CompatibilityConventionRegistrar = CompatibilityConventionRegistrarG74()
|
||||
}
|
||||
}
|
||||
+3
-4
@@ -12,10 +12,7 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.file.SourceDirectorySet
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.MppTestReportHelper
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.MppTestReportHelperG75
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.ProjectIsolationStartParameterAccessor
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.ProjectIsolationStartParameterAccessorG75
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.*
|
||||
import javax.inject.Inject
|
||||
|
||||
private const val PLUGIN_VARIANT_NAME = "gradle75"
|
||||
@@ -154,4 +151,6 @@ private fun Project.registerVariantImplementations() {
|
||||
MppTestReportHelperG75.MppTestReportHelperVariantFactoryG75()
|
||||
factories[ProjectIsolationStartParameterAccessor.Factory::class] =
|
||||
ProjectIsolationStartParameterAccessorG75.Factory()
|
||||
factories[CompatibilityConventionRegistrar.Factory::class] =
|
||||
CompatibilityConventionRegistrarG75.Factory()
|
||||
}
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.internal.HasConvention
|
||||
|
||||
internal class CompatibilityConventionRegistrarG75 : CompatibilityConventionRegistrar {
|
||||
override fun addConvention(subject: Any, name: String, plugin: Any) {
|
||||
(subject as HasConvention).convention.plugins[name] = plugin
|
||||
}
|
||||
|
||||
internal class Factory : CompatibilityConventionRegistrar.Factory {
|
||||
override fun getInstance(): CompatibilityConventionRegistrar = CompatibilityConventionRegistrarG75()
|
||||
}
|
||||
}
|
||||
+3
-2
@@ -12,8 +12,7 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.file.SourceDirectorySet
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.ProjectIsolationStartParameterAccessor
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.ProjectIsolationStartParameterAccessorG76
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.*
|
||||
import javax.inject.Inject
|
||||
|
||||
private const val PLUGIN_VARIANT_NAME = "gradle76"
|
||||
@@ -151,4 +150,6 @@ private fun Project.registerVariantImplementations() {
|
||||
val factories = VariantImplementationFactoriesConfigurator.get(gradle)
|
||||
factories[ProjectIsolationStartParameterAccessor.Factory::class] =
|
||||
ProjectIsolationStartParameterAccessorG76.Factory()
|
||||
factories[CompatibilityConventionRegistrar.Factory::class] =
|
||||
CompatibilityConventionRegistrarG76.Factory()
|
||||
}
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.internal.HasConvention
|
||||
|
||||
internal class CompatibilityConventionRegistrarG76 : CompatibilityConventionRegistrar {
|
||||
override fun addConvention(subject: Any, name: String, plugin: Any) {
|
||||
(subject as HasConvention).convention.plugins[name] = plugin
|
||||
}
|
||||
|
||||
internal class Factory : CompatibilityConventionRegistrar.Factory {
|
||||
override fun getInstance(): CompatibilityConventionRegistrar = CompatibilityConventionRegistrarG76()
|
||||
}
|
||||
}
|
||||
+4
-2
@@ -12,6 +12,7 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.file.SourceDirectorySet
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.*
|
||||
import javax.inject.Inject
|
||||
|
||||
private const val PLUGIN_VARIANT_NAME = "gradle80"
|
||||
@@ -144,7 +145,8 @@ open class KotlinApiPlugin : KotlinBaseApiPlugin() {
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("UnusedReceiverParameter")
|
||||
private fun Project.registerVariantImplementations() {
|
||||
|
||||
val factories = VariantImplementationFactoriesConfigurator.get(gradle)
|
||||
factories[CompatibilityConventionRegistrar.Factory::class] =
|
||||
CompatibilityConventionRegistrarG80.Factory()
|
||||
}
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.internal.HasConvention
|
||||
|
||||
internal class CompatibilityConventionRegistrarG80 : CompatibilityConventionRegistrar {
|
||||
override fun addConvention(subject: Any, name: String, plugin: Any) {
|
||||
(subject as HasConvention).convention.plugins[name] = plugin
|
||||
}
|
||||
|
||||
internal class Factory : CompatibilityConventionRegistrar.Factory {
|
||||
override fun getInstance(): CompatibilityConventionRegistrar = CompatibilityConventionRegistrarG80()
|
||||
}
|
||||
}
|
||||
+3
-2
@@ -145,7 +145,8 @@ open class KotlinApiPlugin : KotlinBaseApiPlugin() {
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("UnusedReceiverParameter")
|
||||
private fun Project.registerVariantImplementations() {
|
||||
|
||||
val factories = VariantImplementationFactoriesConfigurator.get(gradle)
|
||||
factories[CompatibilityConventionRegistrar.Factory::class] =
|
||||
CompatibilityConventionRegistrarG81.Factory()
|
||||
}
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.internal.HasConvention
|
||||
|
||||
internal class CompatibilityConventionRegistrarG81 : CompatibilityConventionRegistrar {
|
||||
override fun addConvention(subject: Any, name: String, plugin: Any) {
|
||||
(subject as HasConvention).convention.plugins[name] = plugin
|
||||
}
|
||||
|
||||
internal class Factory : CompatibilityConventionRegistrar.Factory {
|
||||
override fun getInstance(): CompatibilityConventionRegistrar = CompatibilityConventionRegistrarG81()
|
||||
}
|
||||
}
|
||||
+2
@@ -167,4 +167,6 @@ private fun Project.registerVariantImplementations() {
|
||||
ArtifactTypeAttributeAccessorG6.ArtifactTypeAttributeAccessorVariantFactoryG6()
|
||||
factories[ProjectIsolationStartParameterAccessor.Factory::class] =
|
||||
ProjectIsolationStartParameterAccessorG6.Factory()
|
||||
factories[CompatibilityConventionRegistrar.Factory::class] =
|
||||
CompatibilityConventionRegistrarG6.Factory()
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.internal.HasConvention
|
||||
|
||||
internal class CompatibilityConventionRegistrarG6 : CompatibilityConventionRegistrar {
|
||||
override fun addConvention(subject: Any, name: String, plugin: Any) {
|
||||
(subject as HasConvention).convention.plugins[name] = plugin
|
||||
}
|
||||
|
||||
internal class Factory : CompatibilityConventionRegistrar.Factory {
|
||||
override fun getInstance(): CompatibilityConventionRegistrar = CompatibilityConventionRegistrarG6()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user