diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index df4dd95f5e5..3a9ba69cb0b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -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_MODULE_GROUP 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.JavaSourceSetsAccessor -import org.jetbrains.kotlin.gradle.plugin.internal.MavenPluginConfigurator import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20GradlePlugin @@ -196,6 +196,11 @@ abstract class KotlinBasePluginWrapper : DefaultKotlinBasePlugin() { JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory::class, DefaultJavaSourceSetsAccessorVariantFactory() ) + + factories.putIfAbsent( + BasePluginConfiguration.BasePluginConfigurationVariantFactory::class, + DefaultBasePluginConfigurationVariantFactory() + ) } internal open fun createTestRegistry(project: Project) = KotlinTestsRegistry(project) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfiguration.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfiguration.kt new file mode 100644 index 00000000000..3fede01b518 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfiguration.kt @@ -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 + 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 + get() = basePluginExtension.archivesName + + override val distsDirectory: DirectoryProperty + get() = basePluginExtension.distsDirectory +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt index 0747d7caa82..f5dcdc4d2c4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt @@ -153,7 +153,7 @@ open class DefaultCompilationDetails( override val ownModuleName: String get() { - val baseName = project.archivesName + val baseName = project.archivesName.orNull ?: project.name val suffix = if (isMainCompilationData()) "" else "_$compilationPurpose" return filterModuleName("$baseName$suffix") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmJvmVariant.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmJvmVariant.kt index 96bbbd42af6..257f21399d4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmJvmVariant.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmJvmVariant.kt @@ -46,7 +46,7 @@ class GradleKpmJvmVariantCompilationData(val variant: GradleKpmJvmVariant) : Gra internal fun GradleKpmVariant.ownModuleName(): String { val project = containingModule.project - val baseName = project.archivesName + val baseName = project.archivesName.orNull ?: project.name val suffix = if (containingModule.moduleClassifier == null) "" else "_${containingModule.moduleClassifier}" return filterModuleName("$baseName$suffix") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt index 3d387eccadc..159c4267f76 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinMetadataCompilationData.kt @@ -85,7 +85,7 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData() + .getInstance(this) + .archivesName /** * Returns the directory to generate TAR and ZIP archives into. * * @return The directory. Never returns null. */ -val Project.distsDirectory get() = if (isGradleVersionAtLeast(7, 1)) { - extensions.getByType(BasePluginExtension::class.java).distsDirectory - } else { - convention.getPlugin(BasePluginConvention::class.java).distsDirectory - } +val Project.distsDirectory + get() = gradle + .variantImplementationFactory() + .getInstance(this) + .distsDirectory diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt index 551b34ec6a9..d5fa3d9cedf 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt @@ -129,7 +129,7 @@ constructor( @Nested val output: KotlinWebpackOutput = KotlinWebpackOutput( - library = project.archivesName, + library = project.archivesName.orNull, libraryTarget = KotlinWebpackOutput.Target.UMD, globalObject = "this" ) @@ -154,7 +154,7 @@ constructor( } private val defaultOutputFileName by lazy { - project.archivesName + ".js" + project.archivesName.orNull + ".js" } @get:Internal diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index 4dcb057dc88..880183ccef7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -12,6 +12,8 @@ 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.BasePluginConfiguration +import org.jetbrains.kotlin.gradle.plugin.internal.BasePluginConfigurationG70 import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessor import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessorG70 import javax.inject.Inject @@ -138,4 +140,6 @@ private fun Project.registerVariantImplementations() { val factories = VariantImplementationFactories.get(gradle) factories[JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory::class] = JavaSourceSetsAccessorG70.JavaSourceSetAccessorVariantFactoryG70() + factories[BasePluginConfiguration.BasePluginConfigurationVariantFactory::class] = + BasePluginConfigurationG70.BasePluginConfigurationVariantFactoryG70() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG70.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG70.kt new file mode 100644 index 00000000000..cc63b50a20d --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG70.kt @@ -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 + 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 + ) + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index 19f267570ad..17427bdf918 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -12,10 +12,8 @@ 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.JavaSourceSetsAccessor +import org.jetbrains.kotlin.gradle.plugin.internal.* 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 private const val PLUGIN_VARIANT_NAME = "main" @@ -147,4 +145,6 @@ private fun Project.registerVariantImplementations() { MavenPluginConfiguratorG6.Gradle6MavenPluginConfiguratorVariantFactory() factories[JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory::class] = JavaSourceSetsAccessorG6.JavaSourceSetAccessorVariantFactoryG70() + factories[BasePluginConfiguration.BasePluginConfigurationVariantFactory::class] = + BasePluginConfigurationG6.BasePluginConfigurationVariantFactoryG6() } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG6.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG6.kt new file mode 100644 index 00000000000..f08199c6676 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG6.kt @@ -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 + 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 + ) + } + } +}