Add Gradle version specific accessor for BasePlugin configuration

^KT-47047 In Progress
This commit is contained in:
Yahor Berdnikau
2022-06-21 23:23:14 +02:00
parent 7630afd37d
commit 2260893142
11 changed files with 146 additions and 23 deletions
@@ -29,9 +29,9 @@ import org.jetbrains.kotlin.gradle.dsl.*
import org.jetbrains.kotlin.gradle.internal.KOTLIN_COMPILER_EMBEDDABLE import org.jetbrains.kotlin.gradle.internal.KOTLIN_COMPILER_EMBEDDABLE
import org.jetbrains.kotlin.gradle.internal.KOTLIN_MODULE_GROUP import org.jetbrains.kotlin.gradle.internal.KOTLIN_MODULE_GROUP
import org.jetbrains.kotlin.gradle.logging.kotlinDebug import org.jetbrains.kotlin.gradle.logging.kotlinDebug
import org.jetbrains.kotlin.gradle.plugin.internal.*
import org.jetbrains.kotlin.gradle.plugin.internal.BasePluginConfiguration
import org.jetbrains.kotlin.gradle.plugin.internal.DefaultJavaSourceSetsAccessorVariantFactory import org.jetbrains.kotlin.gradle.plugin.internal.DefaultJavaSourceSetsAccessorVariantFactory
import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessor
import org.jetbrains.kotlin.gradle.plugin.internal.MavenPluginConfigurator
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20GradlePlugin import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20GradlePlugin
@@ -196,6 +196,11 @@ abstract class KotlinBasePluginWrapper : DefaultKotlinBasePlugin() {
JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory::class, JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory::class,
DefaultJavaSourceSetsAccessorVariantFactory() DefaultJavaSourceSetsAccessorVariantFactory()
) )
factories.putIfAbsent(
BasePluginConfiguration.BasePluginConfigurationVariantFactory::class,
DefaultBasePluginConfigurationVariantFactory()
)
} }
internal open fun createTestRegistry(project: Project) = KotlinTestsRegistry(project) internal open fun createTestRegistry(project: Project) = KotlinTestsRegistry(project)
@@ -0,0 +1,43 @@
/*
* 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.Project
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.plugins.BasePluginExtension
import org.gradle.api.provider.Property
import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories
import org.jetbrains.kotlin.gradle.utils.getByType
/**
* Accessor for [BasePlugin] configuration.
*
* From Gradle 7.1 [org.gradle.api.plugins.BasePluginConvention] was replaced with [org.gradle.api.plugins.BasePluginExtension].
*/
internal interface BasePluginConfiguration {
val archivesName: Property<String>
val distsDirectory: DirectoryProperty
interface BasePluginConfigurationVariantFactory : VariantImplementationFactories.VariantImplementationFactory {
fun getInstance(project: Project): BasePluginConfiguration
}
}
internal class DefaultBasePluginConfigurationVariantFactory : BasePluginConfiguration.BasePluginConfigurationVariantFactory {
override fun getInstance(project: Project): BasePluginConfiguration {
return DefaultBasePluginConfiguration(project.extensions.getByType())
}
}
internal class DefaultBasePluginConfiguration(
private val basePluginExtension: BasePluginExtension
) : BasePluginConfiguration {
override val archivesName: Property<String>
get() = basePluginExtension.archivesName
override val distsDirectory: DirectoryProperty
get() = basePluginExtension.distsDirectory
}
@@ -153,7 +153,7 @@ open class DefaultCompilationDetails<T : KotlinCommonOptions>(
override val ownModuleName: String override val ownModuleName: String
get() { get() {
val baseName = project.archivesName val baseName = project.archivesName.orNull
?: project.name ?: project.name
val suffix = if (isMainCompilationData()) "" else "_$compilationPurpose" val suffix = if (isMainCompilationData()) "" else "_$compilationPurpose"
return filterModuleName("$baseName$suffix") return filterModuleName("$baseName$suffix")
@@ -46,7 +46,7 @@ class GradleKpmJvmVariantCompilationData(val variant: GradleKpmJvmVariant) : Gra
internal fun GradleKpmVariant.ownModuleName(): String { internal fun GradleKpmVariant.ownModuleName(): String {
val project = containingModule.project val project = containingModule.project
val baseName = project.archivesName val baseName = project.archivesName.orNull
?: project.name ?: project.name
val suffix = if (containingModule.moduleClassifier == null) "" else "_${containingModule.moduleClassifier}" val suffix = if (containingModule.moduleClassifier == null) "" else "_${containingModule.moduleClassifier}"
return filterModuleName("$baseName$suffix") return filterModuleName("$baseName$suffix")
@@ -85,7 +85,7 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : Kotlin
override val moduleName: String override val moduleName: String
get() { // FIXME deduplicate with ownModuleName get() { // FIXME deduplicate with ownModuleName
val baseName = project.archivesName val baseName = project.archivesName.orNull
?: project.name ?: project.name
val suffix = if (module.moduleClassifier == null) "" else "_${module.moduleClassifier}" val suffix = if (module.moduleClassifier == null) "" else "_${module.moduleClassifier}"
return filterModuleName("$baseName$suffix") return filterModuleName("$baseName$suffix")
@@ -8,10 +8,9 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.artifacts.component.BuildIdentifier import org.gradle.api.artifacts.component.BuildIdentifier
import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.plugins.BasePluginConvention
import org.gradle.api.plugins.BasePluginExtension
import org.gradle.internal.build.BuildState import org.gradle.internal.build.BuildState
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.plugin.internal.BasePluginConfiguration
import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory
import org.jetbrains.kotlin.project.model.KpmModule import org.jetbrains.kotlin.project.model.KpmModule
import org.jetbrains.kotlin.project.model.KpmLocalModuleIdentifier import org.jetbrains.kotlin.project.model.KpmLocalModuleIdentifier
@@ -26,19 +25,19 @@ fun Project.currentBuildId(): BuildIdentifier =
/** /**
* The base name to use for archive files. * The base name to use for archive files.
*/ */
val Project.archivesName get() = if (isGradleVersionAtLeast(7, 1)) { val Project.archivesName
extensions.getByType(BasePluginExtension::class.java).archivesName.orNull get() = gradle
} else { .variantImplementationFactory<BasePluginConfiguration.BasePluginConfigurationVariantFactory>()
convention.findPlugin(BasePluginConvention::class.java)?.archivesBaseName .getInstance(this)
} .archivesName
/** /**
* Returns the directory to generate TAR and ZIP archives into. * Returns the directory to generate TAR and ZIP archives into.
* *
* @return The directory. Never returns null. * @return The directory. Never returns null.
*/ */
val Project.distsDirectory get() = if (isGradleVersionAtLeast(7, 1)) { val Project.distsDirectory
extensions.getByType(BasePluginExtension::class.java).distsDirectory get() = gradle
} else { .variantImplementationFactory<BasePluginConfiguration.BasePluginConfigurationVariantFactory>()
convention.getPlugin(BasePluginConvention::class.java).distsDirectory .getInstance(this)
} .distsDirectory
@@ -129,7 +129,7 @@ constructor(
@Nested @Nested
val output: KotlinWebpackOutput = KotlinWebpackOutput( val output: KotlinWebpackOutput = KotlinWebpackOutput(
library = project.archivesName, library = project.archivesName.orNull,
libraryTarget = KotlinWebpackOutput.Target.UMD, libraryTarget = KotlinWebpackOutput.Target.UMD,
globalObject = "this" globalObject = "this"
) )
@@ -154,7 +154,7 @@ constructor(
} }
private val defaultOutputFileName by lazy { private val defaultOutputFileName by lazy {
project.archivesName + ".js" project.archivesName.orNull + ".js"
} }
@get:Internal @get:Internal
@@ -12,6 +12,8 @@ import org.gradle.api.Project
import org.gradle.api.file.SourceDirectorySet import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.gradle.plugin.internal.BasePluginConfiguration
import org.jetbrains.kotlin.gradle.plugin.internal.BasePluginConfigurationG70
import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessor import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessor
import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessorG70 import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessorG70
import javax.inject.Inject import javax.inject.Inject
@@ -138,4 +140,6 @@ private fun Project.registerVariantImplementations() {
val factories = VariantImplementationFactories.get(gradle) val factories = VariantImplementationFactories.get(gradle)
factories[JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory::class] = factories[JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory::class] =
JavaSourceSetsAccessorG70.JavaSourceSetAccessorVariantFactoryG70() JavaSourceSetsAccessorG70.JavaSourceSetAccessorVariantFactoryG70()
factories[BasePluginConfiguration.BasePluginConfigurationVariantFactory::class] =
BasePluginConfigurationG70.BasePluginConfigurationVariantFactoryG70()
} }
@@ -0,0 +1,36 @@
/*
* 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.Project
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.model.ObjectFactory
import org.gradle.api.plugins.BasePluginConvention
import org.gradle.api.provider.Property
import org.jetbrains.kotlin.gradle.utils.chainedFinalizeValueOnRead
import org.jetbrains.kotlin.gradle.utils.propertyWithConvention
internal class BasePluginConfigurationG70(
private val basePluginConvention: BasePluginConvention,
private val objects: ObjectFactory
) : BasePluginConfiguration {
override val archivesName: Property<String>
get() = objects
.propertyWithConvention(basePluginConvention.archivesBaseName)
.chainedFinalizeValueOnRead()
override val distsDirectory: DirectoryProperty
get() = basePluginConvention.distsDirectory
internal class BasePluginConfigurationVariantFactoryG70 : BasePluginConfiguration.BasePluginConfigurationVariantFactory {
override fun getInstance(project: Project): BasePluginConfiguration {
return BasePluginConfigurationG70(
project.convention.getPlugin(BasePluginConvention::class.java),
project.objects
)
}
}
}
@@ -12,10 +12,8 @@ import org.gradle.api.Project
import org.gradle.api.file.SourceDirectorySet import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessor import org.jetbrains.kotlin.gradle.plugin.internal.*
import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessorG6 import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessorG6
import org.jetbrains.kotlin.gradle.plugin.internal.MavenPluginConfigurator
import org.jetbrains.kotlin.gradle.plugin.internal.MavenPluginConfiguratorG6
import javax.inject.Inject import javax.inject.Inject
private const val PLUGIN_VARIANT_NAME = "main" private const val PLUGIN_VARIANT_NAME = "main"
@@ -147,4 +145,6 @@ private fun Project.registerVariantImplementations() {
MavenPluginConfiguratorG6.Gradle6MavenPluginConfiguratorVariantFactory() MavenPluginConfiguratorG6.Gradle6MavenPluginConfiguratorVariantFactory()
factories[JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory::class] = factories[JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory::class] =
JavaSourceSetsAccessorG6.JavaSourceSetAccessorVariantFactoryG70() JavaSourceSetsAccessorG6.JavaSourceSetAccessorVariantFactoryG70()
factories[BasePluginConfiguration.BasePluginConfigurationVariantFactory::class] =
BasePluginConfigurationG6.BasePluginConfigurationVariantFactoryG6()
} }
@@ -0,0 +1,36 @@
/*
* 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.Project
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.model.ObjectFactory
import org.gradle.api.plugins.BasePluginConvention
import org.gradle.api.provider.Property
import org.jetbrains.kotlin.gradle.utils.chainedFinalizeValueOnRead
import org.jetbrains.kotlin.gradle.utils.propertyWithConvention
internal class BasePluginConfigurationG6(
private val basePluginConvention: BasePluginConvention,
private val objects: ObjectFactory
) : BasePluginConfiguration {
override val archivesName: Property<String>
get() = objects
.propertyWithConvention(basePluginConvention.archivesBaseName)
.chainedFinalizeValueOnRead()
override val distsDirectory: DirectoryProperty
get() = basePluginConvention.distsDirectory
internal class BasePluginConfigurationVariantFactoryG6 : BasePluginConfiguration.BasePluginConfigurationVariantFactory {
override fun getInstance(project: Project): BasePluginConfiguration {
return BasePluginConfigurationG6(
project.convention.getPlugin(BasePluginConvention::class.java),
project.objects
)
}
}
}