[kpm] Introduce Kpm* naming convention (1/2)

All Kpm owned entities shall be disambiguated by using the `Kpm` prefix
E.g. MyEntity has to be called KpmMyEntity and a subclass is called
KpmSpecialMyEntity
This commit is contained in:
sebastian.sellmair
2022-05-24 12:00:07 +02:00
committed by Space
parent 49175f83aa
commit 71677ad455
127 changed files with 1095 additions and 1094 deletions
@@ -39,7 +39,7 @@ interface KotlinCompilationData<T : KotlinCommonOptions> {
} }
interface KotlinVariantCompilationData<T : KotlinCommonOptions> : KotlinCompilationData<T> { interface KotlinVariantCompilationData<T : KotlinCommonOptions> : KotlinCompilationData<T> {
override val owner: KotlinGradleVariant override val owner: KpmGradleVariant
override val project: Project get() = owner.containingModule.project override val project: Project get() = owner.containingModule.project
@@ -68,4 +68,4 @@ interface KotlinVariantCompilationData<T : KotlinCommonOptions> : KotlinCompilat
get() = owner.platformType get() = owner.platformType
override val ownModuleName: String override val ownModuleName: String
} }
@@ -12,16 +12,16 @@ import org.gradle.api.Project
import org.gradle.api.file.SourceDirectorySet import org.gradle.api.file.SourceDirectorySet
import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
import org.jetbrains.kotlin.project.model.KotlinModuleFragment import org.jetbrains.kotlin.project.model.KpmFragment
import org.jetbrains.kotlin.project.model.utils.variantsContainingFragment import org.jetbrains.kotlin.project.model.utils.variantsContainingFragment
import org.jetbrains.kotlin.tooling.core.MutableExtras import org.jetbrains.kotlin.tooling.core.MutableExtras
import org.jetbrains.kotlin.tooling.core.closure import org.jetbrains.kotlin.tooling.core.closure
import org.jetbrains.kotlin.tooling.core.withClosure import org.jetbrains.kotlin.tooling.core.withClosure
interface KotlinGradleFragment : KotlinModuleFragment, HasKotlinDependencies, KotlinFragmentDependencyConfigurations, Named { interface KpmGradleFragment : KpmFragment, HasKotlinDependencies, KotlinFragmentDependencyConfigurations, Named {
override val kotlinSourceRoots: SourceDirectorySet override val kotlinSourceRoots: SourceDirectorySet
override val containingModule: KotlinGradleModule override val containingModule: KpmGradleModule
override fun getName(): String = fragmentName override fun getName(): String = fragmentName
@@ -32,11 +32,17 @@ interface KotlinGradleFragment : KotlinModuleFragment, HasKotlinDependencies, Ko
val extras: MutableExtras val extras: MutableExtras
fun refines(other: KotlinGradleFragment) fun refines(other: KpmGradleFragment)
fun refines(other: NamedDomainObjectProvider<KotlinGradleFragment>) fun refines(other: NamedDomainObjectProvider<KpmGradleFragment>)
override val directRefinesDependencies: Iterable<KotlinGradleFragment> override val declaredRefinesDependencies: Iterable<KpmGradleFragment>
override val refinesClosure: Set<KpmGradleFragment>
get() = this.closure { it.declaredRefinesDependencies }
override val withRefinesClosure: Set<KpmGradleFragment>
get() = this.withClosure { it.declaredRefinesDependencies }
override fun dependencies(configureClosure: Closure<Any?>) = override fun dependencies(configureClosure: Closure<Any?>) =
dependencies f@{ project.configure(this@f, configureClosure) } dependencies f@{ project.configure(this@f, configureClosure) }
@@ -63,14 +69,8 @@ interface KotlinGradleFragment : KotlinModuleFragment, HasKotlinDependencies, Ko
listOf(transitiveApiConfiguration.name, transitiveImplementationConfiguration.name) listOf(transitiveApiConfiguration.name, transitiveImplementationConfiguration.name)
} }
val KotlinGradleFragment.withRefinesClosure: Set<KotlinGradleFragment> val KpmGradleFragment.path: String
get() = this.withClosure { it.directRefinesDependencies }
val KotlinGradleFragment.refinesClosure: Set<KotlinGradleFragment>
get() = this.closure { it.directRefinesDependencies }
val KotlinGradleFragment.path: String
get() = "${project.path}/${containingModule.name}/$fragmentName" get() = "${project.path}/${containingModule.name}/$fragmentName"
val KotlinGradleFragment.containingVariants: Set<KotlinGradleVariant> val KpmGradleFragment.containingVariants: Set<KpmGradleVariant>
get() = containingModule.variantsContainingFragment(this).map { it as KotlinGradleVariant }.toSet() get() = containingModule.variantsContainingFragment(this).map { it as KpmGradleVariant }.toSet()
@@ -12,18 +12,18 @@ import org.gradle.api.NamedDomainObjectSet
import org.gradle.api.Project import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
import org.jetbrains.kotlin.project.model.KotlinModule import org.jetbrains.kotlin.project.model.KpmModule
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
import org.jetbrains.kotlin.project.model.KpmCompilerPlugin import org.jetbrains.kotlin.project.model.KpmCompilerPlugin
interface KotlinGradleModule : KotlinModule, Named, HasKotlinDependencies { interface KpmGradleModule : KpmModule, Named, HasKotlinDependencies {
val project: Project val project: Project
val moduleClassifier: String? val moduleClassifier: String?
override val fragments: ExtensiblePolymorphicDomainObjectContainer<KotlinGradleFragment> override val fragments: ExtensiblePolymorphicDomainObjectContainer<KpmGradleFragment>
// TODO DSL & build script model: find a way to create a flexible typed view on fragments? // TODO DSL & build script model: find a way to create a flexible typed view on fragments?
override val variants: NamedDomainObjectSet<KotlinGradleVariant> override val variants: NamedDomainObjectSet<KpmGradleVariant>
override val plugins: Set<KpmCompilerPlugin> override val plugins: Set<KpmCompilerPlugin>
@@ -34,7 +34,7 @@ interface KotlinGradleModule : KotlinModule, Named, HasKotlinDependencies {
fun makePublic() fun makePublic()
companion object { companion object {
val KotlinModuleIdentifier.moduleName get() = moduleClassifier ?: MAIN_MODULE_NAME val KpmModuleIdentifier.moduleName get() = moduleClassifier ?: MAIN_MODULE_NAME
const val MAIN_MODULE_NAME = "main" const val MAIN_MODULE_NAME = "main"
const val TEST_MODULE_NAME = "test" const val TEST_MODULE_NAME = "test"
@@ -47,10 +47,10 @@ interface KotlinGradleModule : KotlinModule, Named, HasKotlinDependencies {
// DSL // DSL
val common: KotlinGradleFragment val common: KpmGradleFragment
get() = fragments.getByName(KotlinGradleFragment.COMMON_FRAGMENT_NAME) get() = fragments.getByName(KpmGradleFragment.COMMON_FRAGMENT_NAME)
fun common(configure: KotlinGradleFragment.() -> Unit) = fun common(configure: KpmGradleFragment.() -> Unit) =
common.configure() common.configure()
override fun dependencies(configure: KotlinDependencyHandler.() -> Unit) = override fun dependencies(configure: KotlinDependencyHandler.() -> Unit) =
@@ -11,9 +11,9 @@ import org.gradle.api.file.FileCollection
import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.maven.MavenPublication
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationOutput import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationOutput
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.project.model.KotlinModuleVariant import org.jetbrains.kotlin.project.model.KpmVariant
interface KotlinGradleVariant : KotlinGradleFragment, KotlinModuleVariant { interface KpmGradleVariant : KpmGradleFragment, KpmVariant {
val platformType: KotlinPlatformType val platformType: KotlinPlatformType
// TODO generalize with KotlinCompilation? // TODO generalize with KotlinCompilation?
@@ -33,7 +33,7 @@ interface KotlinGradleVariant : KotlinGradleFragment, KotlinModuleVariant {
val gradleVariantNames: Set<String> val gradleVariantNames: Set<String>
} }
interface KotlinGradleVariantWithRuntime : KotlinGradleVariant { interface KpmGradleVariantWithRuntime : KpmGradleVariant {
// TODO deduplicate with KotlinCompilation? // TODO deduplicate with KotlinCompilation?
val runtimeDependenciesConfiguration: Configuration val runtimeDependenciesConfiguration: Configuration
@@ -45,7 +45,7 @@ interface KotlinGradleVariantWithRuntime : KotlinGradleVariant {
val runtimeElementsConfiguration: Configuration val runtimeElementsConfiguration: Configuration
} }
interface KotlinNativeVariant : KotlinGradleVariant { interface KpmNativeVariant : KpmGradleVariant {
override val platformType: KotlinPlatformType override val platformType: KotlinPlatformType
get() = KotlinPlatformType.native get() = KotlinPlatformType.native
@@ -17,8 +17,8 @@ import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.deserialize import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.deserialize
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.serialize import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.serialize
import org.jetbrains.kotlin.gradle.plugin.KotlinPm20PluginWrapper import org.jetbrains.kotlin.gradle.plugin.KotlinPm20PluginWrapper
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinIosX64Variant import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmIosX64Variant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinLinuxX64Variant import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmLinuxX64Variant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.jvm import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.jvm
import org.jetbrains.kotlin.tooling.core.extrasKeyOf import org.jetbrains.kotlin.tooling.core.extrasKeyOf
@@ -49,8 +49,8 @@ class BackwardsCompatibilityDeserializationTest {
kotlinExtension.mainAndTest { kotlinExtension.mainAndTest {
jvm jvm
val native = fragments.create("native") val native = fragments.create("native")
val linux = fragments.create<KotlinLinuxX64Variant>("linuxX64") val linux = fragments.create<KpmLinuxX64Variant>("linuxX64")
val ios = fragments.create<KotlinIosX64Variant>("iosX64") val ios = fragments.create<KpmIosX64Variant>("iosX64")
native.refines(common) native.refines(common)
linux.refines(native) linux.refines(native)
ios.refines(native) ios.refines(native)
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.gradle package org.jetbrains.kotlin.gradle
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask
import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask.Companion.taskNameForKotlinModule import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask.Companion.taskNameForKotlinModule
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
@@ -29,7 +29,7 @@ class KotlinToolingMetadataMppIT : BaseGradleIT() {
private val buildKotlinToolingMetadataTaskName get() = private val buildKotlinToolingMetadataTaskName get() =
if (isKpmModelMappingEnabled) { if (isKpmModelMappingEnabled) {
taskNameForKotlinModule(KotlinGradleModule.MAIN_MODULE_NAME) taskNameForKotlinModule(KpmGradleModule.MAIN_MODULE_NAME)
} else { } else {
BuildKotlinToolingMetadataTask.defaultTaskName BuildKotlinToolingMetadataTask.defaultTaskName
} }
@@ -122,7 +122,7 @@ class KotlinToolingMetadataMppIT : BaseGradleIT() {
with(transformProjectWithPluginsDsl("kpm-multi-module-published")) { with(transformProjectWithPluginsDsl("kpm-multi-module-published")) {
val expectedMetadataByModule = mapOf<String, KotlinToolingMetadata.() -> Unit>( val expectedMetadataByModule = mapOf<String, KotlinToolingMetadata.() -> Unit>(
KotlinGradleModule.MAIN_MODULE_NAME to { KpmGradleModule.MAIN_MODULE_NAME to {
val nativeTarget = projectTargets.single { it.platformType == KotlinPlatformType.native.name } val nativeTarget = projectTargets.single { it.platformType == KotlinPlatformType.native.name }
assertEquals(KonanTarget.LINUX_X64.name, nativeTarget.extras.native?.konanTarget) assertEquals(KonanTarget.LINUX_X64.name, nativeTarget.extras.native?.konanTarget)
}, },
@@ -17,12 +17,12 @@ kotlin {
// feel free to add more modules, variants and fragments // feel free to add more modules, variants and fragments
mainAndTest { mainAndTest {
jvm jvm
val linuxX64 by fragments.creating(KotlinLinuxX64Variant::class) val linuxX64 by fragments.creating(KpmLinuxX64Variant::class)
} }
val secondaryModule by modules.creating { val secondaryModule by modules.creating {
jvm jvm
val linuxArm64 by fragments.creating(KotlinLinuxArm64Variant::class) val linuxArm64 by fragments.creating(KpmLinuxArm64Variant::class)
makePublic() makePublic()
} }
@@ -34,7 +34,7 @@ kotlin {
val integrationTest by modules.creating { val integrationTest by modules.creating {
jvm jvm
val linuxX64 by fragments.creating(KotlinLinuxX64Variant::class) val linuxX64 by fragments.creating(KpmLinuxX64Variant::class)
} }
} }
@@ -33,9 +33,9 @@ class KpmPluginWithTransientPluginOptions(
) )
) )
override fun forMetadataCompilation(fragment: KotlinModuleFragment) = pluginData() override fun forMetadataCompilation(fragment: KpmFragment) = pluginData()
override fun forNativeMetadataCompilation(fragment: KotlinModuleFragment) = pluginData() override fun forNativeMetadataCompilation(fragment: KpmFragment) = pluginData()
override fun forPlatformCompilation(variant: KotlinModuleVariant) = pluginData() override fun forPlatformCompilation(variant: KpmVariant) = pluginData()
} }
class GradleKpmPluginWithTransientPluginOptions : GradleKpmCompilerPlugin { class GradleKpmPluginWithTransientPluginOptions : GradleKpmCompilerPlugin {
@@ -6,13 +6,13 @@
package org.jetbrains.kotlin.gradle.android package org.jetbrains.kotlin.gradle.android
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.tooling.core.extrasKeyOf import org.jetbrains.kotlin.tooling.core.extrasKeyOf
import java.io.File import java.io.File
import java.io.Serializable import java.io.Serializable
internal val androidDslKey = extrasKeyOf<AndroidDsl>() internal val androidDslKey = extrasKeyOf<AndroidDsl>()
val KotlinGradleFragment.androidDsl: AndroidDsl? get() = this.extras[androidDslKey] val KpmGradleFragment.androidDsl: AndroidDsl? get() = this.extras[androidDslKey]
class AndroidDsl : Serializable { class AndroidDsl : Serializable {
var compileSdk = 0 var compileSdk = 0
@@ -20,8 +20,8 @@ import org.jetbrains.kotlin.gradle.kpm.external.createExternalJvmVariant
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
fun KotlinGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) { fun KpmGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
val androidOutgoingArtifacts = FragmentArtifacts<KotlinJvmVariant> { val androidOutgoingArtifacts = FragmentArtifacts<KpmJvmVariant> {
variants.create("classes") { variant -> variants.create("classes") { variant ->
variant.attributes.attribute(AndroidArtifacts.ARTIFACT_TYPE, AndroidArtifacts.ArtifactType.CLASSES_JAR.type) variant.attributes.attribute(AndroidArtifacts.ARTIFACT_TYPE, AndroidArtifacts.ArtifactType.CLASSES_JAR.type)
variant.artifact(project.provider { fragment.compilationOutputs.classesDirs.singleFile }) { variant.artifact(project.provider { fragment.compilationOutputs.classesDirs.singleFile }) {
@@ -37,7 +37,7 @@ fun KotlinGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
} }
} }
val androidElementsAttributes = FragmentAttributes<KotlinJvmVariant> { val androidElementsAttributes = FragmentAttributes<KpmJvmVariant> {
attribute(BuildTypeAttr.ATTRIBUTE, project.objects.named(androidVariant.buildType.name)) attribute(BuildTypeAttr.ATTRIBUTE, project.objects.named(androidVariant.buildType.name))
attribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, project.objects.named(TargetJvmEnvironment.ANDROID)) attribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, project.objects.named(TargetJvmEnvironment.ANDROID))
} }
@@ -46,7 +46,7 @@ fun KotlinGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
"android${androidVariant.buildType.name.replaceFirstChar { it.uppercase() }}", KotlinJvmVariantConfig( "android${androidVariant.buildType.name.replaceFirstChar { it.uppercase() }}", KotlinJvmVariantConfig(
/* Only swap out configuration that is used. Default setup shall still be applied */ /* Only swap out configuration that is used. Default setup shall still be applied */
compileDependencies = (DefaultKotlinCompileDependenciesDefinition + compileDependencies = (DefaultKotlinCompileDependenciesDefinition +
FragmentAttributes<KotlinGradleFragment> { FragmentAttributes<KpmGradleFragment> {
namedAttribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, TargetJvmEnvironment.ANDROID) namedAttribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, TargetJvmEnvironment.ANDROID)
attribute(KotlinPlatformType.attribute, KotlinPlatformType.androidJvm) attribute(KotlinPlatformType.attribute, KotlinPlatformType.androidJvm)
}) })
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.gradle.android package org.jetbrains.kotlin.gradle.android
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentInternal import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragmentInternal
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
val KotlinGradleModule.androidCommon: KotlinGradleFragmentInternal val KpmGradleModule.androidCommon: KpmGradleFragmentInternal
get() = (fragments.findByName("androidCommon") ?: fragments.create("androidCommon") { fragment -> get() = (fragments.findByName("androidCommon") ?: fragments.create("androidCommon") { fragment ->
fragment.refines(common) fragment.refines(common)
}) as KotlinGradleFragmentInternal }) as KpmGradleFragmentInternal
@@ -5,12 +5,12 @@
package org.jetbrains.kotlin.gradle.android package org.jetbrains.kotlin.gradle.android
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
val KotlinPm20ProjectExtension.instrumentedTest val KotlinPm20ProjectExtension.instrumentedTest
get() = modules.maybeCreate("instrumentedTest") get() = modules.maybeCreate("instrumentedTest")
fun KotlinPm20ProjectExtension.instrumentedTest(configure: KotlinGradleModule.() -> Unit) { fun KotlinPm20ProjectExtension.instrumentedTest(configure: KpmGradleModule.() -> Unit) {
instrumentedTest.apply(configure) instrumentedTest.apply(configure)
} }
@@ -18,8 +18,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsSingleTargetPreset import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsSingleTargetPreset
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.DefaultKpmGradleProjectModelContainer import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.DefaultKpmGradleProjectModelContainer
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModuleFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.targets.js.calculateJsCompilerType import org.jetbrains.kotlin.gradle.targets.js.calculateJsCompilerType
@@ -27,7 +25,6 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrSingleTargetPreset import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrSingleTargetPreset
import org.jetbrains.kotlin.gradle.tasks.CompileUsingKotlinDaemon import org.jetbrains.kotlin.gradle.tasks.CompileUsingKotlinDaemon
import org.jetbrains.kotlin.gradle.tasks.withType import org.jetbrains.kotlin.gradle.tasks.withType
import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild
import org.jetbrains.kotlin.gradle.utils.castIsolatedKotlinPluginClassLoaderAware import org.jetbrains.kotlin.gradle.utils.castIsolatedKotlinPluginClassLoaderAware
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.CompilerOutputKind
@@ -304,4 +301,4 @@ enum class NativeCacheKind(val produce: String?, val outputKind: CompilerOutputK
fun byCompilerArgument(argument: String): NativeCacheKind? = fun byCompilerArgument(argument: String): NativeCacheKind? =
NativeCacheKind.values().firstOrNull { it.name.equals(argument, ignoreCase = true) } NativeCacheKind.values().firstOrNull { it.name.equals(argument, ignoreCase = true) }
} }
} }
@@ -22,8 +22,8 @@ import org.jetbrains.kotlin.gradle.execution.KotlinAggregateExecutionSource
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
@@ -134,8 +134,8 @@ internal fun configureStdlibDefaultDependency(project: Project) = with(project)
private fun addStdlibToKpmProject( private fun addStdlibToKpmProject(
project: Project project: Project
) { ) {
project.kpmModules.matching { it.name == KotlinGradleModule.MAIN_MODULE_NAME }.configureEach { main -> project.kpmModules.matching { it.name == KpmGradleModule.MAIN_MODULE_NAME }.configureEach { main ->
main.fragments.matching { it.name == KotlinGradleFragment.COMMON_FRAGMENT_NAME }.configureEach { common -> main.fragments.matching { it.name == KpmGradleFragment.COMMON_FRAGMENT_NAME }.configureEach { common ->
common.dependencies { common.dependencies {
api(project.kotlinDependency("kotlin-stdlib-common", project.topLevelExtension.coreLibrariesVersion)) api(project.kotlinDependency("kotlin-stdlib-common", project.topLevelExtension.coreLibrariesVersion))
} }
@@ -22,16 +22,15 @@ val KotlinPm20ProjectExtension.ideaKotlinProjectModelBuilder: IdeaKotlinProjectM
get() = this.ideaKotlinProjectModelBuilder get() = this.ideaKotlinProjectModelBuilder
@ExternalVariantApi @ExternalVariantApi
fun KotlinGradleModule.createExternalJvmVariant( fun KpmGradleModule.createExternalJvmVariant(
name: String, name: String,
config: KotlinJvmVariantConfig config: KotlinJvmVariantConfig
): KotlinJvmVariant { ): KpmJvmVariant {
val variant = KotlinJvmVariantFactory(this, config).create(name) val variant = KotlinJvmVariantFactory(this, config).create(name)
fragments.add(variant) fragments.add(variant)
return variant return variant
} }
@ExternalVariantApi @ExternalVariantApi
val KotlinGradleVariantInternal.compilationData val KpmGradleVariantInternal.compilationData
get() = this.compilationData get() = this.compilationData
@@ -35,7 +35,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
private val additionalDependencies = mutableListOf<IdeaKotlinDependencyResolver>() private val additionalDependencies = mutableListOf<IdeaKotlinDependencyResolver>()
@ExternalVariantPlatformDependencyResolutionDsl @ExternalVariantPlatformDependencyResolutionDsl
var platformResolutionAttributes: FragmentAttributes<KotlinGradleFragment>? = null var platformResolutionAttributes: FragmentAttributes<KpmGradleFragment>? = null
@ExternalVariantPlatformDependencyResolutionDsl @ExternalVariantPlatformDependencyResolutionDsl
class ArtifactViewDslHandle( class ArtifactViewDslHandle(
@@ -43,10 +43,10 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
var binaryType: String var binaryType: String
) { ) {
@ExternalVariantPlatformDependencyResolutionDsl @ExternalVariantPlatformDependencyResolutionDsl
var attributes: FragmentAttributes<KotlinGradleFragment> = FragmentAttributes { } var attributes: FragmentAttributes<KpmGradleFragment> = FragmentAttributes { }
@ExternalVariantPlatformDependencyResolutionDsl @ExternalVariantPlatformDependencyResolutionDsl
fun attributes(setAttributes: KotlinGradleFragmentConfigurationAttributesContext<KotlinGradleFragment>.() -> Unit) { fun attributes(setAttributes: KotlinGradleFragmentConfigurationAttributesContext<KpmGradleFragment>.() -> Unit) {
attributes += FragmentAttributes(setAttributes) attributes += FragmentAttributes(setAttributes)
} }
} }
@@ -64,7 +64,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
@ExternalVariantPlatformDependencyResolutionDsl @ExternalVariantPlatformDependencyResolutionDsl
fun withPlatformResolutionAttributes( fun withPlatformResolutionAttributes(
setAttributes: KotlinGradleFragmentConfigurationAttributesContext<KotlinGradleFragment>.() -> Unit setAttributes: KotlinGradleFragmentConfigurationAttributesContext<KpmGradleFragment>.() -> Unit
) { ) {
val additionalAttributes = FragmentAttributes(setAttributes) val additionalAttributes = FragmentAttributes(setAttributes)
this.platformResolutionAttributes = platformResolutionAttributes?.plus(additionalAttributes) ?: additionalAttributes this.platformResolutionAttributes = platformResolutionAttributes?.plus(additionalAttributes) ?: additionalAttributes
@@ -76,7 +76,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
} }
@ExternalVariantPlatformDependencyResolutionDsl @ExternalVariantPlatformDependencyResolutionDsl
fun additionalDependencies(dependencyProvider: (KotlinGradleFragment) -> List<IdeaKotlinDependency>) { fun additionalDependencies(dependencyProvider: (KpmGradleFragment) -> List<IdeaKotlinDependency>) {
this.additionalDependencies += IdeaKotlinDependencyResolver { fragment -> dependencyProvider(fragment).toSet() } this.additionalDependencies += IdeaKotlinDependencyResolver { fragment -> dependencyProvider(fragment).toSet() }
} }
@@ -130,7 +130,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
return parentConstraint and this.constraint return parentConstraint and this.constraint
} }
private fun buildPlatformResolutionAttributes(): FragmentAttributes<KotlinGradleFragment>? { private fun buildPlatformResolutionAttributes(): FragmentAttributes<KpmGradleFragment>? {
val parentAttributes = parent?.buildPlatformResolutionAttributes() ?: return this.platformResolutionAttributes val parentAttributes = parent?.buildPlatformResolutionAttributes() ?: return this.platformResolutionAttributes
return parentAttributes + (this.platformResolutionAttributes ?: return parentAttributes) return parentAttributes + (this.platformResolutionAttributes ?: return parentAttributes)
} }
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
/** /**
* An [IdeaKotlinDependencyEffect] is invoked last in the dependency resolution pipeline. * An [IdeaKotlinDependencyEffect] is invoked last in the dependency resolution pipeline.
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment
* that the dependency resolution result is final. * that the dependency resolution result is final.
*/ */
fun interface IdeaKotlinDependencyEffect { fun interface IdeaKotlinDependencyEffect {
operator fun invoke(fragment: KotlinGradleFragment, dependencies: Set<IdeaKotlinDependency>) operator fun invoke(fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>)
} }
fun IdeaKotlinDependencyResolver.withEffect(effect: IdeaKotlinDependencyEffect) = IdeaKotlinDependencyResolver { fragment -> fun IdeaKotlinDependencyResolver.withEffect(effect: IdeaKotlinDependencyEffect) = IdeaKotlinDependencyResolver { fragment ->
@@ -5,12 +5,12 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.path import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.path
internal object IdeaKotlinDependencyLogger : IdeaKotlinDependencyEffect { internal object IdeaKotlinDependencyLogger : IdeaKotlinDependencyEffect {
override fun invoke( override fun invoke(
fragment: KotlinGradleFragment, dependencies: Set<IdeaKotlinDependency> fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
) { ) {
val fragmentPathRegex = fragment.project.properties["idea.kotlin.log.dependencies"]?.toString() ?: return val fragmentPathRegex = fragment.project.properties["idea.kotlin.log.dependencies"]?.toString() ?: return
if (!fragment.path.matches(Regex(fragmentPathRegex))) return if (!fragment.path.matches(Regex(fragmentPathRegex))) return
@@ -5,13 +5,13 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
fun interface IdeaKotlinDependencyResolver { fun interface IdeaKotlinDependencyResolver {
fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency>
object Empty : IdeaKotlinDependencyResolver { object Empty : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> = emptySet() override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> = emptySet()
} }
} }
@@ -48,7 +48,7 @@ operator fun IdeaKotlinDependencyResolver.plus(
private class CompositeIdeaKotlinDependencyResolver( private class CompositeIdeaKotlinDependencyResolver(
val children: List<IdeaKotlinDependencyResolver> val children: List<IdeaKotlinDependencyResolver>
) : IdeaKotlinDependencyResolver { ) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
return children.flatMap { child -> child.resolve(fragment) }.toSet() return children.flatMap { child -> child.resolve(fragment) }.toSet()
} }
} }
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
/** /**
* An [IdeaKotlinDependencyTransformer] will be invoked after all [IdeaKotlinDependencyResolver] finished. * An [IdeaKotlinDependencyTransformer] will be invoked after all [IdeaKotlinDependencyResolver] finished.
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment
*/ */
fun interface IdeaKotlinDependencyTransformer { fun interface IdeaKotlinDependencyTransformer {
fun transform( fun transform(
fragment: KotlinGradleFragment, dependencies: Set<IdeaKotlinDependency> fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
): Set<IdeaKotlinDependency> ): Set<IdeaKotlinDependency>
} }
@@ -54,7 +54,7 @@ private class CompositeIdeaKotlinDependencyTransformer(
val transformers: List<IdeaKotlinDependencyTransformer> val transformers: List<IdeaKotlinDependencyTransformer>
) : IdeaKotlinDependencyTransformer { ) : IdeaKotlinDependencyTransformer {
override fun transform( override fun transform(
fragment: KotlinGradleFragment, dependencies: Set<IdeaKotlinDependency> fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
): Set<IdeaKotlinDependency> { ): Set<IdeaKotlinDependency> {
return transformers.fold(dependencies) { currentDependencies, transformer -> transformer.transform(fragment, currentDependencies) } return transformers.fold(dependencies) { currentDependencies, transformer -> transformer.transform(fragment, currentDependencies) }
} }
@@ -8,12 +8,12 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.tooling.core.emptyExtras import org.jetbrains.kotlin.tooling.core.emptyExtras
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinFragment(fragment: KotlinGradleFragment): IdeaKotlinFragment { internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinFragment(fragment: KpmGradleFragment): IdeaKotlinFragment {
return if (fragment is KotlinGradleVariant) buildIdeaKotlinVariant(fragment) return if (fragment is KpmGradleVariant) buildIdeaKotlinVariant(fragment)
else buildIdeaKotlinFragment(fragment) else buildIdeaKotlinFragment(fragment)
} }
private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragment: KotlinGradleFragment): IdeaKotlinFragment { private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragment: KpmGradleFragment): IdeaKotlinFragment {
return IdeaKotlinFragmentImpl( return IdeaKotlinFragmentImpl(
coordinates = IdeaKotlinFragmentCoordinates(fragment), coordinates = IdeaKotlinFragmentCoordinates(fragment),
platforms = fragment.containingVariants.map { variant -> IdeaKotlinPlatform(variant) }.toSet(), platforms = fragment.containingVariants.map { variant -> IdeaKotlinPlatform(variant) }.toSet(),
@@ -25,7 +25,7 @@ private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragme
) )
} }
private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinVariant(variant: KotlinGradleVariant): IdeaKotlinVariant { private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinVariant(variant: KpmGradleVariant): IdeaKotlinVariant {
return IdeaKotlinVariantImpl( return IdeaKotlinVariantImpl(
fragment = buildIdeaKotlinFragment(variant), fragment = buildIdeaKotlinFragment(variant),
platform = IdeaKotlinPlatform(variant), platform = IdeaKotlinPlatform(variant),
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
internal fun IdeaKotlinFragmentCoordinates(fragment: KotlinGradleFragment): IdeaKotlinFragmentCoordinates { internal fun IdeaKotlinFragmentCoordinates(fragment: KpmGradleFragment): IdeaKotlinFragmentCoordinates {
return IdeaKotlinFragmentCoordinatesImpl( return IdeaKotlinFragmentCoordinatesImpl(
module = IdeaKotlinModuleCoordinates(fragment.containingModule), module = IdeaKotlinModuleCoordinates(fragment.containingModule),
fragmentName = fragment.name fragmentName = fragment.name
@@ -8,22 +8,22 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.gradle.api.artifacts.component.ProjectComponentIdentifier import org.gradle.api.artifacts.component.ProjectComponentIdentifier
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.FragmentGranularMetadataResolverFactory import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.FragmentGranularMetadataResolverFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule.Companion.moduleName import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule.Companion.moduleName
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.currentBuildId import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.currentBuildId
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toModuleDependency import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toModuleDependency
internal class IdeaKotlinGranularFragmentDependencyResolver( internal class IdeaKotlinGranularFragmentDependencyResolver(
private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory
) : IdeaKotlinDependencyResolver { ) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
.filterIsInstance<ChooseVisibleSourceSets>() .filterIsInstance<ChooseVisibleSourceSets>()
.flatMap { resolution -> resolve(fragment, resolution) } .flatMap { resolution -> resolve(fragment, resolution) }
.toSet() .toSet()
} }
private fun resolve(fragment: KotlinGradleFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKotlinDependency> { private fun resolve(fragment: KpmGradleFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKotlinDependency> {
val gradleProjectIdentifier = resolution.dependency.id as? ProjectComponentIdentifier ?: return emptyList() val gradleProjectIdentifier = resolution.dependency.id as? ProjectComponentIdentifier ?: return emptyList()
val kotlinModuleIdentifier = resolution.dependency.toModuleDependency().moduleIdentifier val kotlinModuleIdentifier = resolution.dependency.toModuleDependency().moduleIdentifier
return resolution.allVisibleSourceSetNames.map { visibleFragmentName -> return resolution.allVisibleSourceSetNames.map { visibleFragmentName ->
@@ -10,22 +10,22 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.Choos
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.JarMetadataProvider import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.JarMetadataProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.ProjectMetadataProvider import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.ProjectMetadataProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.FragmentGranularMetadataResolverFactory import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.FragmentGranularMetadataResolverFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule.Companion.moduleName import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule.Companion.moduleName
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toModuleDependency import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toModuleDependency
import org.jetbrains.kotlin.gradle.utils.withTemporaryDirectory import org.jetbrains.kotlin.gradle.utils.withTemporaryDirectory
internal class IdeaKotlinMetadataBinaryDependencyResolver( internal class IdeaKotlinMetadataBinaryDependencyResolver(
private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory
) : IdeaKotlinDependencyResolver { ) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
.filterIsInstance<ChooseVisibleSourceSets>() .filterIsInstance<ChooseVisibleSourceSets>()
.flatMap { resolution -> resolve(fragment, resolution) } .flatMap { resolution -> resolve(fragment, resolution) }
.toSet() .toSet()
} }
private fun resolve(fragment: KotlinGradleFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKotlinDependency> { private fun resolve(fragment: KpmGradleFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKotlinDependency> {
val gradleModuleIdentifier = resolution.dependency.id as? ModuleComponentIdentifier ?: return emptySet() val gradleModuleIdentifier = resolution.dependency.id as? ModuleComponentIdentifier ?: return emptySet()
val kotlinModuleIdentifier = resolution.dependency.toModuleDependency().moduleIdentifier val kotlinModuleIdentifier = resolution.dependency.toModuleDependency().moduleIdentifier
@@ -5,18 +5,18 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.path import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.path
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
internal object IdeaKotlinMissingFileDependencyLogger : IdeaKotlinDependencyEffect { internal object IdeaKotlinMissingFileDependencyLogger : IdeaKotlinDependencyEffect {
override fun invoke(fragment: KotlinGradleFragment, dependencies: Set<IdeaKotlinDependency>) { override fun invoke(fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>) {
dependencies.filterIsInstance<IdeaKotlinResolvedBinaryDependency>() dependencies.filterIsInstance<IdeaKotlinResolvedBinaryDependency>()
.filter { !it.binaryFile.exists() } .filter { !it.binaryFile.exists() }
.ifNotEmpty { fragment.project.logger.warn(buildWarningMessage(fragment, this)) } .ifNotEmpty { fragment.project.logger.warn(buildWarningMessage(fragment, this)) }
} }
private fun buildWarningMessage(fragment: KotlinGradleFragment, dependencies: List<IdeaKotlinResolvedBinaryDependency>) = buildString { private fun buildWarningMessage(fragment: KpmGradleFragment, dependencies: List<IdeaKotlinResolvedBinaryDependency>) = buildString {
append("[WARNING] ${fragment.path}: Missing dependency files") append("[WARNING] ${fragment.path}: Missing dependency files")
dependencies.forEach { dependency -> dependencies.forEach { dependency ->
appendLine(dependency.binaryFile) appendLine(dependency.binaryFile)
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinModule(module: KotlinGradleModule): IdeaKotlinModule { internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinModule(module: KpmGradleModule): IdeaKotlinModule {
return IdeaKotlinModuleImpl( return IdeaKotlinModuleImpl(
coordinates = IdeaKotlinModuleCoordinates(module), coordinates = IdeaKotlinModuleCoordinates(module),
fragments = module.fragments.toList().map { fragment -> IdeaKotlinFragment(fragment) } fragments = module.fragments.toList().map { fragment -> IdeaKotlinFragment(fragment) }
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.currentBuildId import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.currentBuildId
internal fun IdeaKotlinModuleCoordinates(module: KotlinGradleModule): IdeaKotlinModuleCoordinates { internal fun IdeaKotlinModuleCoordinates(module: KpmGradleModule): IdeaKotlinModuleCoordinates {
return IdeaKotlinModuleCoordinatesImpl( return IdeaKotlinModuleCoordinatesImpl(
buildId = module.project.currentBuildId().name, buildId = module.project.currentBuildId().name,
projectPath = module.project.path, projectPath = module.project.path,
@@ -10,8 +10,8 @@ import org.jetbrains.kotlin.commonizer.KonanDistribution
import org.jetbrains.kotlin.commonizer.platformLibsDir import org.jetbrains.kotlin.commonizer.platformLibsDir
import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.compilerRunner.konanHome
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinNativeVariantInternal import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmNativeVariantInternal
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants
import org.jetbrains.kotlin.library.ToolingSingleFileKlibResolveStrategy import org.jetbrains.kotlin.library.ToolingSingleFileKlibResolveStrategy
import org.jetbrains.kotlin.library.resolveSingleFileKlib import org.jetbrains.kotlin.library.resolveSingleFileKlib
@@ -20,9 +20,9 @@ import org.jetbrains.kotlin.library.uniqueName
import java.io.File import java.io.File
internal class IdeaKotlinNativePlatformDependencyResolver : IdeaKotlinDependencyResolver { internal class IdeaKotlinNativePlatformDependencyResolver : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
val konanTargets = fragment.containingVariants val konanTargets = fragment.containingVariants
.map { it as? KotlinNativeVariantInternal ?: return emptySet() } .map { it as? KpmNativeVariantInternal ?: return emptySet() }
.map { it.konanTarget } .map { it.konanTarget }
.toSet() .toSet()
@@ -9,10 +9,10 @@ import org.jetbrains.kotlin.commonizer.KonanDistribution
import org.jetbrains.kotlin.commonizer.stdlib import org.jetbrains.kotlin.commonizer.stdlib
import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.compilerRunner.konanHome
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
internal object IdeaKotlinNativeStdlibDependencyResolver : IdeaKotlinDependencyResolver { internal object IdeaKotlinNativeStdlibDependencyResolver : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
return setOf( return setOf(
IdeaKotlinResolvedBinaryDependencyImpl( IdeaKotlinResolvedBinaryDependencyImpl(
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE, binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE,
@@ -9,13 +9,13 @@ import org.gradle.api.artifacts.component.ModuleComponentIdentifier
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.KeepOriginalDependency import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.KeepOriginalDependency
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.FragmentGranularMetadataResolverFactory import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.FragmentGranularMetadataResolverFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName
internal class IdeaKotlinOriginalMetadataDependencyResolver( internal class IdeaKotlinOriginalMetadataDependencyResolver(
private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory
) : IdeaKotlinDependencyResolver { ) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
val dependencyIdentifiers = fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions val dependencyIdentifiers = fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
.filterIsInstance<KeepOriginalDependency>() .filterIsInstance<KeepOriginalDependency>()
.mapNotNull { resolution -> resolution.dependency.id as? ModuleComponentIdentifier } .mapNotNull { resolution -> resolution.dependency.id as? ModuleComponentIdentifier }
@@ -14,10 +14,10 @@ import org.jetbrains.kotlin.konan.target.HostManager
@Suppress("unused") @Suppress("unused")
/* Receiver acts as scope, or key to that function */ /* Receiver acts as scope, or key to that function */
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinPlatform(variant: KotlinGradleVariant): IdeaKotlinPlatform { internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinPlatform(variant: KpmGradleVariant): IdeaKotlinPlatform {
when (variant) { when (variant) {
is KotlinJvmVariant -> return IdeaKotlinPlatform.jvm(variant.compilationData.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name) is KpmJvmVariant -> return IdeaKotlinPlatform.jvm(variant.compilationData.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name)
is KotlinNativeVariantInternal -> return IdeaKotlinPlatform.native(variant.konanTarget.name) is KpmNativeVariantInternal -> return IdeaKotlinPlatform.native(variant.konanTarget.name)
is LegacyMappedVariant -> when (val compilation = variant.compilation) { is LegacyMappedVariant -> when (val compilation = variant.compilation) {
is KotlinJvmCompilation -> return IdeaKotlinPlatform.jvm(compilation.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name) is KotlinJvmCompilation -> return IdeaKotlinPlatform.jvm(compilation.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name)
is KotlinJvmAndroidCompilation -> return IdeaKotlinPlatform.jvm(compilation.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name) is KotlinJvmAndroidCompilation -> return IdeaKotlinPlatform.jvm(compilation.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name)
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.FragmentAttributes
* Resolves 'platform' binary dependencies for a given variant or fragment. * Resolves 'platform' binary dependencies for a given variant or fragment.
* 'platform' binaries refer to actually linkable/executable artifacts (like .class files bundled as jar, or linkable native klibs) * 'platform' binaries refer to actually linkable/executable artifacts (like .class files bundled as jar, or linkable native klibs)
* This resolver is capable of resolving those artifacts even for non-variant "platform-like" fragments. * This resolver is capable of resolving those artifacts even for non-variant "platform-like" fragments.
* It will then use the [KotlinGradleFragment.transitiveApiConfiguration] and [KotlinGradleFragment.transitiveImplementationConfiguratione]'s * It will then use the [KpmGradleFragment.transitiveApiConfiguration] and [KpmGradleFragment.transitiveImplementationConfiguratione]'s
* to resolve those binaries. See [IdeaKotlinPlatformDependencyResolver.ArtifactResolution.PlatformFragment] * to resolve those binaries. See [IdeaKotlinPlatformDependencyResolver.ArtifactResolution.PlatformFragment]
*/ */
class IdeaKotlinPlatformDependencyResolver( class IdeaKotlinPlatformDependencyResolver(
@@ -30,28 +30,28 @@ class IdeaKotlinPlatformDependencyResolver(
sealed class ArtifactResolution { sealed class ArtifactResolution {
/** /**
* Resolve the artifacts from a [KotlinGradleVariant] using its [KotlinGradleVariant.compileDependenciesConfiguration], * Resolve the artifacts from a [KpmGradleVariant] using its [KpmGradleVariant.compileDependenciesConfiguration],
* which already knows how to resolve platform artifacts. * which already knows how to resolve platform artifacts.
* @param artifactViewAttributes: Additional attributes that will be used to create an [ArtifactView] for resolving the dependencies. * @param artifactViewAttributes: Additional attributes that will be used to create an [ArtifactView] for resolving the dependencies.
*/ */
data class Variant( data class Variant(
internal val artifactViewAttributes: FragmentAttributes<KotlinGradleFragment> = FragmentAttributes { } internal val artifactViewAttributes: FragmentAttributes<KpmGradleFragment> = FragmentAttributes { }
) : ArtifactResolution() ) : ArtifactResolution()
/** /**
* Capable of resolving artifacts from a plain [KotlinGradleFragment] which does not have to implement [KotlinGradleVariant]. * Capable of resolving artifacts from a plain [KpmGradleFragment] which does not have to implement [KpmGradleVariant].
* Such fragments are called 'platform-like', since they still resolve the linkable platform dependencies. * Such fragments are called 'platform-like', since they still resolve the linkable platform dependencies.
* @param platformResolutionAttributes: Attributes describing how to resolve platform artifacts in general. * @param platformResolutionAttributes: Attributes describing how to resolve platform artifacts in general.
* @param artifactViewAttributes: Additional attributes that will be used to create an [ArtifactView] for * @param artifactViewAttributes: Additional attributes that will be used to create an [ArtifactView] for
* resolving the dependencies * resolving the dependencies
*/ */
data class PlatformFragment( data class PlatformFragment(
internal val platformResolutionAttributes: FragmentAttributes<KotlinGradleFragment>, internal val platformResolutionAttributes: FragmentAttributes<KpmGradleFragment>,
internal val artifactViewAttributes: FragmentAttributes<KotlinGradleFragment> = FragmentAttributes { }, internal val artifactViewAttributes: FragmentAttributes<KpmGradleFragment> = FragmentAttributes { },
) : ArtifactResolution() ) : ArtifactResolution()
} }
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinBinaryDependency> { override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinBinaryDependency> {
val artifacts = artifactResolution.createArtifactView(fragment)?.artifacts ?: return emptySet() val artifacts = artifactResolution.createArtifactView(fragment)?.artifacts ?: return emptySet()
val unresolvedDependencies = artifacts.failures val unresolvedDependencies = artifacts.failures
@@ -87,15 +87,15 @@ private val ComponentIdentifier.ideaKotlinBinaryCoordinates: IdeaKotlinBinaryCoo
else -> null else -> null
} }
private fun ArtifactResolution.createArtifactView(fragment: KotlinGradleFragment): ArtifactView? { private fun ArtifactResolution.createArtifactView(fragment: KpmGradleFragment): ArtifactView? {
return when (this) { return when (this) {
is ArtifactResolution.Variant -> createVariantArtifactView(fragment) is ArtifactResolution.Variant -> createVariantArtifactView(fragment)
is ArtifactResolution.PlatformFragment -> createPlatformFragmentArtifactView(fragment) is ArtifactResolution.PlatformFragment -> createPlatformFragmentArtifactView(fragment)
} }
} }
private fun ArtifactResolution.Variant.createVariantArtifactView(fragment: KotlinGradleFragment): ArtifactView? { private fun ArtifactResolution.Variant.createVariantArtifactView(fragment: KpmGradleFragment): ArtifactView? {
if (fragment !is KotlinGradleVariant) return null if (fragment !is KpmGradleVariant) return null
return fragment.compileDependenciesConfiguration.incoming.artifactView { view -> return fragment.compileDependenciesConfiguration.incoming.artifactView { view ->
view.isLenient = true view.isLenient = true
view.componentFilter { id -> id !is ProjectComponentIdentifier } view.componentFilter { id -> id !is ProjectComponentIdentifier }
@@ -103,7 +103,7 @@ private fun ArtifactResolution.Variant.createVariantArtifactView(fragment: Kotli
} }
} }
private fun ArtifactResolution.PlatformFragment.createPlatformFragmentArtifactView(fragment: KotlinGradleFragment): ArtifactView { private fun ArtifactResolution.PlatformFragment.createPlatformFragmentArtifactView(fragment: KpmGradleFragment): ArtifactView {
val fragmentCompileDependencies = fragment.project.configurations.detachedConfiguration() val fragmentCompileDependencies = fragment.project.configurations.detachedConfiguration()
fragmentCompileDependencies.dependencies.addAll( fragmentCompileDependencies.dependencies.addAll(
@@ -7,10 +7,10 @@ import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder.FragmentConstraint import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder.FragmentConstraint
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.native import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.native
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants
import org.jetbrains.kotlin.project.model.KotlinModuleVariant import org.jetbrains.kotlin.project.model.KpmVariant
import java.io.File import java.io.File
internal interface IdeaKotlinProjectModelBuildingContext { internal interface IdeaKotlinProjectModelBuildingContext {
@@ -94,11 +94,11 @@ interface IdeaKotlinProjectModelBuilder {
* Used for scoping [IdeaKotlinDependencyResolver], [IdeaKotlinDependencyTransformer] and [IdeaKotlinDependencyEffect] * Used for scoping [IdeaKotlinDependencyResolver], [IdeaKotlinDependencyTransformer] and [IdeaKotlinDependencyEffect]
*/ */
fun interface FragmentConstraint { fun interface FragmentConstraint {
operator fun invoke(fragment: KotlinGradleFragment): Boolean operator fun invoke(fragment: KpmGradleFragment): Boolean
companion object { companion object {
val unconstrained = FragmentConstraint { true } val unconstrained = FragmentConstraint { true }
val isVariant = FragmentConstraint { fragment -> fragment is KotlinModuleVariant } val isVariant = FragmentConstraint { fragment -> fragment is KpmVariant }
val isNative = FragmentConstraint { fragment -> fragment.containingVariants.run { any() && all { it.platformType == native } } } val isNative = FragmentConstraint { fragment -> fragment.containingVariants.run { any() && all { it.platformType == native } } }
} }
} }
@@ -5,14 +5,13 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.refinesClosure
internal object IdeaKotlinRefinesDependencyResolver : IdeaKotlinDependencyResolver { internal object IdeaKotlinRefinesDependencyResolver : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> = fragment.refinesClosure override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> = fragment.refinesClosure
.map { refinesDependencyFragment -> createRefinesDependency(refinesDependencyFragment) }.toSet() .map { refinesDependencyFragment -> createRefinesDependency(refinesDependencyFragment) }.toSet()
private fun createRefinesDependency(fragment: KotlinGradleFragment): IdeaKotlinDependency { private fun createRefinesDependency(fragment: KpmGradleFragment): IdeaKotlinDependency {
return IdeaKotlinFragmentDependencyImpl( return IdeaKotlinFragmentDependencyImpl(
type = IdeaKotlinFragmentDependency.Type.Refines, type = IdeaKotlinFragmentDependency.Type.Refines,
coordinates = IdeaKotlinFragmentCoordinates(fragment) coordinates = IdeaKotlinFragmentCoordinates(fragment)
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants
internal object IdeaKotlinSinglePlatformStdlibCommonFilter : IdeaKotlinDependencyTransformer { internal object IdeaKotlinSinglePlatformStdlibCommonFilter : IdeaKotlinDependencyTransformer {
@@ -13,7 +13,7 @@ internal object IdeaKotlinSinglePlatformStdlibCommonFilter : IdeaKotlinDependenc
private val stdlibCoordinatesModules = setOf("kotlin-stdlib-common", "kotlin-test-common", "kotlin-test-annotations-common") private val stdlibCoordinatesModules = setOf("kotlin-stdlib-common", "kotlin-test-common", "kotlin-test-annotations-common")
override fun transform( override fun transform(
fragment: KotlinGradleFragment, fragment: KpmGradleFragment,
dependencies: Set<IdeaKotlinDependency> dependencies: Set<IdeaKotlinDependency>
): Set<IdeaKotlinDependency> { ): Set<IdeaKotlinDependency> {
val platforms = fragment.containingVariants.map { it.platformType }.toSet() val platforms = fragment.containingVariants.map { it.platformType }.toSet()
@@ -14,13 +14,13 @@ import org.gradle.api.component.Artifact
import org.gradle.jvm.JvmLibrary import org.gradle.jvm.JvmLibrary
import org.gradle.language.base.artifact.SourcesArtifact import org.gradle.language.base.artifact.SourcesArtifact
import org.gradle.language.java.artifact.JavadocArtifact import org.gradle.language.java.artifact.JavadocArtifact
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleVariant import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleVariant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName
internal class IdeaKotlinSourcesAndDocumentationResolver : IdeaKotlinDependencyResolver { internal class IdeaKotlinSourcesAndDocumentationResolver : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> { override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
if (fragment is KotlinGradleVariant) { if (fragment is KpmGradleVariant) {
return resolve(fragment.project, fragment.compileDependenciesConfiguration) return resolve(fragment.project, fragment.compileDependenciesConfiguration)
} }
@@ -5,11 +5,11 @@
package org.jetbrains.kotlin.gradle.kpm.idea package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
internal object IdeaKotlinUnusedSourcesAndDocumentationFilter : IdeaKotlinDependencyTransformer { internal object IdeaKotlinUnusedSourcesAndDocumentationFilter : IdeaKotlinDependencyTransformer {
override fun transform( override fun transform(
fragment: KotlinGradleFragment, dependencies: Set<IdeaKotlinDependency> fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
): Set<IdeaKotlinDependency> { ): Set<IdeaKotlinDependency> {
val sourcesAndDocumentationDependencies = dependencies val sourcesAndDocumentationDependencies = dependencies
.filterIsInstance<IdeaKotlinResolvedBinaryDependency>() .filterIsInstance<IdeaKotlinResolvedBinaryDependency>()
@@ -432,7 +432,7 @@ internal open class MetadataMappedCompilationDetails<T : KotlinCommonOptions>(
} }
internal open class VariantMappedCompilationDetails<T : KotlinCommonOptions>( internal open class VariantMappedCompilationDetails<T : KotlinCommonOptions>(
open val variant: KotlinGradleVariantInternal, open val variant: KpmGradleVariantInternal,
override val target: KotlinTarget override val target: KotlinTarget
) : CompilationDetails<T> { ) : CompilationDetails<T> {
@@ -469,7 +469,7 @@ internal open class VariantMappedCompilationDetails<T : KotlinCommonOptions>(
} }
internal open class VariantMappedCompilationDetailsWithRuntime<T : KotlinCommonOptions>( internal open class VariantMappedCompilationDetailsWithRuntime<T : KotlinCommonOptions>(
override val variant: KotlinGradleVariantWithRuntimeInternal, override val variant: KpmGradleVariantWithRuntimeInternal,
target: KotlinTarget target: KotlinTarget
) : VariantMappedCompilationDetails<T>(variant, target), ) : VariantMappedCompilationDetails<T>(variant, target),
CompilationDetailsWithRuntime<T> { CompilationDetailsWithRuntime<T> {
@@ -13,7 +13,7 @@ import org.gradle.api.artifacts.ProjectDependency
import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
import org.jetbrains.kotlin.gradle.targets.js.npm.directoryNpmDependency import org.jetbrains.kotlin.gradle.targets.js.npm.directoryNpmDependency
@@ -74,7 +74,7 @@ class DefaultKotlinDependencyHandler(
dependencyNotation: Any dependencyNotation: Any
): Dependency? { ): Dependency? {
val dependency = when (dependencyNotation) { val dependency = when (dependencyNotation) {
is KotlinGradleModule -> project.dependencies.create(dependencyNotation.project).apply { is KpmGradleModule -> project.dependencies.create(dependencyNotation.project).apply {
(this as ModuleDependency).capabilities { (this as ModuleDependency).capabilities {
if (dependencyNotation.moduleClassifier != null) { if (dependencyNotation.moduleClassifier != null) {
it.requireCapability(ComputedCapability.fromModule(dependencyNotation)) it.requireCapability(ComputedCapability.fromModule(dependencyNotation))
@@ -26,33 +26,33 @@ import org.jetbrains.kotlin.gradle.utils.getOrPutRootProjectProperty
import org.jetbrains.kotlin.project.model.* import org.jetbrains.kotlin.project.model.*
class ProjectStructureMetadataModuleBuilder { class ProjectStructureMetadataModuleBuilder {
private val modulesCache = mutableMapOf<KotlinModuleIdentifier, KotlinModule>() private val modulesCache = mutableMapOf<KpmModuleIdentifier, KpmModule>()
private fun buildModuleFromProjectStructureMetadata( private fun buildModuleFromProjectStructureMetadata(
component: ResolvedComponentResult, component: ResolvedComponentResult,
metadata: KotlinProjectStructureMetadata metadata: KotlinProjectStructureMetadata
): KotlinModule { ): KpmModule {
val moduleData = BasicKotlinModule(component.toSingleModuleIdentifier()).apply { val moduleData = KpmBasicModule(component.toSingleModuleIdentifier()).apply {
metadata.sourceSetNamesByVariantName.keys.forEach { variantName -> metadata.sourceSetNamesByVariantName.keys.forEach { variantName ->
fragments.add(BasicKotlinModuleVariant(this@apply, variantName)) fragments.add(KpmBasicVariant(this@apply, variantName))
} }
fun fragment(sourceSetName: String): BasicKotlinModuleFragment { fun fragment(sourceSetName: String): KpmBasicFragment {
if (fragments.none { it.fragmentName == sourceSetName }) if (fragments.none { it.fragmentName == sourceSetName })
fragments.add(BasicKotlinModuleFragment(this@apply, sourceSetName)) fragments.add(KpmBasicFragment(this@apply, sourceSetName))
return fragmentByName(sourceSetName) return fragmentByName(sourceSetName)
} }
metadata.sourceSetNamesByVariantName.forEach { (variantName, sourceSets) -> metadata.sourceSetNamesByVariantName.forEach { (variantName, sourceSets) ->
val variant = fragmentByName(variantName) val variant = fragmentByName(variantName)
sourceSets.forEach { sourceSetName -> sourceSets.forEach { sourceSetName ->
variant.directRefinesDependencies.add(fragment(sourceSetName)) variant.declaredRefinesDependencies.add(fragment(sourceSetName))
} }
} }
metadata.sourceSetModuleDependencies.forEach { (sourceSetName, dependencies) -> metadata.sourceSetModuleDependencies.forEach { (sourceSetName, dependencies) ->
val fragment = fragment(sourceSetName) val fragment = fragment(sourceSetName)
dependencies.forEach { dependency -> dependencies.forEach { dependency ->
fragment.declaredModuleDependencies.add( fragment.declaredModuleDependencies.add(
KotlinModuleDependency( KpmModuleDependency(
MavenModuleIdentifier( KpmMavenModuleIdentifier(
dependency.groupId.orEmpty(), dependency.groupId.orEmpty(),
dependency.moduleId, dependency.moduleId,
null /* TODO */ null /* TODO */
@@ -65,18 +65,18 @@ class ProjectStructureMetadataModuleBuilder {
metadata.sourceSetsDependsOnRelation.forEach { (depending, dependencies) -> metadata.sourceSetsDependsOnRelation.forEach { (depending, dependencies) ->
val dependingFragment = fragment(depending) val dependingFragment = fragment(depending)
dependencies.forEach { dependency -> dependencies.forEach { dependency ->
dependingFragment.directRefinesDependencies.add(fragment(dependency)) dependingFragment.declaredRefinesDependencies.add(fragment(dependency))
} }
} }
} }
return ExternalImportedKotlinModule( return KpmExternalImportedModule(
moduleData, moduleData,
metadata, metadata,
moduleData.fragments.filterTo(mutableSetOf()) { it.fragmentName in metadata.hostSpecificSourceSets } moduleData.fragments.filterTo(mutableSetOf()) { it.fragmentName in metadata.hostSpecificSourceSets }
) )
} }
fun getModule(component: ResolvedComponentResult, projectStructureMetadata: KotlinProjectStructureMetadata): KotlinModule { fun getModule(component: ResolvedComponentResult, projectStructureMetadata: KotlinProjectStructureMetadata): KpmModule {
val moduleId = component.toSingleModuleIdentifier() val moduleId = component.toSingleModuleIdentifier()
return modulesCache.getOrPut(moduleId) { return modulesCache.getOrPut(moduleId) {
buildModuleFromProjectStructureMetadata( buildModuleFromProjectStructureMetadata(
@@ -123,7 +123,7 @@ private fun detectModules(targets: Iterable<KotlinTarget>, sourceSets: Iterable<
class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExplicit: Boolean) { class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExplicit: Boolean) {
private fun getModulesFromPm20Project(project: Project) = project.kpmModules.toList() private fun getModulesFromPm20Project(project: Project) = project.kpmModules.toList()
fun buildModulesFromProject(project: Project): List<KotlinModule> { fun buildModulesFromProject(project: Project): List<KpmModule> {
if (project.hasKpmModel) if (project.hasKpmModel)
return getModulesFromPm20Project(project) return getModulesFromPm20Project(project)
@@ -144,19 +144,19 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
.flatMap { component -> (component as? KotlinVariant)?.usages.orEmpty() } .flatMap { component -> (component as? KotlinVariant)?.usages.orEmpty() }
}.groupBy { it.compilation } }.groupBy { it.compilation }
val moduleByFragment = mutableMapOf<KotlinModuleFragment, KotlinModule>() val moduleByFragment = mutableMapOf<KpmFragment, KpmModule>()
val result = moduleCompilationCluster.entries.map { (classifier, compilationsToInclude) -> val result = moduleCompilationCluster.entries.map { (classifier, compilationsToInclude) ->
val sourceSetsToInclude = compilationsToInclude.flatMapTo(mutableSetOf()) { it.allKotlinSourceSets } val sourceSetsToInclude = compilationsToInclude.flatMapTo(mutableSetOf()) { it.allKotlinSourceSets }
val moduleIdentifier = LocalModuleIdentifier( val moduleIdentifier = KpmLocalModuleIdentifier(
project.currentBuildId().name, project.currentBuildId().name,
project.path, project.path,
classifier.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME } classifier.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }
) )
BasicKotlinModule(moduleIdentifier).apply { KpmBasicModule(moduleIdentifier).apply {
val variantToCompilation = mutableMapOf<BasicKotlinModuleFragment, KotlinCompilation<*>>() val variantToCompilation = mutableMapOf<KpmBasicFragment, KotlinCompilation<*>>()
compilationsToInclude.forEach { compilation -> compilationsToInclude.forEach { compilation ->
// A compilation may be exposed as more than one variant, so we collect all of its names // A compilation may be exposed as more than one variant, so we collect all of its names
@@ -165,7 +165,7 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
?: listOf(compilation.defaultSourceSetName) ?: listOf(compilation.defaultSourceSetName)
variantNames.forEach { variantName -> variantNames.forEach { variantName ->
val variant = BasicKotlinModuleVariant(this@apply, variantName, DefaultLanguageSettingsBuilder()) val variant = KpmBasicVariant(this@apply, variantName, DefaultLanguageSettingsBuilder())
moduleByFragment[variant] = this@apply moduleByFragment[variant] = this@apply
variantToCompilation[variant] = compilation variantToCompilation[variant] = compilation
fragments.add(variant) fragments.add(variant)
@@ -181,8 +181,8 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
} }
// Once all fragments are created, add dependencies between them // Once all fragments are created, add dependencies between them
sourceSetsToInclude.forEach { sourceSet -> sourceSetsToInclude.forEach { sourceSet ->
val existingVariant = fragments.filterIsInstance<BasicKotlinModuleVariant>().find { it.fragmentName == sourceSet.name } val existingVariant = fragments.filterIsInstance<KpmBasicVariant>().find { it.fragmentName == sourceSet.name }
val fragment = existingVariant ?: BasicKotlinModuleFragment(this@apply, sourceSet.name, sourceSet.languageSettings).also { fragments.add(it) } val fragment = existingVariant ?: KpmBasicFragment(this@apply, sourceSet.name, sourceSet.languageSettings).also { fragments.add(it) }
moduleByFragment[fragment] = this@apply moduleByFragment[fragment] = this@apply
fragment.kotlinSourceRoots = sourceSet.kotlin.sourceDirectories.toList() fragment.kotlinSourceRoots = sourceSet.kotlin.sourceDirectories.toList()
@@ -197,7 +197,7 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
?: variantToCompilation.getValue(fragment).defaultSourceSet ?: variantToCompilation.getValue(fragment).defaultSourceSet
sourceSet.dependsOn.forEach { dependency -> sourceSet.dependsOn.forEach { dependency ->
val dependencyFragment = fragmentByName(dependency.name) val dependencyFragment = fragmentByName(dependency.name)
fragment.directRefinesDependencies.add(dependencyFragment) fragment.declaredRefinesDependencies.add(dependencyFragment)
} }
} }
} }
@@ -210,7 +210,7 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
val variant = fragmentByName(compilation.defaultSourceSetName) val variant = fragmentByName(compilation.defaultSourceSetName)
compilation.associateWith.forEach { associate -> compilation.associateWith.forEach { associate ->
val associateVariant = fragmentByName(associate.defaultSourceSetName) val associateVariant = fragmentByName(associate.defaultSourceSetName)
variant.declaredModuleDependencies.add(KotlinModuleDependency(associateVariant.containingModule.moduleIdentifier)) variant.declaredModuleDependencies.add(KpmModuleDependency(associateVariant.containingModule.moduleIdentifier))
} }
} }
@@ -219,7 +219,7 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
val fragment = fragmentByName(sourceSet.name) val fragment = fragmentByName(sourceSet.name)
getVisibleSourceSetsFromAssociateCompilations(project, sourceSet).forEach { dependency -> getVisibleSourceSetsFromAssociateCompilations(project, sourceSet).forEach { dependency ->
val dependencyFragment = fragmentByName(dependency.name) val dependencyFragment = fragmentByName(dependency.name)
fragment.declaredModuleDependencies.add(KotlinModuleDependency(dependencyFragment.containingModule.moduleIdentifier)) fragment.declaredModuleDependencies.add(KpmModuleDependency(dependencyFragment.containingModule.moduleIdentifier))
} }
} }
} }
@@ -238,44 +238,44 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
internal fun Dependency.toModuleDependency( internal fun Dependency.toModuleDependency(
project: Project project: Project
): KotlinModuleDependency { ): KpmModuleDependency {
return KotlinModuleDependency( return KpmModuleDependency(
when (this) { when (this) {
is ProjectDependency -> is ProjectDependency ->
LocalModuleIdentifier( KpmLocalModuleIdentifier(
project.currentBuildId().name, project.currentBuildId().name,
dependencyProject.path, dependencyProject.path,
moduleClassifiersFromCapabilities(requestedCapabilities).single() // FIXME multiple capabilities moduleClassifiersFromCapabilities(requestedCapabilities).single() // FIXME multiple capabilities
) )
is ModuleDependency -> is ModuleDependency ->
MavenModuleIdentifier( KpmMavenModuleIdentifier(
group.orEmpty(), group.orEmpty(),
name, name,
moduleClassifiersFromCapabilities(requestedCapabilities).single() // FIXME multiple capabilities moduleClassifiersFromCapabilities(requestedCapabilities).single() // FIXME multiple capabilities
) )
else -> MavenModuleIdentifier(group.orEmpty(), name, null) else -> KpmMavenModuleIdentifier(group.orEmpty(), name, null)
} }
) )
} }
private fun BasicKotlinModule.fragmentByName(name: String) = private fun KpmBasicModule.fragmentByName(name: String) =
fragments.single { it.fragmentName == name } fragments.single { it.fragmentName == name }
class CachingModuleVariantResolver(private val actualResolver: ModuleVariantResolver) : ModuleVariantResolver { class CachingModuleVariantResolver(private val actualResolver: ModuleVariantResolver) : ModuleVariantResolver {
private val resultCacheByRequestingVariant: MutableMap<KotlinModuleVariant, MutableMap<KotlinModule, VariantResolution>> = mutableMapOf() private val resultCacheByRequestingVariant: MutableMap<org.jetbrains.kotlin.project.model.KpmVariant, MutableMap<KpmModule, VariantResolution>> = mutableMapOf()
override fun getChosenVariant(requestingVariant: KotlinModuleVariant, dependencyModule: KotlinModule): VariantResolution { override fun getChosenVariant(requestingVariant: org.jetbrains.kotlin.project.model.KpmVariant, dependencyModule: KpmModule): VariantResolution {
val resultCache = resultCacheByRequestingVariant.getOrPut(requestingVariant) { mutableMapOf() } val resultCache = resultCacheByRequestingVariant.getOrPut(requestingVariant) { mutableMapOf() }
return resultCache.getOrPut(dependencyModule) { actualResolver.getChosenVariant(requestingVariant, dependencyModule) } return resultCache.getOrPut(dependencyModule) { actualResolver.getChosenVariant(requestingVariant, dependencyModule) }
} }
} }
class GradleModuleVariantResolver : ModuleVariantResolver { class GradleModuleVariantResolver : ModuleVariantResolver {
override fun getChosenVariant(requestingVariant: KotlinModuleVariant, dependencyModule: KotlinModule): VariantResolution { override fun getChosenVariant(requestingVariant: org.jetbrains.kotlin.project.model.KpmVariant, dependencyModule: KpmModule): VariantResolution {
// TODO maybe improve this behavior? Currently it contradicts dependency resolution in that it may return a chosen variant for an // TODO maybe improve this behavior? Currently it contradicts dependency resolution in that it may return a chosen variant for an
// unrequested dependency. This workaround is needed for synthetic modules which were not produced from module metadata, so maybe // unrequested dependency. This workaround is needed for synthetic modules which were not produced from module metadata, so maybe
// those modules should be marked somehow // those modules should be marked somehow
if (dependencyModule is ExternalPlainKotlinModule) { if (dependencyModule is KpmExternalPlainModule) {
return VariantResolution.fromMatchingVariants( return VariantResolution.fromMatchingVariants(
requestingVariant, requestingVariant,
dependencyModule, dependencyModule,
@@ -283,7 +283,7 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
) )
} }
if (requestingVariant !is KotlinGradleVariant) { if (requestingVariant !is KpmGradleVariant) {
return VariantResolution.Unknown(requestingVariant, dependencyModule) return VariantResolution.Unknown(requestingVariant, dependencyModule)
} }
@@ -300,7 +300,7 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
// FIXME check composite builds, it's likely that resolvedVariantProvider fails on them? // FIXME check composite builds, it's likely that resolvedVariantProvider fails on them?
val resolvedGradleVariantName = resolvedVariantProvider.getResolvedVariantName(dependencyModuleId, compileClasspath) val resolvedGradleVariantName = resolvedVariantProvider.getResolvedVariantName(dependencyModuleId, compileClasspath)
val kotlinVariantName = when (dependencyModule) { val kotlinVariantName = when (dependencyModule) {
is KotlinGradleModule -> { is KpmGradleModule -> {
dependencyModule.variants.singleOrNull { resolvedGradleVariantName in it.gradleVariantNames }?.name dependencyModule.variants.singleOrNull { resolvedGradleVariantName in it.gradleVariantNames }?.name
?: return VariantResolution.Unknown(requestingVariant, dependencyModule) ?: return VariantResolution.Unknown(requestingVariant, dependencyModule)
} }
@@ -315,10 +315,10 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
VariantResolution.VariantMatch(requestingVariant, dependencyModule, resultVariant) VariantResolution.VariantMatch(requestingVariant, dependencyModule, resultVariant)
} }
private fun getCompileDependenciesConfigurationForVariant(project: Project, requestingVariant: KotlinModuleVariant): Configuration = private fun getCompileDependenciesConfigurationForVariant(project: Project, requestingVariant: org.jetbrains.kotlin.project.model.KpmVariant): Configuration =
when { when {
project.hasKpmModel -> { project.hasKpmModel -> {
(requestingVariant as KotlinGradleVariant).compileDependenciesConfiguration (requestingVariant as KpmGradleVariant).compileDependenciesConfiguration
} }
else -> { else -> {
val targets = val targets =
@@ -80,10 +80,10 @@ class KotlinMultiplatformPlugin : Plugin<Project> {
setupKpmModulesPublication(project) setupKpmModulesPublication(project)
registerDefaultVariantFactories(project) registerDefaultVariantFactories(project)
with(project.kpmModules) { with(project.kpmModules) {
create(KotlinGradleModule.MAIN_MODULE_NAME) { create(KpmGradleModule.MAIN_MODULE_NAME) {
it.makePublic() it.makePublic()
} }
create(KotlinGradleModule.TEST_MODULE_NAME) create(KpmGradleModule.TEST_MODULE_NAME)
} }
} }
@@ -282,7 +282,7 @@ internal fun applyUserDefinedAttributes(target: AbstractKotlinTarget) {
private fun applyUserDefinedAttributesWithKpm( private fun applyUserDefinedAttributesWithKpm(
target: AbstractKotlinTarget, target: AbstractKotlinTarget,
) { ) {
fun copyAttributesToVariant(variant: KotlinGradleVariant, from: AttributeContainer) { fun copyAttributesToVariant(variant: KpmGradleVariant, from: AttributeContainer) {
variant.gradleVariantNames.forEach { configurationOrVariantName -> variant.gradleVariantNames.forEach { configurationOrVariantName ->
val configuration = variant.project.configurations.findByName(configurationOrVariantName) val configuration = variant.project.configurations.findByName(configurationOrVariantName)
?: return@forEach ?: return@forEach
@@ -307,7 +307,7 @@ private fun applyUserDefinedAttributesWithKpm(
} }
// Also handle the legacy-mapped variants, which are not accessible through the compilations in the loop above // Also handle the legacy-mapped variants, which are not accessible through the compilations in the loop above
project.kpmModules.getByName(KotlinGradleModule.MAIN_MODULE_NAME).variants.withType(LegacyMappedVariant::class.java).all { variant -> project.kpmModules.getByName(KpmGradleModule.MAIN_MODULE_NAME).variants.withType(LegacyMappedVariant::class.java).all { variant ->
val compilation = variant.compilation val compilation = variant.compilation
copyAttributesToVariant(variant, compilation.attributes) copyAttributesToVariant(variant, compilation.attributes)
} }
@@ -14,9 +14,8 @@ import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Nested import org.gradle.api.tasks.Nested
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.withRefinesClosure
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope
import org.jetbrains.kotlin.gradle.targets.metadata.dependsOnClosureWithInterCompilationDependencies import org.jetbrains.kotlin.gradle.targets.metadata.dependsOnClosureWithInterCompilationDependencies
@@ -191,7 +190,7 @@ internal fun buildKotlinProjectStructureMetadata(project: Project): KotlinProjec
) )
} }
internal fun buildProjectStructureMetadata(module: KotlinGradleModule): KotlinProjectStructureMetadata { internal fun buildProjectStructureMetadata(module: KpmGradleModule): KotlinProjectStructureMetadata {
val kotlinVariantToGradleVariantNames = module.variants.associate { it.name to it.gradleVariantNames } val kotlinVariantToGradleVariantNames = module.variants.associate { it.name to it.gradleVariantNames }
fun <T> expandVariantKeys(map: Map<String, T>) = fun <T> expandVariantKeys(map: Map<String, T>) =
@@ -202,7 +201,7 @@ internal fun buildProjectStructureMetadata(module: KotlinGradleModule): KotlinPr
val kotlinFragmentsPerKotlinVariant = val kotlinFragmentsPerKotlinVariant =
module.variants.associate { variant -> variant.name to variant.withRefinesClosure.map { it.name }.toSet() } module.variants.associate { variant -> variant.name to variant.withRefinesClosure.map { it.name }.toSet() }
val fragmentRefinesRelation = val fragmentRefinesRelation =
module.fragments.associate { it.name to it.directRefinesDependencies.map { it.fragmentName }.toSet() } module.fragments.associate { it.name to it.declaredRefinesDependencies.map { it.fragmentName }.toSet() }
// FIXME: support native implementation-as-api-dependencies // FIXME: support native implementation-as-api-dependencies
// FIXME: support dependencies on auxiliary modules // FIXME: support dependencies on auxiliary modules
@@ -18,9 +18,9 @@ import org.jetbrains.kotlin.gradle.dsl.topLevelExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability
import org.jetbrains.kotlin.gradle.utils.getValue import org.jetbrains.kotlin.gradle.utils.getValue
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
import org.jetbrains.kotlin.project.model.LocalModuleIdentifier import org.jetbrains.kotlin.project.model.KpmLocalModuleIdentifier
import org.jetbrains.kotlin.project.model.MavenModuleIdentifier import org.jetbrains.kotlin.project.model.KpmMavenModuleIdentifier
internal object ModuleIds { internal object ModuleIds {
fun fromDependency(dependency: Dependency): ModuleDependencyIdentifier = when (dependency) { fun fromDependency(dependency: Dependency): ModuleDependencyIdentifier = when (dependency) {
@@ -71,9 +71,9 @@ internal object ModuleIds {
idOfRootModule(thisProject.project(projectPath)) idOfRootModule(thisProject.project(projectPath))
// FIXME use capabilities to point to auxiliary modules // FIXME use capabilities to point to auxiliary modules
fun lossyFromModuleIdentifier(thisProject: Project, moduleIdentifier: KotlinModuleIdentifier): ModuleDependencyIdentifier { fun lossyFromModuleIdentifier(thisProject: Project, moduleIdentifier: KpmModuleIdentifier): ModuleDependencyIdentifier {
when (moduleIdentifier) { when (moduleIdentifier) {
is LocalModuleIdentifier -> { is KpmLocalModuleIdentifier -> {
check(moduleIdentifier.buildId == thisProject.currentBuildId().name) check(moduleIdentifier.buildId == thisProject.currentBuildId().name)
val dependencyProject = thisProject.project(moduleIdentifier.projectId) val dependencyProject = thisProject.project(moduleIdentifier.projectId)
val topLevelExtension = dependencyProject.topLevelExtension val topLevelExtension = dependencyProject.topLevelExtension
@@ -101,7 +101,7 @@ internal object ModuleIds {
) )
return ChangingModuleDependencyIdentifier({ coordinatesProvider.group }, { coordinatesProvider.name }) return ChangingModuleDependencyIdentifier({ coordinatesProvider.group }, { coordinatesProvider.name })
} }
is MavenModuleIdentifier -> { is KpmMavenModuleIdentifier -> {
return ModuleDependencyIdentifier(moduleIdentifier.group, moduleIdentifier.name) return ModuleDependencyIdentifier(moduleIdentifier.group, moduleIdentifier.name)
} }
else -> error("unexpected module identifier $moduleIdentifier") else -> error("unexpected module identifier $moduleIdentifier")
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.gradle.dsl.topLevelExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
import java.io.File import java.io.File
import java.io.InputStream import java.io.InputStream
import java.util.zip.ZipFile import java.util.zip.ZipFile
@@ -25,7 +25,7 @@ sealed class MppDependencyProjectStructureMetadataExtractor {
} }
internal class ProjectMppDependencyProjectStructureMetadataExtractor( internal class ProjectMppDependencyProjectStructureMetadataExtractor(
val moduleIdentifier: KotlinModuleIdentifier, val moduleIdentifier: KpmModuleIdentifier,
val dependencyProject: Project val dependencyProject: Project
) : MppDependencyProjectStructureMetadataExtractor() { ) : MppDependencyProjectStructureMetadataExtractor() {
@@ -11,7 +11,7 @@ import org.gradle.api.artifacts.component.ProjectComponentIdentifier
import org.gradle.api.artifacts.result.ResolvedComponentResult import org.gradle.api.artifacts.result.ResolvedComponentResult
import org.gradle.api.artifacts.result.ResolvedDependencyResult import org.gradle.api.artifacts.result.ResolvedDependencyResult
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleModuleIdentifier import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleModuleIdentifier
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
internal fun MppDependencyProjectStructureMetadataExtractor.Factory.create( internal fun MppDependencyProjectStructureMetadataExtractor.Factory.create(
project: Project, project: Project,
@@ -36,7 +36,7 @@ internal fun MppDependencyProjectStructureMetadataExtractor.Factory.create(
internal fun MppDependencyProjectStructureMetadataExtractor.Factory.create( internal fun MppDependencyProjectStructureMetadataExtractor.Factory.create(
project: Project, project: Project,
resolvedComponentResult: ResolvedComponentResult, resolvedComponentResult: ResolvedComponentResult,
moduleIdentifier: KotlinModuleIdentifier, moduleIdentifier: KpmModuleIdentifier,
configuration: Configuration configuration: Configuration
): MppDependencyProjectStructureMetadataExtractor? { ): MppDependencyProjectStructureMetadataExtractor? {
return create( return create(
@@ -51,7 +51,7 @@ internal fun MppDependencyProjectStructureMetadataExtractor.Factory.create(
private fun MppDependencyProjectStructureMetadataExtractor.Factory.create( private fun MppDependencyProjectStructureMetadataExtractor.Factory.create(
resolvedMppVariantsProvider: ResolvedMppVariantsProvider, resolvedMppVariantsProvider: ResolvedMppVariantsProvider,
moduleIdentifier: KotlinModuleIdentifier, moduleIdentifier: KpmModuleIdentifier,
configuration: Configuration, configuration: Configuration,
resolveViaAvailableAt: Boolean, resolveViaAvailableAt: Boolean,
resolvedComponentResult: ResolvedComponentResult, resolvedComponentResult: ResolvedComponentResult,
@@ -15,18 +15,18 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.metadataCompilationRegistryByModuleId import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.metadataCompilationRegistryByModuleId
import org.jetbrains.kotlin.gradle.targets.native.internal.* import org.jetbrains.kotlin.gradle.targets.native.internal.*
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
internal fun ProjectMetadataProvider( internal fun ProjectMetadataProvider(
dependencyProject: Project, dependencyProject: Project,
moduleIdentifier: KotlinModuleIdentifier moduleIdentifier: KpmModuleIdentifier
): ProjectMetadataProvider { ): ProjectMetadataProvider {
return ProjectMetadataProviderImpl(dependencyProject, moduleIdentifier) return ProjectMetadataProviderImpl(dependencyProject, moduleIdentifier)
} }
private class ProjectMetadataProviderImpl( private class ProjectMetadataProviderImpl(
private val dependencyProject: Project, private val dependencyProject: Project,
private val moduleIdentifier: KotlinModuleIdentifier private val moduleIdentifier: KpmModuleIdentifier
) : ProjectMetadataProvider() { ) : ProjectMetadataProvider() {
override fun getSourceSetCompiledMetadata(sourceSetName: String): FileCollection { override fun getSourceSetCompiledMetadata(sourceSetName: String): FileCollection {
val projectExtension = dependencyProject.topLevelExtensionOrNull val projectExtension = dependencyProject.topLevelExtensionOrNull
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toModuleIdentifiers
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleModuleIdentifier import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleModuleIdentifier
import org.jetbrains.kotlin.gradle.plugin.usageByName import org.jetbrains.kotlin.gradle.plugin.usageByName
import org.jetbrains.kotlin.gradle.utils.getOrPut import org.jetbrains.kotlin.gradle.utils.getOrPut
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
import java.io.File import java.io.File
internal class ResolvedMppVariantsProvider private constructor(private val project: Project) { internal class ResolvedMppVariantsProvider private constructor(private val project: Project) {
@@ -33,7 +33,7 @@ internal class ResolvedMppVariantsProvider private constructor(private val proje
/** Gets the name of the variant that the module specified by the [moduleIdentifier] resolved to in the given [configuration]. /** Gets the name of the variant that the module specified by the [moduleIdentifier] resolved to in the given [configuration].
* The [moduleIdentifier] may be either the root module or a platform-specific module, the result is the same for the two cases. */ * The [moduleIdentifier] may be either the root module or a platform-specific module, the result is the same for the two cases. */
fun getResolvedVariantName(moduleIdentifier: KotlinModuleIdentifier, configuration: Configuration): String? = fun getResolvedVariantName(moduleIdentifier: KpmModuleIdentifier, configuration: Configuration): String? =
getEntryForModule(moduleIdentifier).run { getEntryForModule(moduleIdentifier).run {
if (configuration !in resolvedVariantsByConfiguration) { if (configuration !in resolvedVariantsByConfiguration) {
resolveConfigurationAndSaveVariants(configuration, artifactResolutionMode = ArtifactResolutionMode.NONE) resolveConfigurationAndSaveVariants(configuration, artifactResolutionMode = ArtifactResolutionMode.NONE)
@@ -46,7 +46,7 @@ internal class ResolvedMppVariantsProvider private constructor(private val proje
* module of a multiplatform project, not one of its platform-specific modules, as seen in the given [configuration]. * module of a multiplatform project, not one of its platform-specific modules, as seen in the given [configuration].
* If the [configuration] requests platform artifacts and not the common code metadata, then this function will resolve its * If the [configuration] requests platform artifacts and not the common code metadata, then this function will resolve its
* dependencies to metadata separately. */ * dependencies to metadata separately. */
fun getHostSpecificMetadataArtifactByRootModule(rootModuleIdentifier: KotlinModuleIdentifier, configuration: Configuration): File? { fun getHostSpecificMetadataArtifactByRootModule(rootModuleIdentifier: KpmModuleIdentifier, configuration: Configuration): File? {
val rootModuleEntry = getEntryForModule(rootModuleIdentifier) val rootModuleEntry = getEntryForModule(rootModuleIdentifier)
val platformModuleEntry = rootModuleEntry.run { val platformModuleEntry = rootModuleEntry.run {
@@ -68,7 +68,7 @@ internal class ResolvedMppVariantsProvider private constructor(private val proje
} }
/** Gets the artifact of a particular MPP platform-specific [moduleIdentifier] as resolved in the [configuration]. */ /** Gets the artifact of a particular MPP platform-specific [moduleIdentifier] as resolved in the [configuration]. */
fun getResolvedArtifactByPlatformModule(moduleIdentifier: KotlinModuleIdentifier, configuration: Configuration): File? = fun getResolvedArtifactByPlatformModule(moduleIdentifier: KpmModuleIdentifier, configuration: Configuration): File? =
getEntryForModule(moduleIdentifier).run { getEntryForModule(moduleIdentifier).run {
if (configuration !in resolvedArtifactByConfiguration) { if (configuration !in resolvedArtifactByConfiguration) {
resolveConfigurationAndSaveVariants(configuration, artifactResolutionMode = ArtifactResolutionMode.NORMAL) resolveConfigurationAndSaveVariants(configuration, artifactResolutionMode = ArtifactResolutionMode.NORMAL)
@@ -77,10 +77,10 @@ internal class ResolvedMppVariantsProvider private constructor(private val proje
resolvedArtifactByConfiguration.getOrPut(configuration) { null } resolvedArtifactByConfiguration.getOrPut(configuration) { null }
} }
private fun getEntryForModule(moduleIdentifier: KotlinModuleIdentifier) = private fun getEntryForModule(moduleIdentifier: KpmModuleIdentifier) =
entriesCache.getOrPut(moduleIdentifier, { ModuleEntry(moduleIdentifier) }) entriesCache.getOrPut(moduleIdentifier, { ModuleEntry(moduleIdentifier) })
private val entriesCache: MutableMap<KotlinModuleIdentifier, ModuleEntry> = mutableMapOf() private val entriesCache: MutableMap<KpmModuleIdentifier, ModuleEntry> = mutableMapOf()
private val mppComponentsByConfiguration: MutableMap<Configuration, Set<ResolvedComponentResult>> = mutableMapOf() private val mppComponentsByConfiguration: MutableMap<Configuration, Set<ResolvedComponentResult>> = mutableMapOf()
@@ -211,12 +211,12 @@ internal class ResolvedMppVariantsProvider private constructor(private val proje
*/ */
private class ModuleEntry( private class ModuleEntry(
@Suppress("unused") // simplify debugging @Suppress("unused") // simplify debugging
val moduleIdentifier: KotlinModuleIdentifier val moduleIdentifier: KpmModuleIdentifier
) { ) {
val dependenciesByConfiguration: MutableMap<Configuration, List<KotlinModuleIdentifier>> = HashMap() val dependenciesByConfiguration: MutableMap<Configuration, List<KpmModuleIdentifier>> = HashMap()
val resolvedVariantsByConfiguration: MutableMap<Configuration, List<ResolvedVariantResult?>?> = HashMap() val resolvedVariantsByConfiguration: MutableMap<Configuration, List<ResolvedVariantResult?>?> = HashMap()
val resolvedArtifactByConfiguration: MutableMap<Configuration, File?> = HashMap() val resolvedArtifactByConfiguration: MutableMap<Configuration, File?> = HashMap()
val resolvedMetadataArtifactByConfiguration: MutableMap<Configuration, File?> = HashMap() val resolvedMetadataArtifactByConfiguration: MutableMap<Configuration, File?> = HashMap()
val chosenPlatformModuleByConfiguration: MutableMap<Configuration, ModuleEntry?> = HashMap() val chosenPlatformModuleByConfiguration: MutableMap<Configuration, ModuleEntry?> = HashMap()
} }
} }
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages.producerRuntimeUsage
import org.jetbrains.kotlin.gradle.plugin.usageByName import org.jetbrains.kotlin.gradle.plugin.usageByName
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
val KotlinFragmentPlatformAttributes = FragmentAttributes<KotlinGradleVariant> { val KotlinFragmentPlatformAttributes = FragmentAttributes<KpmGradleVariant> {
if (isGradleVersionAtLeast(7, 0) && fragment.platformType == KotlinPlatformType.jvm) { if (isGradleVersionAtLeast(7, 0) && fragment.platformType == KotlinPlatformType.jvm) {
namedAttribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, TargetJvmEnvironment.STANDARD_JVM) namedAttribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, TargetJvmEnvironment.STANDARD_JVM)
} }
@@ -28,26 +28,26 @@ val KotlinFragmentPlatformAttributes = FragmentAttributes<KotlinGradleVariant> {
attribute(KotlinPlatformType.attribute, fragment.platformType) attribute(KotlinPlatformType.attribute, fragment.platformType)
} }
val KotlinFragmentConsumerApiUsageAttribute = FragmentAttributes<KotlinGradleVariant> { val KotlinFragmentConsumerApiUsageAttribute = FragmentAttributes<KpmGradleVariant> {
attribute(USAGE_ATTRIBUTE, consumerApiUsage(project, fragment.platformType)) attribute(USAGE_ATTRIBUTE, consumerApiUsage(project, fragment.platformType))
} }
val KotlinFragmentProducerApiUsageAttribute = FragmentAttributes<KotlinGradleVariant> { val KotlinFragmentProducerApiUsageAttribute = FragmentAttributes<KpmGradleVariant> {
attribute(USAGE_ATTRIBUTE, producerApiUsage(fragment.project, fragment.platformType)) attribute(USAGE_ATTRIBUTE, producerApiUsage(fragment.project, fragment.platformType))
} }
val KotlinFragmentConsumerRuntimeUsageAttribute = FragmentAttributes<KotlinGradleVariant> { val KotlinFragmentConsumerRuntimeUsageAttribute = FragmentAttributes<KpmGradleVariant> {
attribute(USAGE_ATTRIBUTE, consumerRuntimeUsage(fragment.project, fragment.platformType)) attribute(USAGE_ATTRIBUTE, consumerRuntimeUsage(fragment.project, fragment.platformType))
} }
val KotlinFragmentProducerRuntimeUsageAttribute = FragmentAttributes<KotlinGradleVariant> { val KotlinFragmentProducerRuntimeUsageAttribute = FragmentAttributes<KpmGradleVariant> {
attribute(USAGE_ATTRIBUTE, producerRuntimeUsage(fragment.project, fragment.platformType)) attribute(USAGE_ATTRIBUTE, producerRuntimeUsage(fragment.project, fragment.platformType))
} }
val KotlinFragmentMetadataUsageAttribute = FragmentAttributes<KotlinGradleFragment> { val KotlinFragmentMetadataUsageAttribute = FragmentAttributes<KpmGradleFragment> {
attribute(USAGE_ATTRIBUTE, fragment.project.usageByName(KotlinUsages.KOTLIN_METADATA)) attribute(USAGE_ATTRIBUTE, fragment.project.usageByName(KotlinUsages.KOTLIN_METADATA))
} }
val KotlinFragmentKonanTargetAttribute = FragmentAttributes<KotlinNativeVariantInternal> { val KotlinFragmentKonanTargetAttribute = FragmentAttributes<KpmNativeVariantInternal> {
attributes.attribute(KotlinNativeTarget.konanTargetAttribute, fragment.konanTarget.name) attributes.attribute(KotlinNativeTarget.konanTargetAttribute, fragment.konanTarget.name)
} }
@@ -15,12 +15,12 @@ import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
import org.jetbrains.kotlin.project.model.* import org.jetbrains.kotlin.project.model.*
internal fun resolvableMetadataConfiguration( internal fun resolvableMetadataConfiguration(
module: KotlinGradleModule module: KpmGradleModule
) = module.project.configurations.getByName(module.resolvableMetadataConfigurationName) ) = module.project.configurations.getByName(module.resolvableMetadataConfigurationName)
internal fun configurationToResolveMetadataDependencies(project: Project, requestingModule: KotlinModule): Configuration = internal fun configurationToResolveMetadataDependencies(project: Project, requestingModule: KpmModule): Configuration =
when { when {
project.hasKpmModel -> resolvableMetadataConfiguration(requestingModule as KotlinGradleModule) project.hasKpmModel -> resolvableMetadataConfiguration(requestingModule as KpmGradleModule)
else -> resolvableMetadataConfiguration( else -> resolvableMetadataConfiguration(
project, project,
project.kotlinExtension.sourceSets, // take dependencies from all source sets; TODO introduce consistency scopes? project.kotlinExtension.sourceSets, // take dependencies from all source sets; TODO introduce consistency scopes?
@@ -29,40 +29,40 @@ internal fun configurationToResolveMetadataDependencies(project: Project, reques
} }
class GradleKotlinDependencyGraphResolver( class KpmGradleDependencyGraphResolver(
private val moduleResolver: ModuleDependencyResolver private val moduleResolver: KpmModuleDependencyResolver
) : KotlinDependencyGraphResolver { ) : KpmDependencyGraphResolver {
private fun configurationToResolve(requestingModule: KotlinGradleModule): Configuration = private fun configurationToResolve(requestingModule: KpmGradleModule): Configuration =
configurationToResolveMetadataDependencies(requestingModule.project, requestingModule) configurationToResolveMetadataDependencies(requestingModule.project, requestingModule)
override fun resolveDependencyGraph(requestingModule: KotlinModule): DependencyGraphResolution { override fun resolveDependencyGraph(requestingModule: KpmModule): KpmDependencyGraphResolution {
if (requestingModule !is KotlinGradleModule) if (requestingModule !is KpmGradleModule)
return DependencyGraphResolution.Unknown(requestingModule) return KpmDependencyGraphResolution.Unknown(requestingModule)
return resolveAsGraph(requestingModule) return resolveAsGraph(requestingModule)
} }
private fun resolveAsGraph(requestingModule: KotlinGradleModule): GradleDependencyGraph { private fun resolveAsGraph(requestingModule: KpmGradleModule): KpmGradleDependencyGraph {
val nodeByModuleId = mutableMapOf<KotlinModuleIdentifier, GradleDependencyGraphNode>() val nodeByModuleId = mutableMapOf<KpmModuleIdentifier, GradleDependencyGraphNode>()
fun getKotlinModuleFromComponentResult(component: ResolvedComponentResult): KotlinModule = fun getKotlinModuleFromComponentResult(component: ResolvedComponentResult): KpmModule =
moduleResolver.resolveDependency(requestingModule, component.toModuleDependency()) moduleResolver.resolveDependency(requestingModule, component.toModuleDependency())
?: buildSyntheticPlainModule( ?: buildSyntheticPlainModule(
component, component,
component.variants.singleOrNull()?.displayName ?: "default", component.variants.singleOrNull()?.displayName ?: "default",
) )
fun nodeFromModule(componentResult: ResolvedComponentResult, kotlinModule: KotlinModule): GradleDependencyGraphNode { fun nodeFromModule(componentResult: ResolvedComponentResult, kpmModule: KpmModule): GradleDependencyGraphNode {
val id = kotlinModule.moduleIdentifier val id = kpmModule.moduleIdentifier
return nodeByModuleId.getOrPut(id) { return nodeByModuleId.getOrPut(id) {
val metadataSourceComponent = val metadataSourceComponent =
(kotlinModule as? ExternalImportedKotlinModule) (kpmModule as? KpmExternalImportedModule)
?.takeIf { it.hasLegacyMetadataModule } ?.takeIf { it.hasLegacyMetadataModule }
?.let { (componentResult.dependencies.singleOrNull() as? ResolvedDependencyResult)?.selected } ?.let { (componentResult.dependencies.singleOrNull() as? ResolvedDependencyResult)?.selected }
?: componentResult ?: componentResult
val dependenciesRequestedByModule = val dependenciesRequestedByModule =
kotlinModule.fragments.flatMap { fragment -> fragment.declaredModuleDependencies.map { it.moduleIdentifier } }.toSet() kpmModule.fragments.flatMap { fragment -> fragment.declaredModuleDependencies.map { it.moduleIdentifier } }.toSet()
val resolvedComponentDependencies = metadataSourceComponent.dependencies val resolvedComponentDependencies = metadataSourceComponent.dependencies
.filterIsInstance<ResolvedDependencyResult>() .filterIsInstance<ResolvedDependencyResult>()
@@ -72,7 +72,7 @@ class GradleKotlinDependencyGraphResolver(
.flatMap { dependency -> dependency.requested.toModuleIdentifiers().map { id -> id to dependency.selected } } .flatMap { dependency -> dependency.requested.toModuleIdentifiers().map { id -> id to dependency.selected } }
.toMap() .toMap()
val fragmentDependencies = kotlinModule.fragments.associateWith { it.declaredModuleDependencies } val fragmentDependencies = kpmModule.fragments.associateWith { it.declaredModuleDependencies }
val nodeDependenciesMap = fragmentDependencies.mapValues { (_, deps) -> val nodeDependenciesMap = fragmentDependencies.mapValues { (_, deps) ->
deps.mapNotNull { resolvedComponentDependencies[it.moduleIdentifier] }.map { deps.mapNotNull { resolvedComponentDependencies[it.moduleIdentifier] }.map {
@@ -82,7 +82,7 @@ class GradleKotlinDependencyGraphResolver(
} }
GradleDependencyGraphNode( GradleDependencyGraphNode(
kotlinModule, kpmModule,
componentResult, componentResult,
metadataSourceComponent, metadataSourceComponent,
nodeDependenciesMap nodeDependenciesMap
@@ -90,7 +90,7 @@ class GradleKotlinDependencyGraphResolver(
} }
} }
return GradleDependencyGraph( return KpmGradleDependencyGraph(
requestingModule, requestingModule,
nodeFromModule(configurationToResolve(requestingModule).incoming.resolutionResult.root, requestingModule) nodeFromModule(configurationToResolve(requestingModule).incoming.resolutionResult.root, requestingModule)
) )
@@ -98,16 +98,16 @@ class GradleKotlinDependencyGraphResolver(
} }
class GradleDependencyGraphNode( class GradleDependencyGraphNode(
override val module: KotlinModule, override val module: KpmModule,
val selectedComponent: ResolvedComponentResult, val selectedComponent: ResolvedComponentResult,
/** If the Kotlin module description was provided by a different component, such as with legacy publishing layout using *-metadata /** If the Kotlin module description was provided by a different component, such as with legacy publishing layout using *-metadata
* modules, then this property points to the other component. */ * modules, then this property points to the other component. */
val metadataSourceComponent: ResolvedComponentResult?, val metadataSourceComponent: ResolvedComponentResult?,
override val dependenciesByFragment: Map<KotlinModuleFragment, Iterable<GradleDependencyGraphNode>> override val dependenciesByFragment: Map<KpmFragment, Iterable<GradleDependencyGraphNode>>
) : DependencyGraphNode(module, dependenciesByFragment) ) : KpmDependencyGraphNode(module, dependenciesByFragment)
class GradleDependencyGraph( class KpmGradleDependencyGraph(
override val requestingModule: KotlinGradleModule, override val requestingModule: KpmGradleModule,
override val root: GradleDependencyGraphNode override val root: GradleDependencyGraphNode
) : DependencyGraphResolution.DependencyGraph(requestingModule, root) ) : KpmDependencyGraphResolution.KpmDependencyGraph(requestingModule, root)
@@ -16,38 +16,39 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
import org.jetbrains.kotlin.gradle.utils.getOrPutRootProjectProperty import org.jetbrains.kotlin.gradle.utils.getOrPutRootProjectProperty
import org.jetbrains.kotlin.project.model.* import org.jetbrains.kotlin.project.model.*
import org.jetbrains.kotlin.project.model.KpmVariant
import java.util.* import java.util.*
class CachingModuleDependencyResolver(private val actualResolver: ModuleDependencyResolver) : ModuleDependencyResolver { class KpmCachingModuleDependencyResolver(private val actualResolver: KpmModuleDependencyResolver) : KpmModuleDependencyResolver {
private val cacheByRequestingModule = WeakHashMap<KotlinModule, MutableMap<KotlinModuleDependency, KotlinModule?>>() private val cacheByRequestingModule = WeakHashMap<KpmModule, MutableMap<KpmModuleDependency, KpmModule?>>()
private fun cacheForRequestingModule(requestingModule: KotlinModule) = private fun cacheForRequestingModule(requestingModule: KpmModule) =
cacheByRequestingModule.getOrPut(requestingModule) { mutableMapOf() } cacheByRequestingModule.getOrPut(requestingModule) { mutableMapOf() }
override fun resolveDependency(requestingModule: KotlinModule, moduleDependency: KotlinModuleDependency): KotlinModule? = override fun resolveDependency(requestingModule: KpmModule, moduleDependency: KpmModuleDependency): KpmModule? =
cacheForRequestingModule(requestingModule).getOrPut(moduleDependency) { cacheForRequestingModule(requestingModule).getOrPut(moduleDependency) {
actualResolver.resolveDependency(requestingModule, moduleDependency) actualResolver.resolveDependency(requestingModule, moduleDependency)
} }
} }
open class GradleComponentResultCachingResolver { open class GradleComponentResultCachingResolver {
private val cachedResultsByRequestingModule = mutableMapOf<KotlinGradleModule, Map<KotlinModuleIdentifier, ResolvedComponentResult>>() private val cachedResultsByRequestingModule = mutableMapOf<KpmGradleModule, Map<KpmModuleIdentifier, ResolvedComponentResult>>()
protected open fun configurationToResolve(requestingModule: KotlinGradleModule): Configuration = protected open fun configurationToResolve(requestingModule: KpmGradleModule): Configuration =
configurationToResolveMetadataDependencies(requestingModule.project, requestingModule) configurationToResolveMetadataDependencies(requestingModule.project, requestingModule)
protected open fun resolveDependencies(module: KotlinGradleModule): Map<KotlinModuleIdentifier, ResolvedComponentResult> { protected open fun resolveDependencies(module: KpmGradleModule): Map<KpmModuleIdentifier, ResolvedComponentResult> {
val allComponents = configurationToResolve(module).incoming.resolutionResult.allComponents val allComponents = configurationToResolve(module).incoming.resolutionResult.allComponents
// FIXME handle multi-component results // FIXME handle multi-component results
return allComponents.flatMap { component -> component.toModuleIdentifiers().map { it to component } }.toMap() return allComponents.flatMap { component -> component.toModuleIdentifiers().map { it to component } }.toMap()
} }
private fun getResultsForModule(module: KotlinGradleModule): Map<KotlinModuleIdentifier, ResolvedComponentResult> = private fun getResultsForModule(module: KpmGradleModule): Map<KpmModuleIdentifier, ResolvedComponentResult> =
cachedResultsByRequestingModule.getOrPut(module) { resolveDependencies(module) } cachedResultsByRequestingModule.getOrPut(module) { resolveDependencies(module) }
fun resolveModuleDependencyAsComponentResult( fun resolveModuleDependencyAsComponentResult(
requestingModule: KotlinGradleModule, requestingModule: KpmGradleModule,
moduleDependency: KotlinModuleDependency moduleDependency: KpmModuleDependency
): ResolvedComponentResult? = ): ResolvedComponentResult? =
getResultsForModule(requestingModule)[moduleDependency.moduleIdentifier] getResultsForModule(requestingModule)[moduleDependency.moduleIdentifier]
@@ -61,14 +62,14 @@ open class GradleComponentResultCachingResolver {
} }
} }
class GradleModuleDependencyResolver( class KpmGradleModuleDependencyResolver(
private val gradleComponentResultResolver: GradleComponentResultCachingResolver, private val gradleComponentResultResolver: GradleComponentResultCachingResolver,
private val projectStructureMetadataModuleBuilder: ProjectStructureMetadataModuleBuilder, private val projectStructureMetadataModuleBuilder: ProjectStructureMetadataModuleBuilder,
private val projectModuleBuilder: GradleProjectModuleBuilder private val projectModuleBuilder: GradleProjectModuleBuilder
) : ModuleDependencyResolver { ) : KpmModuleDependencyResolver {
override fun resolveDependency(requestingModule: KotlinModule, moduleDependency: KotlinModuleDependency): KotlinModule? { override fun resolveDependency(requestingModule: KpmModule, moduleDependency: KpmModuleDependency): KpmModule? {
require(requestingModule is KotlinGradleModule) require(requestingModule is KpmGradleModule)
val project = requestingModule.project val project = requestingModule.project
val component = gradleComponentResultResolver.resolveModuleDependencyAsComponentResult(requestingModule, moduleDependency) val component = gradleComponentResultResolver.resolveModuleDependencyAsComponentResult(requestingModule, moduleDependency)
@@ -97,14 +98,14 @@ class GradleModuleDependencyResolver(
} }
companion object { companion object {
fun getForCurrentBuild(project: Project): ModuleDependencyResolver { fun getForCurrentBuild(project: Project): KpmModuleDependencyResolver {
val extraPropertyName = "org.jetbrains.kotlin.dependencyResolution.moduleResolver.${project.getKotlinPluginVersion()}" val extraPropertyName = "org.jetbrains.kotlin.dependencyResolution.moduleResolver.${project.getKotlinPluginVersion()}"
return project.getOrPutRootProjectProperty(extraPropertyName) { return project.getOrPutRootProjectProperty(extraPropertyName) {
val componentResultResolver = GradleComponentResultCachingResolver.getForCurrentBuild(project) val componentResultResolver = GradleComponentResultCachingResolver.getForCurrentBuild(project)
val metadataModuleBuilder = ProjectStructureMetadataModuleBuilder() val metadataModuleBuilder = ProjectStructureMetadataModuleBuilder()
val projectModuleBuilder = GradleProjectModuleBuilder(true) val projectModuleBuilder = GradleProjectModuleBuilder(true)
CachingModuleDependencyResolver( KpmCachingModuleDependencyResolver(
GradleModuleDependencyResolver(componentResultResolver, metadataModuleBuilder, projectModuleBuilder) KpmGradleModuleDependencyResolver(componentResultResolver, metadataModuleBuilder, projectModuleBuilder)
) )
} }
} }
@@ -116,10 +117,10 @@ class GradleModuleDependencyResolver(
internal fun buildSyntheticPlainModule( internal fun buildSyntheticPlainModule(
resolvedComponentResult: ResolvedComponentResult, resolvedComponentResult: ResolvedComponentResult,
singleVariantName: String, singleVariantName: String,
): ExternalPlainKotlinModule { ): KpmExternalPlainModule {
val moduleDependency = resolvedComponentResult.toModuleDependency() val moduleDependency = resolvedComponentResult.toModuleDependency()
return ExternalPlainKotlinModule(BasicKotlinModule(moduleDependency.moduleIdentifier).apply { return KpmExternalPlainModule(KpmBasicModule(moduleDependency.moduleIdentifier).apply {
BasicKotlinModuleVariant(this@apply, singleVariantName, DefaultLanguageSettingsBuilder()).apply { KpmBasicVariant(this@apply, singleVariantName, DefaultLanguageSettingsBuilder()).apply {
fragments.add(this) fragments.add(this)
this.declaredModuleDependencies.addAll( this.declaredModuleDependencies.addAll(
resolvedComponentResult.dependencies resolvedComponentResult.dependencies
@@ -130,47 +131,47 @@ internal fun buildSyntheticPlainModule(
}) })
} }
internal class ExternalPlainKotlinModule(private val moduleData: BasicKotlinModule) : KotlinModule by moduleData { internal class KpmExternalPlainModule(private val moduleData: KpmBasicModule) : KpmModule by moduleData {
override fun toString(): String = "external plain $moduleData" override fun toString(): String = "external plain $moduleData"
val singleVariant: KotlinModuleVariant val singleVariant: KpmVariant
get() = moduleData.variants.singleOrNull() get() = moduleData.variants.singleOrNull()
?: error("synthetic $moduleData was expected to have a single variant, got: ${moduleData.variants}") ?: error("synthetic $moduleData was expected to have a single variant, got: ${moduleData.variants}")
} }
internal class ExternalImportedKotlinModule( internal class KpmExternalImportedModule(
private val moduleData: BasicKotlinModule, private val moduleData: KpmBasicModule,
val projectStructureMetadata: KotlinProjectStructureMetadata, val projectStructureMetadata: KotlinProjectStructureMetadata,
val hostSpecificFragments: Set<KotlinModuleFragment> val hostSpecificFragments: Set<KpmFragment>
) : KotlinModule by moduleData { ) : KpmModule by moduleData {
val hasLegacyMetadataModule = !projectStructureMetadata.isPublishedAsRoot val hasLegacyMetadataModule = !projectStructureMetadata.isPublishedAsRoot
override fun toString(): String = "imported $moduleData" override fun toString(): String = "imported $moduleData"
} }
private fun ModuleComponentIdentifier.toSingleModuleIdentifier(classifier: String? = null): MavenModuleIdentifier = private fun ModuleComponentIdentifier.toSingleModuleIdentifier(classifier: String? = null): KpmMavenModuleIdentifier =
MavenModuleIdentifier(moduleIdentifier.group, moduleIdentifier.name, classifier) KpmMavenModuleIdentifier(moduleIdentifier.group, moduleIdentifier.name, classifier)
internal fun ComponentIdentifier.matchesModule(module: KotlinModule): Boolean = internal fun ComponentIdentifier.matchesModule(module: KpmModule): Boolean =
matchesModuleIdentifier(module.moduleIdentifier) matchesModuleIdentifier(module.moduleIdentifier)
internal fun ResolvedComponentResult.toModuleIdentifiers(): List<KotlinModuleIdentifier> { internal fun ResolvedComponentResult.toModuleIdentifiers(): List<KpmModuleIdentifier> {
val classifiers = moduleClassifiersFromCapabilities(variants.flatMap { it.capabilities }) val classifiers = moduleClassifiersFromCapabilities(variants.flatMap { it.capabilities })
return classifiers.map { moduleClassifier -> toModuleIdentifier(moduleClassifier) } return classifiers.map { moduleClassifier -> toModuleIdentifier(moduleClassifier) }
} }
// FIXME this mapping doesn't have enough information to choose auxiliary modules // FIXME this mapping doesn't have enough information to choose auxiliary modules
internal fun ResolvedComponentResult.toSingleModuleIdentifier(): KotlinModuleIdentifier { internal fun ResolvedComponentResult.toSingleModuleIdentifier(): KpmModuleIdentifier {
val classifiers = moduleClassifiersFromCapabilities(variants.flatMap { it.capabilities }) val classifiers = moduleClassifiersFromCapabilities(variants.flatMap { it.capabilities })
val moduleClassifier = classifiers.single() // FIXME handle multiple capabilities val moduleClassifier = classifiers.single() // FIXME handle multiple capabilities
return toModuleIdentifier(moduleClassifier) return toModuleIdentifier(moduleClassifier)
} }
private fun ResolvedComponentResult.toModuleIdentifier(moduleClassifier: String?): KotlinModuleIdentifier { private fun ResolvedComponentResult.toModuleIdentifier(moduleClassifier: String?): KpmModuleIdentifier {
return when (val id = id) { return when (val id = id) {
is ProjectComponentIdentifier -> LocalModuleIdentifier(id.build.name, id.projectPath, moduleClassifier) is ProjectComponentIdentifier -> KpmLocalModuleIdentifier(id.build.name, id.projectPath, moduleClassifier)
is ModuleComponentIdentifier -> id.toSingleModuleIdentifier() is ModuleComponentIdentifier -> id.toSingleModuleIdentifier()
else -> MavenModuleIdentifier(moduleVersion?.group.orEmpty(), moduleVersion?.name.orEmpty(), moduleClassifier) else -> KpmMavenModuleIdentifier(moduleVersion?.group.orEmpty(), moduleVersion?.name.orEmpty(), moduleClassifier)
} }
} }
@@ -179,31 +180,31 @@ internal fun moduleClassifiersFromCapabilities(capabilities: Iterable<Capability
return if (classifierCapabilities.none()) listOf(null) else classifierCapabilities.map { it.name.substringAfterLast("..") /*FIXME invent a more stable scheme*/ } return if (classifierCapabilities.none()) listOf(null) else classifierCapabilities.map { it.name.substringAfterLast("..") /*FIXME invent a more stable scheme*/ }
} }
internal fun ComponentSelector.toModuleIdentifiers(): Iterable<KotlinModuleIdentifier> { internal fun ComponentSelector.toModuleIdentifiers(): Iterable<KpmModuleIdentifier> {
val moduleClassifiers = moduleClassifiersFromCapabilities(requestedCapabilities) val moduleClassifiers = moduleClassifiersFromCapabilities(requestedCapabilities)
return when (this) { return when (this) {
is ProjectComponentSelector -> moduleClassifiers.map { LocalModuleIdentifier(buildName, projectPath, it) } is ProjectComponentSelector -> moduleClassifiers.map { KpmLocalModuleIdentifier(buildName, projectPath, it) }
is ModuleComponentSelector -> moduleClassifiers.map { MavenModuleIdentifier(moduleIdentifier.group, moduleIdentifier.name, it) } is ModuleComponentSelector -> moduleClassifiers.map { KpmMavenModuleIdentifier(moduleIdentifier.group, moduleIdentifier.name, it) }
else -> error("unexpected component selector") else -> error("unexpected component selector")
} }
} }
internal fun ResolvedComponentResult.toModuleDependency(): KotlinModuleDependency = KotlinModuleDependency(toSingleModuleIdentifier()) internal fun ResolvedComponentResult.toModuleDependency(): KpmModuleDependency = KpmModuleDependency(toSingleModuleIdentifier())
internal fun ComponentSelector.toModuleDependency(): KotlinModuleDependency { internal fun ComponentSelector.toModuleDependency(): KpmModuleDependency {
val moduleId = toModuleIdentifiers().single() // FIXME handle multiple val moduleId = toModuleIdentifiers().single() // FIXME handle multiple
return KotlinModuleDependency(moduleId) return KpmModuleDependency(moduleId)
} }
internal fun ComponentIdentifier.matchesModuleDependency(moduleDependency: KotlinModuleDependency) = internal fun ComponentIdentifier.matchesModuleDependency(moduleDependency: KpmModuleDependency) =
matchesModuleIdentifier(moduleDependency.moduleIdentifier) matchesModuleIdentifier(moduleDependency.moduleIdentifier)
internal fun ComponentIdentifier.matchesModuleIdentifier(id: KotlinModuleIdentifier): Boolean = internal fun ComponentIdentifier.matchesModuleIdentifier(id: KpmModuleIdentifier): Boolean =
when (id) { when (id) {
is LocalModuleIdentifier -> { is KpmLocalModuleIdentifier -> {
val projectId = this as? ProjectComponentIdentifier val projectId = this as? ProjectComponentIdentifier
projectId?.build?.name == id.buildId && projectId.projectPath == id.projectId projectId?.build?.name == id.buildId && projectId.projectPath == id.projectId
} }
is MavenModuleIdentifier -> { is KpmMavenModuleIdentifier -> {
val componentId = this as? ModuleComponentIdentifier val componentId = this as? ModuleComponentIdentifier
componentId?.toSingleModuleIdentifier() == id componentId?.toSingleModuleIdentifier() == id
} }
@@ -214,7 +215,7 @@ private fun getProjectStructureMetadata(
project: Project, project: Project,
module: ResolvedComponentResult, module: ResolvedComponentResult,
configuration: Configuration, configuration: Configuration,
moduleIdentifier: KotlinModuleIdentifier? = null moduleIdentifier: KpmModuleIdentifier? = null
): KotlinProjectStructureMetadata? { ): KotlinProjectStructureMetadata? {
val extractor = if (moduleIdentifier != null) val extractor = if (moduleIdentifier != null)
MppDependencyProjectStructureMetadataExtractor.create(project, module, moduleIdentifier, configuration) MppDependencyProjectStructureMetadataExtractor.create(project, module, moduleIdentifier, configuration)
@@ -15,7 +15,7 @@ import java.io.File
import java.util.* import java.util.*
internal class FragmentGranularMetadataResolver( internal class FragmentGranularMetadataResolver(
private val requestingFragment: KotlinGradleFragment, private val requestingFragment: KpmGradleFragment,
private val refinesParentResolvers: Lazy<Iterable<FragmentGranularMetadataResolver>> private val refinesParentResolvers: Lazy<Iterable<FragmentGranularMetadataResolver>>
) { ) {
val resolutions: Iterable<MetadataDependencyResolution> by lazy { val resolutions: Iterable<MetadataDependencyResolution> by lazy {
@@ -25,14 +25,14 @@ internal class FragmentGranularMetadataResolver(
private val project: Project private val project: Project
get() = requestingFragment.containingModule.project get() = requestingFragment.containingModule.project
private val parentResultsByModuleIdentifier: Map<KotlinModuleIdentifier, List<MetadataDependencyResolution>> by lazy { private val parentResultsByModuleIdentifier: Map<KpmModuleIdentifier, List<MetadataDependencyResolution>> by lazy {
refinesParentResolvers.value.flatMap { it.resolutions }.groupBy { it.dependency.toSingleModuleIdentifier() } refinesParentResolvers.value.flatMap { it.resolutions }.groupBy { it.dependency.toSingleModuleIdentifier() }
} }
private val moduleResolver = GradleModuleDependencyResolver.getForCurrentBuild(project) private val moduleResolver = KpmGradleModuleDependencyResolver.getForCurrentBuild(project)
private val variantResolver = GradleModuleVariantResolver.getForCurrentBuild(project) private val variantResolver = GradleModuleVariantResolver.getForCurrentBuild(project)
private val fragmentResolver = DefaultModuleFragmentsResolver(variantResolver) private val fragmentResolver = DefaultModuleFragmentsResolver(variantResolver)
private val dependencyGraphResolver = GradleKotlinDependencyGraphResolver(moduleResolver) private val dependencyGraphResolver = KpmGradleDependencyGraphResolver(moduleResolver)
private fun doResolveMetadataDependencies(): Iterable<MetadataDependencyResolution> { private fun doResolveMetadataDependencies(): Iterable<MetadataDependencyResolution> {
val configurationToResolve = configurationToResolveMetadataDependencies(project, requestingFragment.containingModule) val configurationToResolve = configurationToResolveMetadataDependencies(project, requestingFragment.containingModule)
@@ -44,10 +44,10 @@ internal class FragmentGranularMetadataResolver(
val dependencyGraph = dependencyGraphResolver.resolveDependencyGraph(requestingFragment.containingModule) val dependencyGraph = dependencyGraphResolver.resolveDependencyGraph(requestingFragment.containingModule)
if (dependencyGraph is DependencyGraphResolution.Unknown) if (dependencyGraph is KpmDependencyGraphResolution.Unknown)
error("unexpected failure in dependency graph resolution for $requestingFragment in $project") error("unexpected failure in dependency graph resolution for $requestingFragment in $project")
dependencyGraph as GradleDependencyGraph // refactor the type hierarchy to avoid this downcast? FIXME? dependencyGraph as KpmGradleDependencyGraph // refactor the type hierarchy to avoid this downcast? FIXME?
val fragmentsToInclude = requestingFragment.withRefinesClosure val fragmentsToInclude = requestingFragment.withRefinesClosure
val requestedDependencies = dependencyGraph.root.dependenciesByFragment.filterKeys { it in fragmentsToInclude }.values.flatten() val requestedDependencies = dependencyGraph.root.dependenciesByFragment.filterKeys { it in fragmentsToInclude }.values.flatten()
@@ -74,7 +74,7 @@ internal class FragmentGranularMetadataResolver(
val resolvedComponentResult = dependencyNode.selectedComponent val resolvedComponentResult = dependencyNode.selectedComponent
val isResolvedAsProject = resolvedComponentResult.toProjectOrNull(project) val isResolvedAsProject = resolvedComponentResult.toProjectOrNull(project)
val result = when (dependencyModule) { val result = when (dependencyModule) {
is ExternalPlainKotlinModule -> { is KpmExternalPlainModule -> {
MetadataDependencyResolution.KeepOriginalDependency(resolvedComponentResult, isResolvedAsProject) MetadataDependencyResolution.KeepOriginalDependency(resolvedComponentResult, isResolvedAsProject)
} }
else -> run { else -> run {
@@ -96,7 +96,7 @@ internal class FragmentGranularMetadataResolver(
"the presence of a proper Kotlin Module" "the presence of a proper Kotlin Module"
) )
val projectStructureMetadata = (dependencyModule as? ExternalImportedKotlinModule)?.projectStructureMetadata val projectStructureMetadata = (dependencyModule as? KpmExternalImportedModule)?.projectStructureMetadata
?: checkNotNull(projectStructureMetadataExtractor.getProjectStructureMetadata()) ?: checkNotNull(projectStructureMetadataExtractor.getProjectStructureMetadata())
@@ -111,7 +111,7 @@ internal class FragmentGranularMetadataResolver(
projectStructureMetadata = projectStructureMetadata, projectStructureMetadata = projectStructureMetadata,
primaryArtifactFile = projectStructureMetadataExtractor.primaryArtifactFile, primaryArtifactFile = projectStructureMetadataExtractor.primaryArtifactFile,
hostSpecificArtifactsBySourceSet = if ( hostSpecificArtifactsBySourceSet = if (
dependencyModule is ExternalImportedKotlinModule && chosenFragments != null dependencyModule is KpmExternalImportedModule && chosenFragments != null
) resolveHostSpecificMetadataArtifacts(dependencyModule, chosenFragments) else emptyMap(), ) resolveHostSpecificMetadataArtifacts(dependencyModule, chosenFragments) else emptyMap(),
).asMetadataProvider() ).asMetadataProvider()
} }
@@ -140,14 +140,14 @@ internal class FragmentGranularMetadataResolver(
return results return results
} }
private fun fragmentsNamesVisibleByParents(kotlinModuleIdentifier: KotlinModuleIdentifier): MutableSet<String> { private fun fragmentsNamesVisibleByParents(kotlinModuleIdentifier: KpmModuleIdentifier): MutableSet<String> {
val parentResolutionsForDependency = parentResultsByModuleIdentifier[kotlinModuleIdentifier].orEmpty() val parentResolutionsForDependency = parentResultsByModuleIdentifier[kotlinModuleIdentifier].orEmpty()
return parentResolutionsForDependency.filterIsInstance<MetadataDependencyResolution.ChooseVisibleSourceSets>() return parentResolutionsForDependency.filterIsInstance<MetadataDependencyResolution.ChooseVisibleSourceSets>()
.flatMapTo(mutableSetOf()) { it.allVisibleSourceSetNames } .flatMapTo(mutableSetOf()) { it.allVisibleSourceSetNames }
} }
private fun resolveHostSpecificMetadataArtifacts( private fun resolveHostSpecificMetadataArtifacts(
dependencyModule: ExternalImportedKotlinModule, dependencyModule: KpmExternalImportedModule,
chosenFragments: FragmentResolution.ChosenFragments, chosenFragments: FragmentResolution.ChosenFragments,
): Map<String, File> { ): Map<String, File> {
val visibleFragments = chosenFragments.visibleFragments val visibleFragments = chosenFragments.visibleFragments
@@ -161,7 +161,7 @@ internal class FragmentGranularMetadataResolver(
// resolve the dependencies of that variant getting the host-specific metadata artifact // resolve the dependencies of that variant getting the host-specific metadata artifact
relevantVariantResolution?.let { resolution -> relevantVariantResolution?.let { resolution ->
val configurationResolvingPlatformVariant = val configurationResolvingPlatformVariant =
(resolution.requestingVariant as KotlinGradleVariant).compileDependenciesConfiguration (resolution.requestingVariant as KpmGradleVariant).compileDependenciesConfiguration
val hostSpecificArtifact = ResolvedMppVariantsProvider.get(project) val hostSpecificArtifact = ResolvedMppVariantsProvider.get(project)
.getHostSpecificMetadataArtifactByRootModule( .getHostSpecificMetadataArtifactByRootModule(
dependencyModule.moduleIdentifier, dependencyModule.moduleIdentifier,
@@ -6,9 +6,9 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20 package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
internal class FragmentGranularMetadataResolverFactory { internal class FragmentGranularMetadataResolverFactory {
private val resolvers = mutableMapOf<KotlinGradleFragment, FragmentGranularMetadataResolver>() private val resolvers = mutableMapOf<KpmGradleFragment, FragmentGranularMetadataResolver>()
fun getOrCreate(fragment: KotlinGradleFragment): FragmentGranularMetadataResolver = resolvers.getOrPut(fragment) { fun getOrCreate(fragment: KpmGradleFragment): FragmentGranularMetadataResolver = resolvers.getOrPut(fragment) {
FragmentGranularMetadataResolver(fragment, lazy { FragmentGranularMetadataResolver(fragment, lazy {
fragment.refinesClosure.map { refinesFragment -> fragment.refinesClosure.map { refinesFragment ->
getOrCreate(refinesFragment) getOrCreate(refinesFragment)
@@ -13,30 +13,30 @@ import java.io.File
typealias SourceRoots = Iterable<File> typealias SourceRoots = Iterable<File>
typealias SourceRootsProvider = Provider<out SourceRoots> typealias SourceRootsProvider = Provider<out SourceRoots>
typealias MultipleSourceRootsProvider = Provider<out Iterable<SourceRootsProvider>> typealias MultipleSourceRootsProvider = Provider<out Iterable<SourceRootsProvider>>
typealias SourceRootsProvidersByFragment = Map<KotlinGradleFragment, SourceRootsProvider> typealias SourceRootsProvidersByFragment = Map<KpmGradleFragment, SourceRootsProvider>
/** Note: the API is [Provider]-based rather than FileCollection-based because FileCollection API erases the internal structure of the /** Note: the API is [Provider]-based rather than FileCollection-based because FileCollection API erases the internal structure of the
* file sets, and this internal structure is currently needed for correctly inferring Java source roots from the sources added to the * file sets, and this internal structure is currently needed for correctly inferring Java source roots from the sources added to the
* JVM compilations (it is important to pass sources in SourceDirectorySets) */ * JVM compilations (it is important to pass sources in SourceDirectorySets) */
open class FragmentSourcesProvider { open class FragmentSourcesProvider {
protected open fun getSourcesFromFragmentsAsMap( protected open fun getSourcesFromFragmentsAsMap(
fragments: Iterable<KotlinGradleFragment> fragments: Iterable<KpmGradleFragment>
): SourceRootsProvidersByFragment = ): SourceRootsProvidersByFragment =
fragments.associateWith { it.project.provider { it.kotlinSourceRoots } } fragments.associateWith { it.project.provider { it.kotlinSourceRoots } }
open fun getFragmentOwnSources(fragment: KotlinGradleFragment): SourceRootsProvider = open fun getFragmentOwnSources(fragment: KpmGradleFragment): SourceRootsProvider =
getSourcesFromFragmentsAsMap(listOf(fragment)).values.single() getSourcesFromFragmentsAsMap(listOf(fragment)).values.single()
open fun getAllFragmentSourcesAsMap(module: KotlinGradleModule): SourceRootsProvidersByFragment = open fun getAllFragmentSourcesAsMap(module: KpmGradleModule): SourceRootsProvidersByFragment =
getSourcesFromFragmentsAsMap(module.fragments) getSourcesFromFragmentsAsMap(module.fragments)
open fun getSourcesFromRefinesClosureAsMap(fragment: KotlinGradleFragment): SourceRootsProvidersByFragment = open fun getSourcesFromRefinesClosureAsMap(fragment: KpmGradleFragment): SourceRootsProvidersByFragment =
getSourcesFromFragmentsAsMap(fragment.withRefinesClosure) getSourcesFromFragmentsAsMap(fragment.withRefinesClosure)
open fun getSourcesFromRefinesClosure(fragment: KotlinGradleFragment): MultipleSourceRootsProvider = open fun getSourcesFromRefinesClosure(fragment: KpmGradleFragment): MultipleSourceRootsProvider =
fragment.project.provider { getSourcesFromRefinesClosureAsMap(fragment).values } fragment.project.provider { getSourcesFromRefinesClosureAsMap(fragment).values }
open fun getCommonSourcesFromRefinesClosure(fragment: KotlinGradleFragment): MultipleSourceRootsProvider { open fun getCommonSourcesFromRefinesClosure(fragment: KpmGradleFragment): MultipleSourceRootsProvider {
val containingModule = fragment.containingModule val containingModule = fragment.containingModule
val project = containingModule.project val project = containingModule.project
getSourcesFromRefinesClosureAsMap(fragment) getSourcesFromRefinesClosureAsMap(fragment)
@@ -18,17 +18,17 @@ import org.jetbrains.kotlin.project.model.*
import java.io.File import java.io.File
internal fun Project.compilerPluginProviderForMetadata( internal fun Project.compilerPluginProviderForMetadata(
fragment: KotlinGradleFragment, fragment: KpmGradleFragment,
compilationData: KotlinCommonFragmentMetadataCompilationData compilationData: KotlinCommonFragmentMetadataCompilationData
) = compilerPluginDataProvider(compilationData, fragment::metadataCompilationPluginData) ) = compilerPluginDataProvider(compilationData, fragment::metadataCompilationPluginData)
internal fun Project.compilerPluginProviderForNativeMetadata( internal fun Project.compilerPluginProviderForNativeMetadata(
fragment: KotlinGradleFragment, fragment: KpmGradleFragment,
compilationData: KotlinNativeFragmentMetadataCompilationData compilationData: KotlinNativeFragmentMetadataCompilationData
) = compilerPluginDataProvider(compilationData, fragment::nativeMetadataCompilationPluginData) ) = compilerPluginDataProvider(compilationData, fragment::nativeMetadataCompilationPluginData)
internal fun Project.compilerPluginProviderForPlatformCompilation( internal fun Project.compilerPluginProviderForPlatformCompilation(
variant: KotlinGradleVariant, variant: KpmGradleVariant,
compilationData: KotlinCompilationData<*> compilationData: KotlinCompilationData<*>
) = compilerPluginDataProvider(compilationData, variant::platformCompilationPluginData) ) = compilerPluginDataProvider(compilationData, variant::platformCompilationPluginData)
@@ -44,13 +44,13 @@ abstract class KotlinPm20GradlePlugin @Inject constructor(
private fun createDefaultModules(project: Project) { private fun createDefaultModules(project: Project) {
project.pm20Extension.apply { project.pm20Extension.apply {
modules.create(KotlinGradleModule.MAIN_MODULE_NAME) modules.create(KpmGradleModule.MAIN_MODULE_NAME)
modules.create(KotlinGradleModule.TEST_MODULE_NAME) modules.create(KpmGradleModule.TEST_MODULE_NAME)
main { makePublic() } main { makePublic() }
} }
} }
private fun setupPublicationForModule(module: KotlinGradleModule) { private fun setupPublicationForModule(module: KpmGradleModule) {
val project = module.project val project = module.project
val metadataElements = project.configurations.getByName(metadataElementsConfigurationName(module)) val metadataElements = project.configurations.getByName(metadataElementsConfigurationName(module))
@@ -87,7 +87,7 @@ abstract class KotlinPm20GradlePlugin @Inject constructor(
} }
} }
fun rootPublicationComponentName(module: KotlinGradleModule) = fun rootPublicationComponentName(module: KpmGradleModule) =
module.disambiguateName("root") module.disambiguateName("root")
open class KotlinPm20ProjectExtension(project: Project) : KotlinTopLevelExtension(project) { open class KotlinPm20ProjectExtension(project: Project) : KotlinTopLevelExtension(project) {
@@ -96,53 +96,53 @@ open class KotlinPm20ProjectExtension(project: Project) : KotlinTopLevelExtensio
internal val ideaKotlinProjectModelBuilder by lazy { IdeaKotlinProjectModelBuilder.default(this) } internal val ideaKotlinProjectModelBuilder by lazy { IdeaKotlinProjectModelBuilder.default(this) }
val modules: NamedDomainObjectContainer<KotlinGradleModule> val modules: NamedDomainObjectContainer<KpmGradleModule>
get() = project.kpmModules get() = project.kpmModules
@Suppress("unused") // DSL function @Suppress("unused") // DSL function
fun mainAndTest(configure: KotlinGradleModule.() -> Unit) { fun mainAndTest(configure: KpmGradleModule.() -> Unit) {
main(configure) main(configure)
test(configure) test(configure)
} }
val main: KotlinGradleModule val main: KpmGradleModule
get() = modules.getByName(KotlinGradleModule.MAIN_MODULE_NAME) get() = modules.getByName(KpmGradleModule.MAIN_MODULE_NAME)
val test: KotlinGradleModule val test: KpmGradleModule
get() = modules.getByName(KotlinGradleModule.TEST_MODULE_NAME) get() = modules.getByName(KpmGradleModule.TEST_MODULE_NAME)
fun main(configure: KotlinGradleModule.() -> Unit = { }) = main.apply(configure) fun main(configure: KpmGradleModule.() -> Unit = { }) = main.apply(configure)
fun test(configure: KotlinGradleModule.() -> Unit = { }) = test.apply(configure) fun test(configure: KpmGradleModule.() -> Unit = { }) = test.apply(configure)
@PublishedApi @PublishedApi
@JvmName("isAllowCommonizer") @JvmName("isAllowCommonizer")
internal fun isAllowCommonizerForIde(@Suppress("UNUSED_PARAMETER") project: Project): Boolean = false internal fun isAllowCommonizerForIde(@Suppress("UNUSED_PARAMETER") project: Project): Boolean = false
} }
val KotlinGradleModule.jvm: KotlinJvmVariant val KpmGradleModule.jvm: KpmJvmVariant
get() = fragments.maybeCreate("jvm", KotlinJvmVariant::class.java) get() = fragments.maybeCreate("jvm", KpmJvmVariant::class.java)
fun KotlinGradleModule.jvm(configure: KotlinJvmVariant.() -> Unit): KotlinJvmVariant = jvm.apply(configure) fun KpmGradleModule.jvm(configure: KpmJvmVariant.() -> Unit): KpmJvmVariant = jvm.apply(configure)
fun KotlinPm20ProjectExtension.jvm(configure: KotlinFragmentSlice<KotlinJvmVariant>.() -> Unit) { fun KotlinPm20ProjectExtension.jvm(configure: KotlinFragmentSlice<KpmJvmVariant>.() -> Unit) {
val getOrCreateVariant: KotlinGradleModule.() -> KotlinJvmVariant = { jvm } val getOrCreateVariant: KpmGradleModule.() -> KpmJvmVariant = { jvm }
mainAndTest { getOrCreateVariant(this) } mainAndTest { getOrCreateVariant(this) }
val slice = KotlinFragmentSlice(this, getOrCreateVariant) val slice = KotlinFragmentSlice(this, getOrCreateVariant)
configure(slice) configure(slice)
} }
open class KotlinFragmentSlice<T : KotlinGradleFragment>( open class KotlinFragmentSlice<T : KpmGradleFragment>(
val pm20ProjectExtension: KotlinPm20ProjectExtension, val pm20ProjectExtension: KotlinPm20ProjectExtension,
val getOrCreateFragment: (KotlinGradleModule) -> T val getOrCreateFragment: (KpmGradleModule) -> T
) { ) {
fun inMain(configure: T.() -> Unit) { fun inMain(configure: T.() -> Unit) {
pm20ProjectExtension.modules.getByName(KotlinGradleModule.MAIN_MODULE_NAME).apply { pm20ProjectExtension.modules.getByName(KpmGradleModule.MAIN_MODULE_NAME).apply {
getOrCreateFragment(this).configure() getOrCreateFragment(this).configure()
} }
} }
fun inTest(configure: T.() -> Unit) { fun inTest(configure: T.() -> Unit) {
pm20ProjectExtension.modules.getByName(KotlinGradleModule.TEST_MODULE_NAME).apply { pm20ProjectExtension.modules.getByName(KpmGradleModule.TEST_MODULE_NAME).apply {
getOrCreateFragment(this).configure() getOrCreateFragment(this).configure()
} }
} }
@@ -161,11 +161,11 @@ open class KotlinFragmentSlice<T : KotlinGradleFragment>(
pm20ProjectExtension.modules.getByName(moduleName).apply { getOrCreateFragment(this).configure() } pm20ProjectExtension.modules.getByName(moduleName).apply { getOrCreateFragment(this).configure() }
} }
fun inModule(module: NamedDomainObjectProvider<KotlinGradleModule>, configure: T.() -> Unit) { fun inModule(module: NamedDomainObjectProvider<KpmGradleModule>, configure: T.() -> Unit) {
module.get().apply { inModule(this, configure) } module.get().apply { inModule(this, configure) }
} }
fun inModule(module: KotlinGradleModule, configure: T.() -> Unit) { fun inModule(module: KpmGradleModule, configure: T.() -> Unit) {
getOrCreateFragment(module).configure() getOrCreateFragment(module).configure()
} }
} }
@@ -8,37 +8,36 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20 package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.KotlinNameDisambiguation
typealias KotlinCommonFragmentFactory = KotlinGradleFragmentFactory<KotlinGradleFragmentInternal> typealias KotlinCommonFragmentFactory = KotlinGradleFragmentFactory<KpmGradleFragmentInternal>
fun KotlinCommonFragmentFactory(module: KotlinGradleModule): KotlinCommonFragmentFactory = fun KotlinCommonFragmentFactory(module: KpmGradleModule): KotlinCommonFragmentFactory =
KotlinCommonFragmentFactory(KotlinCommonFragmentInstantiator(module)) KotlinCommonFragmentFactory(KotlinCommonFragmentInstantiator(module))
fun KotlinCommonFragmentFactory( fun KotlinCommonFragmentFactory(
commonFragmentInstantiator: KotlinCommonFragmentInstantiator, commonFragmentInstantiator: KotlinCommonFragmentInstantiator,
commonFragmentConfigurator: KotlinCommonFragmentConfigurator = KotlinCommonFragmentConfigurator() commonFragmentConfigurator: KotlinCommonFragmentConfigurator = KotlinCommonFragmentConfigurator()
): KotlinGradleFragmentFactory<KotlinGradleFragmentInternal> = KotlinGradleFragmentFactory( ): KotlinGradleFragmentFactory<KpmGradleFragmentInternal> = KotlinGradleFragmentFactory(
fragmentInstantiator = commonFragmentInstantiator, fragmentInstantiator = commonFragmentInstantiator,
fragmentConfigurator = commonFragmentConfigurator fragmentConfigurator = commonFragmentConfigurator
) )
class KotlinCommonFragmentInstantiator( class KotlinCommonFragmentInstantiator(
private val module: KotlinGradleModule, private val module: KpmGradleModule,
private val dependencyConfigurationsFactory: KotlinFragmentDependencyConfigurationsFactory = private val dependencyConfigurationsFactory: KotlinFragmentDependencyConfigurationsFactory =
DefaultKotlinFragmentDependencyConfigurationsFactory DefaultKotlinFragmentDependencyConfigurationsFactory
) : KotlinGradleFragmentFactory.FragmentInstantiator<KotlinGradleFragmentInternal> { ) : KotlinGradleFragmentFactory.FragmentInstantiator<KpmGradleFragmentInternal> {
override fun create(name: String): KotlinGradleFragmentInternal { override fun create(name: String): KpmGradleFragmentInternal {
val names = FragmentNameDisambiguation(module, name) val names = FragmentNameDisambiguation(module, name)
return KotlinGradleFragmentInternal(module, name, dependencyConfigurationsFactory.create(module, names)) return KpmGradleFragmentInternal(module, name, dependencyConfigurationsFactory.create(module, names))
} }
} }
class KotlinCommonFragmentConfigurator( class KotlinCommonFragmentConfigurator(
private val sourceDirectoriesSetup: KotlinSourceDirectoriesConfigurator<KotlinGradleFragmentInternal> = private val sourceDirectoriesSetup: KotlinSourceDirectoriesConfigurator<KpmGradleFragmentInternal> =
DefaultKotlinSourceDirectoriesConfigurator DefaultKotlinSourceDirectoriesConfigurator
) : KotlinGradleFragmentFactory.FragmentConfigurator<KotlinGradleFragmentInternal> { ) : KotlinGradleFragmentFactory.FragmentConfigurator<KpmGradleFragmentInternal> {
override fun configure(fragment: KotlinGradleFragmentInternal) { override fun configure(fragment: KpmGradleFragmentInternal) {
sourceDirectoriesSetup.configure(fragment) sourceDirectoriesSetup.configure(fragment)
} }
} }
@@ -7,20 +7,20 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
interface KotlinCompileTaskConfigurator<in T : KotlinGradleVariant> { interface KotlinCompileTaskConfigurator<in T : KpmGradleVariant> {
fun registerCompileTasks(variant: T): TaskProvider<*> fun registerCompileTasks(variant: T): TaskProvider<*>
} }
object KotlinJvmCompileTaskConfigurator : KotlinCompileTaskConfigurator<KotlinJvmVariant> { object KotlinJvmCompileTaskConfigurator : KotlinCompileTaskConfigurator<KpmJvmVariant> {
override fun registerCompileTasks(variant: KotlinJvmVariant): TaskProvider<*> { override fun registerCompileTasks(variant: KpmJvmVariant): TaskProvider<*> {
val compilationData = variant.compilationData val compilationData = variant.compilationData
LifecycleTasksManager(variant.project).registerClassesTask(compilationData) LifecycleTasksManager(variant.project).registerClassesTask(compilationData)
return KotlinCompilationTaskConfigurator(variant.project).createKotlinJvmCompilationTask(variant, compilationData) return KotlinCompilationTaskConfigurator(variant.project).createKotlinJvmCompilationTask(variant, compilationData)
} }
} }
object KotlinNativeCompileTaskConfigurator : KotlinCompileTaskConfigurator<KotlinNativeVariantInternal> { object KotlinNativeCompileTaskConfigurator : KotlinCompileTaskConfigurator<KpmNativeVariantInternal> {
override fun registerCompileTasks(variant: KotlinNativeVariantInternal): TaskProvider<*> { override fun registerCompileTasks(variant: KpmNativeVariantInternal): TaskProvider<*> {
val compilationData = variant.compilationData val compilationData = variant.compilationData
LifecycleTasksManager(variant.project).registerClassesTask(compilationData) LifecycleTasksManager(variant.project).registerClassesTask(compilationData)
return KotlinCompilationTaskConfigurator(variant.project).createKotlinNativeCompilationTask(variant, compilationData) return KotlinCompilationTaskConfigurator(variant.project).createKotlinNativeCompilationTask(variant, compilationData)
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.disambiguateName
import org.jetbrains.kotlin.gradle.utils.filesProvider import org.jetbrains.kotlin.gradle.utils.filesProvider
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.project.model.VariantResolution import org.jetbrains.kotlin.project.model.VariantResolution
import org.jetbrains.kotlin.project.model.withRefinesClosure
interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : KotlinVariantCompilationData<T> { interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : KotlinVariantCompilationData<T> {
override val compileKotlinTaskName: String override val compileKotlinTaskName: String
@@ -27,7 +26,7 @@ interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : Kotlin
get() = owner.disambiguateName("classes") get() = owner.disambiguateName("classes")
override val kotlinSourceDirectoriesByFragmentName: Map<String, SourceDirectorySet> override val kotlinSourceDirectoriesByFragmentName: Map<String, SourceDirectorySet>
get() = owner.withRefinesClosure.filterIsInstance<KotlinGradleVariant>().associate { it.disambiguateName("") to it.kotlinSourceRoots } get() = owner.withRefinesClosure.filterIsInstance<KpmGradleVariant>().associate { it.disambiguateName("") to it.kotlinSourceRoots }
override val friendPaths: Iterable<FileCollection> override val friendPaths: Iterable<FileCollection>
get() { get() {
@@ -55,21 +54,21 @@ interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : Kotlin
override val moduleName: String override val moduleName: String
get() = // TODO accurate module names that don't rely on all variants having a main counterpart get() = // TODO accurate module names that don't rely on all variants having a main counterpart
owner.containingModule.project.kpmModules owner.containingModule.project.kpmModules
.getByName(KotlinGradleModule.MAIN_MODULE_NAME).variants.findByName(owner.name)?.ownModuleName() ?: ownModuleName .getByName(KpmGradleModule.MAIN_MODULE_NAME).variants.findByName(owner.name)?.ownModuleName() ?: ownModuleName
override val ownModuleName: String override val ownModuleName: String
get() = owner.ownModuleName() get() = owner.ownModuleName()
private fun resolveFriendVariants(): Iterable<KotlinGradleVariant> { private fun resolveFriendVariants(): Iterable<KpmGradleVariant> {
val moduleResolver = GradleModuleDependencyResolver.getForCurrentBuild(project) val moduleResolver = KpmGradleModuleDependencyResolver.getForCurrentBuild(project)
val variantResolver = GradleModuleVariantResolver.getForCurrentBuild(project) val variantResolver = GradleModuleVariantResolver.getForCurrentBuild(project)
val dependencyGraphResolver = GradleKotlinDependencyGraphResolver(moduleResolver) val dependencyGraphResolver = KpmGradleDependencyGraphResolver(moduleResolver)
val friendModules = val friendModules =
((dependencyGraphResolver.resolveDependencyGraph(owner.containingModule) as? GradleDependencyGraph) ((dependencyGraphResolver.resolveDependencyGraph(owner.containingModule) as? KpmGradleDependencyGraph)
?: error("Failed to resolve dependencies of ${owner.containingModule}")) ?: error("Failed to resolve dependencies of ${owner.containingModule}"))
.allDependencyModules .allDependencyModules
.filterIsInstance<KotlinGradleModule>() .filterIsInstance<KpmGradleModule>()
.filter { dependencyModule -> .filter { dependencyModule ->
// the module comes from the same Gradle project // todo: extend to other friends once supported // the module comes from the same Gradle project // todo: extend to other friends once supported
dependencyModule.project == owner.containingModule.project dependencyModule.project == owner.containingModule.project
@@ -79,11 +78,11 @@ interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : Kotlin
.map { friendModule -> variantResolver.getChosenVariant(owner, friendModule) } .map { friendModule -> variantResolver.getChosenVariant(owner, friendModule) }
// also, important to check that the owner variant really requests this module: // also, important to check that the owner variant really requests this module:
.filterIsInstance<VariantResolution.VariantMatch>() .filterIsInstance<VariantResolution.VariantMatch>()
.mapNotNull { variantMatch -> variantMatch.chosenVariant as? KotlinGradleVariant } .mapNotNull { variantMatch -> variantMatch.chosenVariant as? KpmGradleVariant }
} }
} }
fun KotlinCompilationData<*>.isMainCompilationData(): Boolean = when (this) { fun KotlinCompilationData<*>.isMainCompilationData(): Boolean = when (this) {
is KotlinCompilation<*> -> isMain() is KotlinCompilation<*> -> isMain()
else -> compilationPurpose == KotlinGradleModule.MAIN_MODULE_NAME else -> compilationPurpose == KpmGradleModule.MAIN_MODULE_NAME
} }
@@ -20,14 +20,14 @@ open class KotlinCompilationTaskConfigurator(
) { ) {
open val fragmentSourcesProvider: FragmentSourcesProvider = FragmentSourcesProvider() open val fragmentSourcesProvider: FragmentSourcesProvider = FragmentSourcesProvider()
open fun getSourcesForFragmentCompilation(fragment: KotlinGradleFragment): MultipleSourceRootsProvider = open fun getSourcesForFragmentCompilation(fragment: KpmGradleFragment): MultipleSourceRootsProvider =
fragmentSourcesProvider.getSourcesFromRefinesClosure(fragment) fragmentSourcesProvider.getSourcesFromRefinesClosure(fragment)
open fun getCommonSourcesForFragmentCompilation(fragment: KotlinGradleFragment): MultipleSourceRootsProvider = open fun getCommonSourcesForFragmentCompilation(fragment: KpmGradleFragment): MultipleSourceRootsProvider =
fragmentSourcesProvider.getCommonSourcesFromRefinesClosure(fragment) fragmentSourcesProvider.getCommonSourcesFromRefinesClosure(fragment)
fun createKotlinJvmCompilationTask( fun createKotlinJvmCompilationTask(
variant: KotlinGradleVariant, variant: KpmGradleVariant,
compilationData: KotlinCompilationData<*> compilationData: KotlinCompilationData<*>
): TaskProvider<out KotlinCompile> { ): TaskProvider<out KotlinCompile> {
Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilationData).run() Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilationData).run()
@@ -46,7 +46,7 @@ open class KotlinCompilationTaskConfigurator(
} }
protected fun createKotlinNativeCompilationTask( protected fun createKotlinNativeCompilationTask(
fragment: KotlinGradleFragment, fragment: KpmGradleFragment,
compilationData: KotlinNativeCompilationData<*>, compilationData: KotlinNativeCompilationData<*>,
configure: KotlinNativeCompile.() -> Unit configure: KotlinNativeCompile.() -> Unit
): TaskProvider<KotlinNativeCompile> { ): TaskProvider<KotlinNativeCompile> {
@@ -65,9 +65,9 @@ open class KotlinCompilationTaskConfigurator(
} }
fun createKotlinNativeCompilationTask( fun createKotlinNativeCompilationTask(
variant: KotlinGradleVariant, variant: KpmGradleVariant,
compilationData: KotlinNativeCompilationData<*> compilationData: KotlinNativeCompilationData<*>
): TaskProvider<KotlinNativeCompile> = createKotlinNativeCompilationTask(variant, compilationData) { ): TaskProvider<KotlinNativeCompile> = createKotlinNativeCompilationTask(variant, compilationData) {
kotlinPluginData = project.compilerPluginProviderForPlatformCompilation(variant, compilationData) kotlinPluginData = project.compilerPluginProviderForPlatformCompilation(variant, compilationData)
} }
} }
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.gradle.utils.dashSeparatedLowercaseName
/** /**
* Registers a [Jar] task with the variant's compilation outputs and attaches this artifact to the given configuration. * Registers a [Jar] task with the variant's compilation outputs and attaches this artifact to the given configuration.
*/ */
val KotlinFragmentCompilationOutputsJarArtifact = FragmentArtifacts<KotlinGradleVariant> { val KotlinFragmentCompilationOutputsJarArtifact = FragmentArtifacts<KpmGradleVariant> {
val jar = project.locateOrRegisterTask<Jar>(fragment.outputsJarTaskName) { val jar = project.locateOrRegisterTask<Jar>(fragment.outputsJarTaskName) {
it.from(fragment.compilationOutputs.allOutputs) it.from(fragment.compilationOutputs.allOutputs)
it.archiveAppendix.set(dashSeparatedLowercaseName(fragment.name, fragment.containingModule.moduleClassifier)) it.archiveAppendix.set(dashSeparatedLowercaseName(fragment.name, fragment.containingModule.moduleClassifier))
@@ -23,5 +23,5 @@ val KotlinFragmentCompilationOutputsJarArtifact = FragmentArtifacts<KotlinGradle
fragment.project.artifacts.add(Dependency.ARCHIVES_CONFIGURATION, jar) fragment.project.artifacts.add(Dependency.ARCHIVES_CONFIGURATION, jar)
} }
internal val KotlinGradleVariant.outputsJarTaskName: String internal val KpmGradleVariant.outputsJarTaskName: String
get() = FragmentNameDisambiguationOmittingMain(containingModule, name).disambiguateName("jar") get() = FragmentNameDisambiguationOmittingMain(containingModule, name).disambiguateName("jar")
@@ -8,12 +8,12 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.KotlinNameDisambiguation import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.KotlinNameDisambiguation
interface KotlinFragmentDependencyConfigurationsFactory { interface KotlinFragmentDependencyConfigurationsFactory {
fun create(module: KotlinGradleModule, names: KotlinNameDisambiguation): KotlinFragmentDependencyConfigurations fun create(module: KpmGradleModule, names: KotlinNameDisambiguation): KotlinFragmentDependencyConfigurations
} }
object DefaultKotlinFragmentDependencyConfigurationsFactory : KotlinFragmentDependencyConfigurationsFactory { object DefaultKotlinFragmentDependencyConfigurationsFactory : KotlinFragmentDependencyConfigurationsFactory {
override fun create(module: KotlinGradleModule, names: KotlinNameDisambiguation): KotlinFragmentDependencyConfigurations { override fun create(module: KpmGradleModule, names: KotlinNameDisambiguation): KotlinFragmentDependencyConfigurations {
val configurations = module.project.configurations val configurations = module.project.configurations
val apiConfiguration = configurations.maybeCreate(names.disambiguateName("api")) val apiConfiguration = configurations.maybeCreate(names.disambiguateName("api"))
val implementationConfiguration = configurations.maybeCreate(names.disambiguateName("implementation")) val implementationConfiguration = configurations.maybeCreate(names.disambiguateName("implementation"))
@@ -11,14 +11,13 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.disambiguateName
import org.jetbrains.kotlin.gradle.targets.metadata.filesWithUnpackedArchives import org.jetbrains.kotlin.gradle.targets.metadata.filesWithUnpackedArchives
import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
import org.jetbrains.kotlin.project.model.withRefinesClosure
/** /**
* Will register a 'hostSpecificMetadataJar' [Jar] task containing compilation outputs of host specific metadata. * Will register a 'hostSpecificMetadataJar' [Jar] task containing compilation outputs of host specific metadata.
* Will add this jar artifact to the given configuration * Will add this jar artifact to the given configuration
*/ */
val KotlinFragmentHostSpecificMetadataArtifact = FragmentArtifacts<KotlinNativeVariantInternal> artifacts@{ val KotlinFragmentHostSpecificMetadataArtifact = FragmentArtifacts<KpmNativeVariantInternal> artifacts@{
val hostSpecificMetadataElements = fragment.hostSpecificMetadataElementsConfiguration ?: return@artifacts val hostSpecificMetadataElements = fragment.hostSpecificMetadataElementsConfiguration ?: return@artifacts
val hostSpecificMetadataJar = project.registerTask<Jar>(fragment.disambiguateName("hostSpecificMetadataJar")) { jar -> val hostSpecificMetadataJar = project.registerTask<Jar>(fragment.disambiguateName("hostSpecificMetadataJar")) { jar ->
@@ -9,13 +9,13 @@ import org.gradle.api.artifacts.Configuration
import org.gradle.api.capabilities.Capability import org.gradle.api.capabilities.Capability
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability
val KotlinFragmentModuleCapability = FragmentCapabilities<KotlinGradleFragment> { val KotlinFragmentModuleCapability = FragmentCapabilities<KpmGradleFragment> {
capability(fragment.containingModule.moduleCapability ?: return@FragmentCapabilities) capability(fragment.containingModule.moduleCapability ?: return@FragmentCapabilities)
} }
internal fun setModuleCapability(configuration: Configuration, module: KotlinGradleModule) { internal fun setModuleCapability(configuration: Configuration, module: KpmGradleModule) {
configuration.outgoing.capability(module.moduleCapability ?: return) configuration.outgoing.capability(module.moduleCapability ?: return)
} }
internal val KotlinGradleModule.moduleCapability: Capability? internal val KpmGradleModule.moduleCapability: Capability?
get() = if (moduleClassifier != null) ComputedCapability.fromModule(this) else null get() = if (moduleClassifier != null) ComputedCapability.fromModule(this) else null
@@ -14,15 +14,15 @@ import org.gradle.api.artifacts.ConfigurationVariant
/* Internal abbreviation */ /* Internal abbreviation */
internal typealias FragmentArtifacts<T> = KotlinGradleFragmentConfigurationArtifacts<T> internal typealias FragmentArtifacts<T> = KotlinGradleFragmentConfigurationArtifacts<T>
interface KotlinGradleFragmentConfigurationArtifacts<in T : KotlinGradleFragment> { interface KotlinGradleFragmentConfigurationArtifacts<in T : KpmGradleFragment> {
fun addArtifacts(outgoing: ConfigurationPublications, fragment: T) fun addArtifacts(outgoing: ConfigurationPublications, fragment: T)
object None : KotlinGradleFragmentConfigurationArtifacts<KotlinGradleFragment> { object None : KotlinGradleFragmentConfigurationArtifacts<KpmGradleFragment> {
override fun addArtifacts(outgoing: ConfigurationPublications, fragment: KotlinGradleFragment) = Unit override fun addArtifacts(outgoing: ConfigurationPublications, fragment: KpmGradleFragment) = Unit
} }
} }
class KotlinGradleFragmentConfigurationArtifactsContext<T : KotlinGradleFragment> internal constructor( class KotlinGradleFragmentConfigurationArtifactsContext<T : KpmGradleFragment> internal constructor(
internal val outgoing: ConfigurationPublications, internal val outgoing: ConfigurationPublications,
val fragment: T val fragment: T
) { ) {
@@ -40,7 +40,7 @@ class KotlinGradleFragmentConfigurationArtifactsContext<T : KotlinGradleFragment
} }
@Suppress("FunctionName") @Suppress("FunctionName")
fun <T : KotlinGradleFragment> FragmentArtifacts( fun <T : KpmGradleFragment> FragmentArtifacts(
addArtifacts: KotlinGradleFragmentConfigurationArtifactsContext<T>.() -> Unit addArtifacts: KotlinGradleFragmentConfigurationArtifactsContext<T>.() -> Unit
): KotlinGradleFragmentConfigurationArtifacts<T> { ): KotlinGradleFragmentConfigurationArtifacts<T> {
return object : KotlinGradleFragmentConfigurationArtifacts<T> { return object : KotlinGradleFragmentConfigurationArtifacts<T> {
@@ -51,7 +51,7 @@ fun <T : KotlinGradleFragment> FragmentArtifacts(
} }
} }
operator fun <T : KotlinGradleFragment> FragmentArtifacts<T>.plus(other: FragmentArtifacts<T>): FragmentArtifacts<T> { operator fun <T : KpmGradleFragment> FragmentArtifacts<T>.plus(other: FragmentArtifacts<T>): FragmentArtifacts<T> {
if (this === KotlinGradleFragmentConfigurationArtifacts.None) return other if (this === KotlinGradleFragmentConfigurationArtifacts.None) return other
if (other === KotlinGradleFragmentConfigurationArtifacts.None) return this if (other === KotlinGradleFragmentConfigurationArtifacts.None) return this
@@ -70,7 +70,7 @@ operator fun <T : KotlinGradleFragment> FragmentArtifacts<T>.plus(other: Fragmen
return CompositeFragmentArtifacts(listOf(this, other)) return CompositeFragmentArtifacts(listOf(this, other))
} }
internal class CompositeFragmentArtifacts<in T : KotlinGradleFragment>(val children: List<FragmentArtifacts<T>>) : internal class CompositeFragmentArtifacts<in T : KpmGradleFragment>(val children: List<FragmentArtifacts<T>>) :
FragmentArtifacts<T> { FragmentArtifacts<T> {
override fun addArtifacts(outgoing: ConfigurationPublications, fragment: T) { override fun addArtifacts(outgoing: ConfigurationPublications, fragment: T) {
@@ -13,16 +13,16 @@ import org.gradle.api.attributes.AttributeContainer
/* Internal abbreviation */ /* Internal abbreviation */
internal typealias FragmentAttributes<T> = KotlinGradleFragmentConfigurationAttributes<T> internal typealias FragmentAttributes<T> = KotlinGradleFragmentConfigurationAttributes<T>
interface KotlinGradleFragmentConfigurationAttributes<in T : KotlinGradleFragment> { interface KotlinGradleFragmentConfigurationAttributes<in T : KpmGradleFragment> {
fun setAttributes(attributes: AttributeContainer, fragment: T) fun setAttributes(attributes: AttributeContainer, fragment: T)
object None : FragmentAttributes<KotlinGradleFragment> { object None : FragmentAttributes<KpmGradleFragment> {
override fun setAttributes(attributes: AttributeContainer, fragment: KotlinGradleFragment) = Unit override fun setAttributes(attributes: AttributeContainer, fragment: KpmGradleFragment) = Unit
} }
} }
class KotlinGradleFragmentConfigurationAttributesContext<T : KotlinGradleFragment> internal constructor( class KotlinGradleFragmentConfigurationAttributesContext<T : KpmGradleFragment> internal constructor(
internal val attributes: AttributeContainer, internal val attributes: AttributeContainer,
val fragment: T, val fragment: T,
) : AttributeContainer by attributes { ) : AttributeContainer by attributes {
@@ -38,7 +38,7 @@ class KotlinGradleFragmentConfigurationAttributesContext<T : KotlinGradleFragmen
} }
@Suppress("FunctionName") @Suppress("FunctionName")
fun <T : KotlinGradleFragment> FragmentAttributes( fun <T : KpmGradleFragment> FragmentAttributes(
setAttributes: KotlinGradleFragmentConfigurationAttributesContext<T>.() -> Unit setAttributes: KotlinGradleFragmentConfigurationAttributesContext<T>.() -> Unit
): KotlinGradleFragmentConfigurationAttributes<T> { ): KotlinGradleFragmentConfigurationAttributes<T> {
return object : KotlinGradleFragmentConfigurationAttributes<T> { return object : KotlinGradleFragmentConfigurationAttributes<T> {
@@ -49,13 +49,13 @@ fun <T : KotlinGradleFragment> FragmentAttributes(
} }
} }
fun <T : KotlinGradleFragment> AttributeContainer.apply( fun <T : KpmGradleFragment> AttributeContainer.apply(
attributes: KotlinGradleFragmentConfigurationAttributes<T>, fragment: T attributes: KotlinGradleFragmentConfigurationAttributes<T>, fragment: T
) { ) {
attributes.setAttributes(this, fragment) attributes.setAttributes(this, fragment)
} }
operator fun <T : KotlinGradleFragment> FragmentAttributes<T>.plus(other: FragmentAttributes<T>): FragmentAttributes<T> { operator fun <T : KpmGradleFragment> FragmentAttributes<T>.plus(other: FragmentAttributes<T>): FragmentAttributes<T> {
if (this === KotlinGradleFragmentConfigurationAttributes.None) return other if (this === KotlinGradleFragmentConfigurationAttributes.None) return other
if (other === KotlinGradleFragmentConfigurationAttributes.None) return this if (other === KotlinGradleFragmentConfigurationAttributes.None) return this
@@ -74,7 +74,7 @@ operator fun <T : KotlinGradleFragment> FragmentAttributes<T>.plus(other: Fragme
return CompositeFragmentAttributes(listOf(this, other)) return CompositeFragmentAttributes(listOf(this, other))
} }
internal class CompositeFragmentAttributes<in T : KotlinGradleFragment>(val children: List<FragmentAttributes<T>>) : internal class CompositeFragmentAttributes<in T : KpmGradleFragment>(val children: List<FragmentAttributes<T>>) :
FragmentAttributes<T> { FragmentAttributes<T> {
override fun setAttributes(attributes: AttributeContainer, fragment: T) { override fun setAttributes(attributes: AttributeContainer, fragment: T) {
children.forEach { child -> child.setAttributes(attributes, fragment) } children.forEach { child -> child.setAttributes(attributes, fragment) }
@@ -16,19 +16,19 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentConfigura
/* Internal abbreviation */ /* Internal abbreviation */
internal typealias FragmentCapabilities<T> = KotlinGradleFragmentConfigurationCapabilities<T> internal typealias FragmentCapabilities<T> = KotlinGradleFragmentConfigurationCapabilities<T>
interface KotlinGradleFragmentConfigurationCapabilities<in T : KotlinGradleFragment> { interface KotlinGradleFragmentConfigurationCapabilities<in T : KpmGradleFragment> {
interface CapabilitiesContainer { interface CapabilitiesContainer {
fun capability(notation: Any) fun capability(notation: Any)
} }
fun setCapabilities(container: CapabilitiesContainer, fragment: T) fun setCapabilities(container: CapabilitiesContainer, fragment: T)
object None : KotlinGradleFragmentConfigurationCapabilities<KotlinGradleFragment> { object None : KotlinGradleFragmentConfigurationCapabilities<KpmGradleFragment> {
override fun setCapabilities(container: CapabilitiesContainer, fragment: KotlinGradleFragment) = Unit override fun setCapabilities(container: CapabilitiesContainer, fragment: KpmGradleFragment) = Unit
} }
} }
fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationCapabilities<T>.setCapabilities( fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationCapabilities<T>.setCapabilities(
publications: ConfigurationPublications, fragment: T publications: ConfigurationPublications, fragment: T
) = setCapabilities(CapabilitiesContainer(publications), fragment) ) = setCapabilities(CapabilitiesContainer(publications), fragment)
@@ -44,13 +44,13 @@ private class CapabilitiesContainerImpl(
override fun capability(notation: Any) = publications.capability(notation) override fun capability(notation: Any) = publications.capability(notation)
} }
class KotlinGradleFragmentConfigurationCapabilitiesContext<T : KotlinGradleFragment> internal constructor( class KotlinGradleFragmentConfigurationCapabilitiesContext<T : KpmGradleFragment> internal constructor(
internal val container: CapabilitiesContainer, val fragment: T internal val container: CapabilitiesContainer, val fragment: T
) : CapabilitiesContainer by container { ) : CapabilitiesContainer by container {
val project: Project get() = fragment.project val project: Project get() = fragment.project
} }
fun <T : KotlinGradleFragment> FragmentCapabilities( fun <T : KpmGradleFragment> FragmentCapabilities(
setCapabilities: KotlinGradleFragmentConfigurationCapabilitiesContext<T>.() -> Unit setCapabilities: KotlinGradleFragmentConfigurationCapabilitiesContext<T>.() -> Unit
): KotlinGradleFragmentConfigurationCapabilities<T> = object : KotlinGradleFragmentConfigurationCapabilities<T> { ): KotlinGradleFragmentConfigurationCapabilities<T> = object : KotlinGradleFragmentConfigurationCapabilities<T> {
override fun setCapabilities(container: CapabilitiesContainer, fragment: T) { override fun setCapabilities(container: CapabilitiesContainer, fragment: T) {
@@ -59,7 +59,7 @@ fun <T : KotlinGradleFragment> FragmentCapabilities(
} }
} }
operator fun <T : KotlinGradleFragment> FragmentCapabilities<T>.plus(other: FragmentCapabilities<T>): FragmentCapabilities<T> { operator fun <T : KpmGradleFragment> FragmentCapabilities<T>.plus(other: FragmentCapabilities<T>): FragmentCapabilities<T> {
if (this === KotlinGradleFragmentConfigurationCapabilities.None) return other if (this === KotlinGradleFragmentConfigurationCapabilities.None) return other
if (other === KotlinGradleFragmentConfigurationCapabilities.None) return this if (other === KotlinGradleFragmentConfigurationCapabilities.None) return this
@@ -78,7 +78,7 @@ operator fun <T : KotlinGradleFragment> FragmentCapabilities<T>.plus(other: Frag
return CompositeFragmentCapabilities(listOf(this, other)) return CompositeFragmentCapabilities(listOf(this, other))
} }
internal class CompositeFragmentCapabilities<in T : KotlinGradleFragment>(val children: List<FragmentCapabilities<T>>) : internal class CompositeFragmentCapabilities<in T : KpmGradleFragment>(val children: List<FragmentCapabilities<T>>) :
FragmentCapabilities<T> { FragmentCapabilities<T> {
override fun setCapabilities(container: CapabilitiesContainer, fragment: T) { override fun setCapabilities(container: CapabilitiesContainer, fragment: T) {
children.forEach { child -> child.setCapabilities(container, fragment) } children.forEach { child -> child.setCapabilities(container, fragment) }
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.KotlinNameDisambiguation
/* Internal abbreviation */ /* Internal abbreviation */
internal typealias ConfigurationDefinition<T> = KotlinGradleFragmentConfigurationDefinition<T> internal typealias ConfigurationDefinition<T> = KotlinGradleFragmentConfigurationDefinition<T>
data class KotlinGradleFragmentConfigurationDefinition<in T : KotlinGradleFragment>( data class KotlinGradleFragmentConfigurationDefinition<in T : KpmGradleFragment>(
val provider: KotlinGradleFragmentConfigurationProvider, val provider: KotlinGradleFragmentConfigurationProvider,
val attributes: KotlinGradleFragmentConfigurationAttributes<T> = KotlinGradleFragmentConfigurationAttributes.None, val attributes: KotlinGradleFragmentConfigurationAttributes<T> = KotlinGradleFragmentConfigurationAttributes.None,
val artifacts: KotlinGradleFragmentConfigurationArtifacts<T> = KotlinGradleFragmentConfigurationArtifacts.None, val artifacts: KotlinGradleFragmentConfigurationArtifacts<T> = KotlinGradleFragmentConfigurationArtifacts.None,
@@ -26,29 +26,29 @@ internal typealias ConfigurationContext = KotlinGradleFragmentConfigurationConte
interface KotlinGradleFragmentConfigurationContext : KotlinNameDisambiguation { interface KotlinGradleFragmentConfigurationContext : KotlinNameDisambiguation {
val project: Project get() = module.project val project: Project get() = module.project
val module: KotlinGradleModule val module: KpmGradleModule
val dependencies: KotlinFragmentDependencyConfigurations val dependencies: KotlinFragmentDependencyConfigurations
} }
internal class KotlinGradleFragmentConfigurationContextImpl( internal class KotlinGradleFragmentConfigurationContextImpl(
override val module: KotlinGradleModule, override val module: KpmGradleModule,
override val dependencies: KotlinFragmentDependencyConfigurations, override val dependencies: KotlinFragmentDependencyConfigurations,
names: KotlinNameDisambiguation names: KotlinNameDisambiguation
) : KotlinGradleFragmentConfigurationContext, KotlinNameDisambiguation by names ) : KotlinGradleFragmentConfigurationContext, KotlinNameDisambiguation by names
fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.withConfigurationProvider( fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.withConfigurationProvider(
provider: KotlinGradleFragmentConfigurationContext.() -> Configuration provider: KotlinGradleFragmentConfigurationContext.() -> Configuration
) = copy(provider = ConfigurationProvider(provider)) ) = copy(provider = ConfigurationProvider(provider))
operator fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentAttributes<T>): operator fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentAttributes<T>):
KotlinGradleFragmentConfigurationDefinition<T> = copy(attributes = attributes + other) KotlinGradleFragmentConfigurationDefinition<T> = copy(attributes = attributes + other)
operator fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentArtifacts<T>): operator fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentArtifacts<T>):
KotlinGradleFragmentConfigurationDefinition<T> = copy(artifacts = artifacts + other) KotlinGradleFragmentConfigurationDefinition<T> = copy(artifacts = artifacts + other)
operator fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentConfigurationRelation): operator fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentConfigurationRelation):
KotlinGradleFragmentConfigurationDefinition<T> = copy(relations = relations + other) KotlinGradleFragmentConfigurationDefinition<T> = copy(relations = relations + other)
@AdvancedKotlinGradlePluginApi @AdvancedKotlinGradlePluginApi
operator fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentCapabilities<T>): operator fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentCapabilities<T>):
KotlinGradleFragmentConfigurationDefinition<T> = copy(capabilities = capabilities + other) KotlinGradleFragmentConfigurationDefinition<T> = copy(capabilities = capabilities + other)
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentFactory.F
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentFactory.FragmentInstantiator import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentFactory.FragmentInstantiator
/** /**
* Factory used by [KotlinGradleModule] to polymorphic-ally create fragments/variants. * Factory used by [KpmGradleModule] to polymorphic-ally create fragments/variants.
* Fragments are created in two stages with this factory: * Fragments are created in two stages with this factory:
* *
* [FragmentInstantiator]: * [FragmentInstantiator]:
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentFactory.F
* - Setting up additional Gradle tasks * - Setting up additional Gradle tasks
* - Setting up publication * - Setting up publication
*/ */
class KotlinGradleFragmentFactory<T : KotlinGradleFragment>( class KotlinGradleFragmentFactory<T : KpmGradleFragment>(
private val fragmentInstantiator: FragmentInstantiator<T>, private val fragmentInstantiator: FragmentInstantiator<T>,
private val fragmentConfigurator: FragmentConfigurator<T> private val fragmentConfigurator: FragmentConfigurator<T>
) : NamedDomainObjectFactory<T> { ) : NamedDomainObjectFactory<T> {
@@ -34,14 +34,14 @@ class KotlinGradleFragmentFactory<T : KotlinGradleFragment>(
/** /**
* @see KotlinGradleFragmentFactory * @see KotlinGradleFragmentFactory
*/ */
interface FragmentInstantiator<out T : KotlinGradleFragment> { interface FragmentInstantiator<out T : KpmGradleFragment> {
fun create(name: String): T fun create(name: String): T
} }
/** /**
* @see KotlinGradleFragmentFactory * @see KotlinGradleFragmentFactory
*/ */
interface FragmentConfigurator<in T : KotlinGradleFragment> { interface FragmentConfigurator<in T : KpmGradleFragment> {
fun configure(fragment: T) fun configure(fragment: T)
} }
@@ -50,7 +50,7 @@ class KotlinGradleFragmentFactory<T : KotlinGradleFragment>(
} }
} }
internal fun <T : KotlinGradleFragment> Configuration.configure( internal fun <T : KpmGradleFragment> Configuration.configure(
definition: KotlinGradleFragmentConfigurationDefinition<T>, fragment: T definition: KotlinGradleFragmentConfigurationDefinition<T>, fragment: T
) { ) {
definition.attributes.setAttributes(attributes, fragment) definition.attributes.setAttributes(attributes, fragment)
@@ -20,16 +20,16 @@ import org.jetbrains.kotlin.gradle.plugin.sources.FragmentConsistencyChecker
import org.jetbrains.kotlin.gradle.plugin.sources.FragmentConsistencyChecks import org.jetbrains.kotlin.gradle.plugin.sources.FragmentConsistencyChecks
import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheckWhenEvaluated import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheckWhenEvaluated
import org.jetbrains.kotlin.project.model.KotlinModuleDependency import org.jetbrains.kotlin.project.model.KpmModuleDependency
import org.jetbrains.kotlin.tooling.core.MutableExtras import org.jetbrains.kotlin.tooling.core.MutableExtras
import org.jetbrains.kotlin.tooling.core.mutableExtrasOf import org.jetbrains.kotlin.tooling.core.mutableExtrasOf
import javax.inject.Inject import javax.inject.Inject
open class KotlinGradleFragmentInternal @Inject constructor( open class KpmGradleFragmentInternal @Inject constructor(
final override val containingModule: KotlinGradleModule, final override val containingModule: KpmGradleModule,
final override val fragmentName: String, final override val fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations dependencyConfigurations: KotlinFragmentDependencyConfigurations
) : KotlinGradleFragment, ) : KpmGradleFragment,
KotlinFragmentDependencyConfigurations by dependencyConfigurations { KotlinFragmentDependencyConfigurations by dependencyConfigurations {
final override fun getName(): String = fragmentName final override fun getName(): String = fragmentName
@@ -44,12 +44,12 @@ open class KotlinGradleFragmentInternal @Inject constructor(
// FIXME check for consistency // FIXME check for consistency
override val languageSettings: LanguageSettingsBuilder = DefaultLanguageSettingsBuilder() override val languageSettings: LanguageSettingsBuilder = DefaultLanguageSettingsBuilder()
override fun refines(other: KotlinGradleFragment) { override fun refines(other: KpmGradleFragment) {
checkCanRefine(other) checkCanRefine(other)
refines(containingModule.fragments.named(other.name)) refines(containingModule.fragments.named(other.name))
} }
override fun refines(other: NamedDomainObjectProvider<KotlinGradleFragment>) { override fun refines(other: NamedDomainObjectProvider<KpmGradleFragment>) {
_directRefinesDependencies.add(other) _directRefinesDependencies.add(other)
other.configure { checkCanRefine(it) } other.configure { checkCanRefine(it) }
@@ -66,11 +66,11 @@ open class KotlinGradleFragmentInternal @Inject constructor(
) )
project.runProjectConfigurationHealthCheckWhenEvaluated { project.runProjectConfigurationHealthCheckWhenEvaluated {
kotlinGradleFragmentConsistencyChecker.runAllChecks(this@KotlinGradleFragmentInternal, other.get()) kotlinGradleFragmentConsistencyChecker.runAllChecks(this@KpmGradleFragmentInternal, other.get())
} }
} }
private fun checkCanRefine(other: KotlinGradleFragment) { private fun checkCanRefine(other: KpmGradleFragment) {
check(containingModule == other.containingModule) { check(containingModule == other.containingModule) {
"Fragments can only refine each other within one module. Can't make $this refine $other" "Fragments can only refine each other within one module. Can't make $this refine $other"
} }
@@ -82,15 +82,15 @@ open class KotlinGradleFragmentInternal @Inject constructor(
override fun dependencies(configureClosure: Closure<Any?>) = override fun dependencies(configureClosure: Closure<Any?>) =
dependencies f@{ ConfigureUtil.configure(configureClosure, this@f) } dependencies f@{ ConfigureUtil.configure(configureClosure, this@f) }
private val _directRefinesDependencies = mutableSetOf<Provider<KotlinGradleFragment>>() private val _directRefinesDependencies = mutableSetOf<Provider<KpmGradleFragment>>()
override val directRefinesDependencies: Iterable<KotlinGradleFragment> override val declaredRefinesDependencies: Iterable<KpmGradleFragment>
get() = _directRefinesDependencies.map { it.get() }.toSet() get() = _directRefinesDependencies.map { it.get() }.toSet()
// TODO: separate the declared module dependencies and exported module dependencies? we need this to keep implementation dependencies // TODO: separate the declared module dependencies and exported module dependencies? we need this to keep implementation dependencies
// out of the consumer's metadata compilations compile classpath; however, Native variants must expose implementation as API // out of the consumer's metadata compilations compile classpath; however, Native variants must expose implementation as API
// anyway, so for now all fragments follow that behavior // anyway, so for now all fragments follow that behavior
override val declaredModuleDependencies: Iterable<KotlinModuleDependency> override val declaredModuleDependencies: Iterable<KpmModuleDependency>
get() = listOf(apiConfiguration, implementationConfiguration).flatMapTo(mutableSetOf()) { exportConfiguration -> get() = listOf(apiConfiguration, implementationConfiguration).flatMapTo(mutableSetOf()) { exportConfiguration ->
exportConfiguration.allDependencies.map { dependency -> dependency.toModuleDependency(project) } exportConfiguration.allDependencies.map { dependency -> dependency.toModuleDependency(project) }
} }
@@ -106,7 +106,7 @@ open class KotlinGradleFragmentInternal @Inject constructor(
FragmentConsistencyChecker( FragmentConsistencyChecker(
unitsName = "fragments", unitsName = "fragments",
name = { name }, name = { name },
checks = FragmentConsistencyChecks<KotlinGradleFragment>( checks = FragmentConsistencyChecks<KpmGradleFragment>(
unitName = "fragment", unitName = "fragment",
languageSettings = { languageSettings } languageSettings = { languageSettings }
).allChecks ).allChecks
@@ -15,26 +15,26 @@ import org.jetbrains.kotlin.project.model.*
import org.jetbrains.kotlin.project.model.utils.variantsContainingFragment import org.jetbrains.kotlin.project.model.utils.variantsContainingFragment
import javax.inject.Inject import javax.inject.Inject
open class KotlinGradleModuleInternal( open class KpmGradleModuleInternal(
final override val project: Project, final override val project: Project,
final override val moduleClassifier: String? final override val moduleClassifier: String?
) : KotlinGradleModule { ) : KpmGradleModule {
@Inject @Inject
constructor(project: Project, moduleName: CharSequence) : this( constructor(project: Project, moduleName: CharSequence) : this(
project, project,
moduleName.takeIf { it != KotlinGradleModule.MAIN_MODULE_NAME }?.toString() moduleName.takeIf { it != KpmGradleModule.MAIN_MODULE_NAME }?.toString()
) )
override val moduleIdentifier: KotlinModuleIdentifier = override val moduleIdentifier: KpmModuleIdentifier =
LocalModuleIdentifier(project.currentBuildId().name, project.path, moduleClassifier) KpmLocalModuleIdentifier(project.currentBuildId().name, project.path, moduleClassifier)
override val fragments: ExtensiblePolymorphicDomainObjectContainer<KotlinGradleFragment> = override val fragments: ExtensiblePolymorphicDomainObjectContainer<KpmGradleFragment> =
project.objects.polymorphicDomainObjectContainer(KotlinGradleFragment::class.java) project.objects.polymorphicDomainObjectContainer(KpmGradleFragment::class.java)
// TODO DSL & build script model: find a way to create a flexible typed view on fragments? // TODO DSL & build script model: find a way to create a flexible typed view on fragments?
override val variants: NamedDomainObjectSet<KotlinGradleVariant> by lazy { override val variants: NamedDomainObjectSet<KpmGradleVariant> by lazy {
fragments.withType(KotlinGradleVariant::class.java) fragments.withType(KpmGradleVariant::class.java)
} }
override val plugins: Set<KpmCompilerPlugin> by lazy { override val plugins: Set<KpmCompilerPlugin> by lazy {
@@ -70,14 +70,14 @@ open class KotlinGradleModuleInternal(
override fun toString(): String = "$moduleIdentifier (Gradle)" override fun toString(): String = "$moduleIdentifier (Gradle)"
} }
internal val KotlinGradleModule.resolvableMetadataConfigurationName: String internal val KpmGradleModule.resolvableMetadataConfigurationName: String
get() = lowerCamelCaseName(name, "DependenciesMetadata") get() = lowerCamelCaseName(name, "DependenciesMetadata")
internal val KotlinGradleModule.isMain internal val KpmGradleModule.isMain
get() = moduleIdentifier.moduleClassifier == null get() = moduleIdentifier.moduleClassifier == null
internal fun KotlinGradleModule.disambiguateName(simpleName: String) = internal fun KpmGradleModule.disambiguateName(simpleName: String) =
lowerCamelCaseName(moduleClassifier, simpleName) lowerCamelCaseName(moduleClassifier, simpleName)
internal fun KotlinGradleModule.variantsContainingFragment(fragment: KotlinModuleFragment): Iterable<KotlinGradleVariant> = internal fun KpmGradleModule.variantsContainingFragment(fragment: KpmFragment): Iterable<KpmGradleVariant> =
(this as KotlinModule).variantsContainingFragment(fragment).onEach { it as KotlinGradleVariant } as Iterable<KotlinGradleVariant> (this as KpmModule).variantsContainingFragment(fragment).onEach { it as KpmGradleVariant } as Iterable<KpmGradleVariant>
@@ -7,11 +7,10 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.gradle.api.NamedDomainObjectFactory import org.gradle.api.NamedDomainObjectFactory
import org.gradle.api.Project import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.pm20Extension
open class KotlinGradleModuleFactory(private val project: Project) : NamedDomainObjectFactory<KotlinGradleModule> { open class KotlinGradleModuleFactory(private val project: Project) : NamedDomainObjectFactory<KpmGradleModule> {
override fun create(name: String): KotlinGradleModule { override fun create(name: String): KpmGradleModule {
val result = project.objects.newInstance(KotlinGradleModuleInternal::class.java, project, name) val result = project.objects.newInstance(KpmGradleModuleInternal::class.java, project, name)
registerFragmentFactory(result) registerFragmentFactory(result)
registerDefaultCommonFragment(result) registerDefaultCommonFragment(result)
addDefaultDependencyOnMainModule(result) addDefaultDependencyOnMainModule(result)
@@ -19,29 +18,29 @@ open class KotlinGradleModuleFactory(private val project: Project) : NamedDomain
return result return result
} }
protected open fun registerDefaultCommonFragment(module: KotlinGradleModule) { protected open fun registerDefaultCommonFragment(module: KpmGradleModule) {
module.fragments.register(KotlinGradleFragment.COMMON_FRAGMENT_NAME, KotlinGradleFragment::class.java) module.fragments.register(KpmGradleFragment.COMMON_FRAGMENT_NAME, KpmGradleFragment::class.java)
} }
protected open fun addDefaultRefinementDependencyOnCommon(module: KotlinGradleModule) { protected open fun addDefaultRefinementDependencyOnCommon(module: KpmGradleModule) {
module.fragments.matching { it.name != KotlinGradleFragment.COMMON_FRAGMENT_NAME }.all { module.fragments.matching { it.name != KpmGradleFragment.COMMON_FRAGMENT_NAME }.all {
it.refines(module.fragments.named(KotlinGradleFragment.COMMON_FRAGMENT_NAME)) it.refines(module.fragments.named(KpmGradleFragment.COMMON_FRAGMENT_NAME))
} }
} }
protected open fun addDefaultDependencyOnMainModule(module: KotlinGradleModule) { protected open fun addDefaultDependencyOnMainModule(module: KpmGradleModule) {
if (module.name != KotlinGradleModule.MAIN_MODULE_NAME) { if (module.name != KpmGradleModule.MAIN_MODULE_NAME) {
module.fragments module.fragments
.matching { it.fragmentName == KotlinGradleFragment.COMMON_FRAGMENT_NAME } .matching { it.fragmentName == KpmGradleFragment.COMMON_FRAGMENT_NAME }
.configureEach { commonFragment -> .configureEach { commonFragment ->
commonFragment.dependencies { commonFragment.dependencies {
api(module.project.kpmModules.getByName(KotlinGradleModule.MAIN_MODULE_NAME)) api(module.project.kpmModules.getByName(KpmGradleModule.MAIN_MODULE_NAME))
} }
} }
} }
} }
protected open fun registerFragmentFactory(module: KotlinGradleModule) { protected open fun registerFragmentFactory(module: KpmGradleModule) {
module.fragments.registerFactory(KotlinGradleFragment::class.java, KotlinCommonFragmentFactory(module)) module.fragments.registerFactory(KpmGradleFragment::class.java, KotlinCommonFragmentFactory(module))
} }
} }
@@ -13,15 +13,15 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.mpp.filterModuleName import org.jetbrains.kotlin.gradle.plugin.mpp.filterModuleName
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
open class KotlinJvmVariant( open class KpmJvmVariant(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependenciesConfiguration: Configuration, compileDependenciesConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
runtimeDependenciesConfiguration: Configuration, runtimeDependenciesConfiguration: Configuration,
runtimeElementsConfiguration: Configuration runtimeElementsConfiguration: Configuration
) : KotlinGradlePublishedVariantWithRuntime( ) : KpmGradlePublishedVariantWithRuntime(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
dependencyConfigurations = dependencyConfigurations, dependencyConfigurations = dependencyConfigurations,
@@ -36,14 +36,14 @@ open class KotlinJvmVariant(
get() = KotlinPlatformType.jvm get() = KotlinPlatformType.jvm
} }
class KotlinJvmVariantCompilationData(val variant: KotlinJvmVariant) : KotlinVariantCompilationDataInternal<KotlinJvmOptions> { class KotlinJvmVariantCompilationData(val variant: KpmJvmVariant) : KotlinVariantCompilationDataInternal<KotlinJvmOptions> {
override val owner: KotlinJvmVariant get() = variant override val owner: KpmJvmVariant get() = variant
// TODO pull out to the variant // TODO pull out to the variant
override val kotlinOptions: KotlinJvmOptions = KotlinJvmOptionsImpl() override val kotlinOptions: KotlinJvmOptions = KotlinJvmOptionsImpl()
} }
internal fun KotlinGradleVariant.ownModuleName(): String { internal fun KpmGradleVariant.ownModuleName(): String {
val project = containingModule.project val project = containingModule.project
val baseName = project.archivesName val baseName = project.archivesName
?: project.name ?: project.name
@@ -56,10 +56,10 @@ internal class KotlinMappedJvmCompilationFactory(
) : KotlinJvmCompilationFactory(target) { ) : KotlinJvmCompilationFactory(target) {
override fun create(name: String): KotlinJvmCompilation { override fun create(name: String): KotlinJvmCompilation {
val module = target.project.kpmModules.maybeCreate(name) val module = target.project.kpmModules.maybeCreate(name)
val variant = module.fragments.create(target.name, KotlinJvmVariant::class.java) val variant = module.fragments.create(target.name, KpmJvmVariant::class.java)
return KotlinJvmCompilation( return KotlinJvmCompilation(
VariantMappedCompilationDetailsWithRuntime(variant, target), VariantMappedCompilationDetailsWithRuntime(variant, target),
) )
} }
} }
@@ -9,10 +9,10 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguationOmittingMain import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguationOmittingMain
typealias KotlinJvmVariantFactory = KotlinGradleFragmentFactory<KotlinJvmVariant> typealias KotlinJvmVariantFactory = KotlinGradleFragmentFactory<KpmJvmVariant>
fun KotlinJvmVariantFactory( fun KotlinJvmVariantFactory(
module: KotlinGradleModule, config: KotlinJvmVariantConfig = KotlinJvmVariantConfig() module: KpmGradleModule, config: KotlinJvmVariantConfig = KotlinJvmVariantConfig()
): KotlinJvmVariantFactory = KotlinJvmVariantFactory( ): KotlinJvmVariantFactory = KotlinJvmVariantFactory(
KotlinJvmVariantInstantiator(module, config), KotlinJvmVariantInstantiator(module, config),
KotlinJvmVariantConfigurator(config) KotlinJvmVariantConfigurator(config)
@@ -22,43 +22,43 @@ data class KotlinJvmVariantConfig(
val dependenciesConfigurationFactory: KotlinFragmentDependencyConfigurationsFactory val dependenciesConfigurationFactory: KotlinFragmentDependencyConfigurationsFactory
= DefaultKotlinFragmentDependencyConfigurationsFactory, = DefaultKotlinFragmentDependencyConfigurationsFactory,
val compileDependencies: KotlinGradleFragmentConfigurationDefinition<KotlinJvmVariant> val compileDependencies: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
= DefaultKotlinCompileDependenciesDefinition, = DefaultKotlinCompileDependenciesDefinition,
val runtimeDependencies: KotlinGradleFragmentConfigurationDefinition<KotlinJvmVariant> val runtimeDependencies: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
= DefaultKotlinRuntimeDependenciesDefinition, = DefaultKotlinRuntimeDependenciesDefinition,
val apiElements: KotlinGradleFragmentConfigurationDefinition<KotlinJvmVariant> val apiElements: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
= DefaultKotlinApiElementsDefinition + KotlinFragmentCompilationOutputsJarArtifact, = DefaultKotlinApiElementsDefinition + KotlinFragmentCompilationOutputsJarArtifact,
val runtimeElements: KotlinGradleFragmentConfigurationDefinition<KotlinJvmVariant> val runtimeElements: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
= DefaultKotlinRuntimeElementsDefinition, = DefaultKotlinRuntimeElementsDefinition,
val compileTaskConfigurator: KotlinCompileTaskConfigurator<KotlinJvmVariant> val compileTaskConfigurator: KotlinCompileTaskConfigurator<KpmJvmVariant>
= KotlinJvmCompileTaskConfigurator, = KotlinJvmCompileTaskConfigurator,
val sourceArchiveTaskConfigurator: KotlinSourceArchiveTaskConfigurator<KotlinJvmVariant> val sourceArchiveTaskConfigurator: KotlinSourceArchiveTaskConfigurator<KpmJvmVariant>
= DefaultKotlinSourceArchiveTaskConfigurator, = DefaultKotlinSourceArchiveTaskConfigurator,
val sourceDirectoriesConfigurator: KotlinSourceDirectoriesConfigurator<KotlinJvmVariant> val sourceDirectoriesConfigurator: KotlinSourceDirectoriesConfigurator<KpmJvmVariant>
= DefaultKotlinSourceDirectoriesConfigurator, = DefaultKotlinSourceDirectoriesConfigurator,
val publicationConfigurator: KotlinPublicationConfigurator<KotlinJvmVariant> val publicationConfigurator: KotlinPublicationConfigurator<KpmJvmVariant>
= KotlinPublicationConfigurator.SingleVariantPublication = KotlinPublicationConfigurator.SingleVariantPublication
) )
class KotlinJvmVariantInstantiator internal constructor( class KotlinJvmVariantInstantiator internal constructor(
private val module: KotlinGradleModule, private val module: KpmGradleModule,
private val config: KotlinJvmVariantConfig private val config: KotlinJvmVariantConfig
) : KotlinGradleFragmentFactory.FragmentInstantiator<KotlinJvmVariant> { ) : KotlinGradleFragmentFactory.FragmentInstantiator<KpmJvmVariant> {
override fun create(name: String): KotlinJvmVariant { override fun create(name: String): KpmJvmVariant {
val names = FragmentNameDisambiguationOmittingMain(module, name) val names = FragmentNameDisambiguationOmittingMain(module, name)
val context = KotlinGradleFragmentConfigurationContextImpl( val context = KotlinGradleFragmentConfigurationContextImpl(
module, config.dependenciesConfigurationFactory.create(module, names), names module, config.dependenciesConfigurationFactory.create(module, names), names
) )
return KotlinJvmVariant( return KpmJvmVariant(
containingModule = module, containingModule = module,
fragmentName = name, fragmentName = name,
dependencyConfigurations = context.dependencies, dependencyConfigurations = context.dependencies,
@@ -80,9 +80,9 @@ class KotlinJvmVariantInstantiator internal constructor(
class KotlinJvmVariantConfigurator internal constructor( class KotlinJvmVariantConfigurator internal constructor(
private val config: KotlinJvmVariantConfig private val config: KotlinJvmVariantConfig
) : KotlinGradleFragmentFactory.FragmentConfigurator<KotlinJvmVariant> { ) : KotlinGradleFragmentFactory.FragmentConfigurator<KpmJvmVariant> {
override fun configure(fragment: KotlinJvmVariant) { override fun configure(fragment: KpmJvmVariant) {
fragment.compileDependenciesConfiguration.configure(config.compileDependencies, fragment) fragment.compileDependenciesConfiguration.configure(config.compileDependencies, fragment)
fragment.runtimeDependenciesConfiguration.configure(config.runtimeDependencies, fragment) fragment.runtimeDependenciesConfiguration.configure(config.runtimeDependencies, fragment)
fragment.apiElementsConfiguration.configure(config.apiElements, fragment) fragment.apiElementsConfiguration.configure(config.apiElements, fragment)
@@ -32,8 +32,8 @@ interface KotlinCommonFragmentMetadataCompilationData : KotlinMetadataCompilatio
internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : KotlinCommonOptions>( internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : KotlinCommonOptions>(
final override val project: Project, final override val project: Project,
val fragment: KotlinGradleFragment, val fragment: KpmGradleFragment,
private val module: KotlinGradleModule, private val module: KpmGradleModule,
private val compileAllTask: TaskProvider<DefaultTask>, private val compileAllTask: TaskProvider<DefaultTask>,
val metadataCompilationRegistry: MetadataCompilationRegistry, val metadataCompilationRegistry: MetadataCompilationRegistry,
private val resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>> private val resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>>
@@ -106,8 +106,8 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : Kotlin
internal open class KotlinCommonFragmentMetadataCompilationDataImpl( internal open class KotlinCommonFragmentMetadataCompilationDataImpl(
project: Project, project: Project,
fragment: KotlinGradleFragment, fragment: KpmGradleFragment,
module: KotlinGradleModule, module: KpmGradleModule,
compileAllTask: TaskProvider<DefaultTask>, compileAllTask: TaskProvider<DefaultTask>,
metadataCompilationRegistry: MetadataCompilationRegistry, metadataCompilationRegistry: MetadataCompilationRegistry,
resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>> resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>>
@@ -133,18 +133,18 @@ interface KotlinNativeFragmentMetadataCompilationData :
KotlinMetadataCompilationData<KotlinCommonOptions>, KotlinMetadataCompilationData<KotlinCommonOptions>,
KotlinNativeCompilationData<KotlinCommonOptions> KotlinNativeCompilationData<KotlinCommonOptions>
internal fun KotlinGradleFragment.isNativeShared(): Boolean = internal fun KpmGradleFragment.isNativeShared(): Boolean =
containingVariants.run { containingVariants.run {
any() && all { it.platformType == KotlinPlatformType.native } any() && all { it.platformType == KotlinPlatformType.native }
} }
internal fun KotlinGradleFragment.isNativeHostSpecific(): Boolean = internal fun KpmGradleFragment.isNativeHostSpecific(): Boolean =
this in getHostSpecificFragments(containingModule) this in getHostSpecificFragments(containingModule)
internal open class KotlinNativeFragmentMetadataCompilationDataImpl( internal open class KotlinNativeFragmentMetadataCompilationDataImpl(
project: Project, project: Project,
fragment: KotlinGradleFragment, fragment: KpmGradleFragment,
module: KotlinGradleModule, module: KpmGradleModule,
compileAllTask: TaskProvider<DefaultTask>, compileAllTask: TaskProvider<DefaultTask>,
metadataCompilationRegistry: MetadataCompilationRegistry, metadataCompilationRegistry: MetadataCompilationRegistry,
resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>> resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>>
@@ -168,7 +168,7 @@ internal open class KotlinNativeFragmentMetadataCompilationDataImpl(
override val konanTarget: KonanTarget override val konanTarget: KonanTarget
get() { get() {
val nativeVariants = val nativeVariants =
fragment.containingVariants.filterIsInstance<KotlinNativeVariantInternal>() fragment.containingVariants.filterIsInstance<KpmNativeVariantInternal>()
return nativeVariants.firstOrNull { it.konanTarget.enabledOnCurrentHost }?.konanTarget return nativeVariants.firstOrNull { it.konanTarget.enabledOnCurrentHost }?.konanTarget
?: nativeVariants.firstOrNull()?.konanTarget ?: nativeVariants.firstOrNull()?.konanTarget
?: HostManager.host ?: HostManager.host
@@ -182,10 +182,10 @@ internal open class KotlinNativeFragmentMetadataCompilationDataImpl(
// TODO think about more generic case: a fragment that can be compiled by an arbitrary compiler // TODO think about more generic case: a fragment that can be compiled by an arbitrary compiler
// what tasks should we create? should there be a generic task for that? // what tasks should we create? should there be a generic task for that?
internal class MetadataCompilationRegistry { internal class MetadataCompilationRegistry {
private val commonCompilationDataPerFragment = LinkedHashMap<KotlinGradleFragment, KotlinCommonFragmentMetadataCompilationDataImpl>() private val commonCompilationDataPerFragment = LinkedHashMap<KpmGradleFragment, KotlinCommonFragmentMetadataCompilationDataImpl>()
private val nativeCompilationDataPerFragment = LinkedHashMap<KotlinGradleFragment, KotlinNativeFragmentMetadataCompilationDataImpl>() private val nativeCompilationDataPerFragment = LinkedHashMap<KpmGradleFragment, KotlinNativeFragmentMetadataCompilationDataImpl>()
fun registerCommon(fragment: KotlinGradleFragment, compilationData: KotlinCommonFragmentMetadataCompilationDataImpl) { fun registerCommon(fragment: KpmGradleFragment, compilationData: KotlinCommonFragmentMetadataCompilationDataImpl) {
commonCompilationDataPerFragment.compute(fragment) { _, existing -> commonCompilationDataPerFragment.compute(fragment) { _, existing ->
existing?.let { error("common compilation data for fragment $fragment already registered") } existing?.let { error("common compilation data for fragment $fragment already registered") }
compilationData compilationData
@@ -193,7 +193,7 @@ internal class MetadataCompilationRegistry {
withAllCommonCallbacks.forEach { it.invoke(compilationData) } withAllCommonCallbacks.forEach { it.invoke(compilationData) }
} }
fun registerNative(fragment: KotlinGradleFragment, compilationData: KotlinNativeFragmentMetadataCompilationDataImpl) { fun registerNative(fragment: KpmGradleFragment, compilationData: KotlinNativeFragmentMetadataCompilationDataImpl) {
nativeCompilationDataPerFragment.compute(fragment) { _, existing -> nativeCompilationDataPerFragment.compute(fragment) { _, existing ->
existing?.let { error("native compilation data for fragment $fragment already registered") } existing?.let { error("native compilation data for fragment $fragment already registered") }
compilationData compilationData
@@ -201,7 +201,7 @@ internal class MetadataCompilationRegistry {
withAllNativeCallbacks.forEach { it.invoke(compilationData) } withAllNativeCallbacks.forEach { it.invoke(compilationData) }
} }
fun getForFragmentOrNull(fragment: KotlinGradleFragment): AbstractKotlinFragmentMetadataCompilationData<*>? = fun getForFragmentOrNull(fragment: KpmGradleFragment): AbstractKotlinFragmentMetadataCompilationData<*>? =
listOf(commonCompilationDataPerFragment.getValue(fragment), nativeCompilationDataPerFragment.getValue(fragment)).singleOrNull { listOf(commonCompilationDataPerFragment.getValue(fragment), nativeCompilationDataPerFragment.getValue(fragment)).singleOrNull {
it.isActive it.isActive
} }
@@ -12,18 +12,17 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeCompileOptions import org.jetbrains.kotlin.gradle.plugin.mpp.NativeCompileOptions
import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import javax.inject.Inject
abstract class KotlinNativeVariantInternal( abstract class KpmNativeVariantInternal(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
val konanTarget: KonanTarget, val konanTarget: KonanTarget,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
final override val hostSpecificMetadataElementsConfiguration: Configuration? final override val hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariant, ) : KpmNativeVariant,
KotlinGradleVariantInternal( KpmGradleVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
dependencyConfigurations = dependencyConfigurations, dependencyConfigurations = dependencyConfigurations,
@@ -44,11 +43,11 @@ abstract class KotlinNativeVariantInternal(
override val compilationData by lazy { KotlinNativeVariantCompilationData(this) } override val compilationData by lazy { KotlinNativeVariantCompilationData(this) }
} }
class KotlinNativeVariantConstructor<T : KotlinNativeVariantInternal>( class KotlinNativeVariantConstructor<T : KpmNativeVariantInternal>(
val konanTarget: KonanTarget, val konanTarget: KonanTarget,
val variantClass: Class<T>, val variantClass: Class<T>,
private val constructor: ( private val constructor: (
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
@@ -57,7 +56,7 @@ class KotlinNativeVariantConstructor<T : KotlinNativeVariantInternal>(
) -> T ) -> T
) { ) {
operator fun invoke( operator fun invoke(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
@@ -78,7 +77,7 @@ interface KotlinNativeCompilationData<T : KotlinCommonOptions> : KotlinCompilati
} }
internal class KotlinNativeVariantCompilationData( internal class KotlinNativeVariantCompilationData(
val variant: KotlinNativeVariantInternal val variant: KpmNativeVariantInternal
) : KotlinVariantCompilationDataInternal<KotlinCommonOptions>, KotlinNativeCompilationData<KotlinCommonOptions> { ) : KotlinVariantCompilationDataInternal<KotlinCommonOptions>, KotlinNativeCompilationData<KotlinCommonOptions> {
override val konanTarget: KonanTarget override val konanTarget: KonanTarget
get() = variant.konanTarget get() = variant.konanTarget
@@ -89,7 +88,7 @@ internal class KotlinNativeVariantCompilationData(
override val project: Project override val project: Project
get() = variant.containingModule.project get() = variant.containingModule.project
override val owner: KotlinNativeVariant override val owner: KpmNativeVariant
get() = variant get() = variant
override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions { variant.languageSettings } override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions { variant.languageSettings }
@@ -97,7 +96,7 @@ internal class KotlinNativeVariantCompilationData(
internal class KotlinMappedNativeCompilationFactory( internal class KotlinMappedNativeCompilationFactory(
target: KotlinNativeTarget, target: KotlinNativeTarget,
private val variantClass: Class<out KotlinNativeVariantInternal> private val variantClass: Class<out KpmNativeVariantInternal>
) : KotlinNativeCompilationFactory(target) { ) : KotlinNativeCompilationFactory(target) {
override fun create(name: String): KotlinNativeCompilation { override fun create(name: String): KotlinNativeCompilation {
val module = target.project.kpmModules.maybeCreate(name) val module = target.project.kpmModules.maybeCreate(name)
@@ -108,4 +107,4 @@ internal class KotlinMappedNativeCompilationFactory(
VariantMappedCompilationDetails(variant, target) VariantMappedCompilationDetails(variant, target)
) )
} }
} }
@@ -9,8 +9,8 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation
fun <T : KotlinNativeVariantInternal> KotlinNativeVariantFactory( fun <T : KpmNativeVariantInternal> KotlinNativeVariantFactory(
module: KotlinGradleModule, module: KpmGradleModule,
constructor: KotlinNativeVariantConstructor<T>, constructor: KotlinNativeVariantConstructor<T>,
config: KotlinNativeVariantConfig<T> = KotlinNativeVariantConfig() config: KotlinNativeVariantConfig<T> = KotlinNativeVariantConfig()
) = KotlinGradleFragmentFactory( ) = KotlinGradleFragmentFactory(
@@ -18,7 +18,7 @@ fun <T : KotlinNativeVariantInternal> KotlinNativeVariantFactory(
fragmentConfigurator = KotlinNativeVariantConfigurator(config) fragmentConfigurator = KotlinNativeVariantConfigurator(config)
) )
data class KotlinNativeVariantConfig<T : KotlinNativeVariantInternal>( data class KotlinNativeVariantConfig<T : KpmNativeVariantInternal>(
val dependenciesConfigurationFactory: KotlinFragmentDependencyConfigurationsFactory = val dependenciesConfigurationFactory: KotlinFragmentDependencyConfigurationsFactory =
DefaultKotlinFragmentDependencyConfigurationsFactory, DefaultKotlinFragmentDependencyConfigurationsFactory,
@@ -42,12 +42,12 @@ data class KotlinNativeVariantConfig<T : KotlinNativeVariantInternal>(
val sourceDirectoriesConfigurator: KotlinSourceDirectoriesConfigurator<T> = val sourceDirectoriesConfigurator: KotlinSourceDirectoriesConfigurator<T> =
DefaultKotlinSourceDirectoriesConfigurator, DefaultKotlinSourceDirectoriesConfigurator,
val publicationConfigurator: KotlinPublicationConfigurator<KotlinNativeVariantInternal> = val publicationConfigurator: KotlinPublicationConfigurator<KpmNativeVariantInternal> =
KotlinPublicationConfigurator.NativeVariantPublication KotlinPublicationConfigurator.NativeVariantPublication
) )
class KotlinNativeVariantInstantiator<T : KotlinNativeVariantInternal>( class KotlinNativeVariantInstantiator<T : KpmNativeVariantInternal>(
private val module: KotlinGradleModule, private val module: KpmGradleModule,
private val kotlinNativeVariantConstructor: KotlinNativeVariantConstructor<T>, private val kotlinNativeVariantConstructor: KotlinNativeVariantConstructor<T>,
private val config: KotlinNativeVariantConfig<T> private val config: KotlinNativeVariantConfig<T>
@@ -76,7 +76,7 @@ class KotlinNativeVariantInstantiator<T : KotlinNativeVariantInternal>(
} }
} }
class KotlinNativeVariantConfigurator<T : KotlinNativeVariantInternal>( class KotlinNativeVariantConfigurator<T : KpmNativeVariantInternal>(
private val config: KotlinNativeVariantConfig<T> private val config: KotlinNativeVariantConfig<T>
) : KotlinGradleFragmentFactory.FragmentConfigurator<T> { ) : KotlinGradleFragmentFactory.FragmentConfigurator<T> {
@@ -5,20 +5,20 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20 package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
interface KotlinPublicationConfigurator<in T : KotlinGradleVariant> : KotlinGradleFragmentFactory.FragmentConfigurator<T> { interface KotlinPublicationConfigurator<in T : KpmGradleVariant> : KotlinGradleFragmentFactory.FragmentConfigurator<T> {
object NoPublication : KotlinPublicationConfigurator<KotlinGradleVariant> { object NoPublication : KotlinPublicationConfigurator<KpmGradleVariant> {
override fun configure(fragment: KotlinGradleVariant) = Unit override fun configure(fragment: KpmGradleVariant) = Unit
} }
object SingleVariantPublication : KotlinPublicationConfigurator<KotlinGradlePublishedVariantWithRuntime> { object SingleVariantPublication : KotlinPublicationConfigurator<KpmGradlePublishedVariantWithRuntime> {
override fun configure(fragment: KotlinGradlePublishedVariantWithRuntime) { override fun configure(fragment: KpmGradlePublishedVariantWithRuntime) {
VariantPublishingConfigurator.get(fragment.project).configureSingleVariantPublication(fragment) VariantPublishingConfigurator.get(fragment.project).configureSingleVariantPublication(fragment)
} }
} }
object NativeVariantPublication : KotlinPublicationConfigurator<KotlinNativeVariantInternal> { object NativeVariantPublication : KotlinPublicationConfigurator<KpmNativeVariantInternal> {
override fun configure(fragment: KotlinNativeVariantInternal) { override fun configure(fragment: KpmNativeVariantInternal) {
VariantPublishingConfigurator.get(fragment.project).configureNativeVariantPublication(fragment) VariantPublishingConfigurator.get(fragment.project).configureNativeVariantPublication(fragment)
} }
} }
@@ -9,12 +9,12 @@ import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.unambiguousNameInProject import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.unambiguousNameInProject
import org.jetbrains.kotlin.gradle.plugin.mpp.sourcesJarTaskNamed import org.jetbrains.kotlin.gradle.plugin.mpp.sourcesJarTaskNamed
interface KotlinSourceArchiveTaskConfigurator<in T : KotlinGradleVariant> { interface KotlinSourceArchiveTaskConfigurator<in T : KpmGradleVariant> {
fun registerSourceArchiveTask(variant: T): TaskProvider<*>? fun registerSourceArchiveTask(variant: T): TaskProvider<*>?
} }
object DefaultKotlinSourceArchiveTaskConfigurator : KotlinSourceArchiveTaskConfigurator<KotlinGradleVariant> { object DefaultKotlinSourceArchiveTaskConfigurator : KotlinSourceArchiveTaskConfigurator<KpmGradleVariant> {
override fun registerSourceArchiveTask(variant: KotlinGradleVariant): TaskProvider<*> { override fun registerSourceArchiveTask(variant: KpmGradleVariant): TaskProvider<*> {
return sourcesJarTaskNamed( return sourcesJarTaskNamed(
taskName = variant.sourceArchiveTaskName, taskName = variant.sourceArchiveTaskName,
project = variant.project, project = variant.project,
@@ -11,10 +11,10 @@ import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSource
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.io.File import java.io.File
interface KotlinSourceDirectoriesConfigurator<in T : KotlinGradleFragment>: KotlinGradleFragmentFactory.FragmentConfigurator<T> interface KotlinSourceDirectoriesConfigurator<in T : KpmGradleFragment>: KotlinGradleFragmentFactory.FragmentConfigurator<T>
object DefaultKotlinSourceDirectoriesConfigurator : KotlinSourceDirectoriesConfigurator<KotlinGradleFragment> { object DefaultKotlinSourceDirectoriesConfigurator : KotlinSourceDirectoriesConfigurator<KpmGradleFragment> {
override fun configure(fragment: KotlinGradleFragment) { override fun configure(fragment: KpmGradleFragment) {
fragment.kotlinSourceRoots.srcDir( fragment.kotlinSourceRoots.srcDir(
fragment.project.provider { fragment.project.provider {
defaultSourceFolder( defaultSourceFolder(
@@ -25,7 +25,7 @@ object DefaultKotlinSourceDirectoriesConfigurator : KotlinSourceDirectoriesConfi
) )
} }
private fun fragmentDirectoryName(fragment: KotlinGradleFragment): String { private fun fragmentDirectoryName(fragment: KpmGradleFragment): String {
val project = fragment.project val project = fragment.project
val isModelMappingEnabled = project.multiplatformExtensionOrNull != null val isModelMappingEnabled = project.multiplatformExtensionOrNull != null
val kpmDefaultResult = lowerCamelCaseName(fragment.name, fragment.containingModule.name) val kpmDefaultResult = lowerCamelCaseName(fragment.name, fragment.containingModule.name)
@@ -40,7 +40,7 @@ object DefaultKotlinSourceDirectoriesConfigurator : KotlinSourceDirectoriesConfi
} }
} }
fun defaultSourceFolder(fragment: KotlinGradleFragment, type: String): File { fun defaultSourceFolder(fragment: KpmGradleFragment, type: String): File {
val fragmentDirectoryName = fragmentDirectoryName(fragment) val fragmentDirectoryName = fragmentDirectoryName(fragment)
return fragment.project.file("src/$fragmentDirectoryName/$type") return fragment.project.file("src/$fragmentDirectoryName/$type")
} }
@@ -5,14 +5,14 @@ import org.jetbrains.kotlin.konan.target.KonanTarget
import javax.inject.Inject import javax.inject.Inject
// DO NOT EDIT MANUALLY! Generated by org.jetbrains.kotlin.generators.gradle.dsl.KpmNativeVariantCodegenKt // DO NOT EDIT MANUALLY! Generated by org.jetbrains.kotlin.generators.gradle.dsl.KpmNativeVariantCodegenKt
open class KotlinAndroidNativeX64Variant @Inject constructor( open class KpmAndroidNativeX64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.ANDROID_X64, konanTarget = KonanTarget.ANDROID_X64,
@@ -23,19 +23,19 @@ open class KotlinAndroidNativeX64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.ANDROID_X64, KotlinAndroidNativeX64Variant::class.java, ::KotlinAndroidNativeX64Variant KonanTarget.ANDROID_X64, KpmAndroidNativeX64Variant::class.java, ::KpmAndroidNativeX64Variant
) )
} }
} }
open class KotlinAndroidNativeX86Variant @Inject constructor( open class KpmAndroidNativeX86Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.ANDROID_X86, konanTarget = KonanTarget.ANDROID_X86,
@@ -46,19 +46,19 @@ open class KotlinAndroidNativeX86Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.ANDROID_X86, KotlinAndroidNativeX86Variant::class.java, ::KotlinAndroidNativeX86Variant KonanTarget.ANDROID_X86, KpmAndroidNativeX86Variant::class.java, ::KpmAndroidNativeX86Variant
) )
} }
} }
open class KotlinAndroidNativeArm32Variant @Inject constructor( open class KpmAndroidNativeArm32Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.ANDROID_ARM32, konanTarget = KonanTarget.ANDROID_ARM32,
@@ -69,19 +69,19 @@ open class KotlinAndroidNativeArm32Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.ANDROID_ARM32, KotlinAndroidNativeArm32Variant::class.java, ::KotlinAndroidNativeArm32Variant KonanTarget.ANDROID_ARM32, KpmAndroidNativeArm32Variant::class.java, ::KpmAndroidNativeArm32Variant
) )
} }
} }
open class KotlinAndroidNativeArm64Variant @Inject constructor( open class KpmAndroidNativeArm64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.ANDROID_ARM64, konanTarget = KonanTarget.ANDROID_ARM64,
@@ -92,19 +92,19 @@ open class KotlinAndroidNativeArm64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.ANDROID_ARM64, KotlinAndroidNativeArm64Variant::class.java, ::KotlinAndroidNativeArm64Variant KonanTarget.ANDROID_ARM64, KpmAndroidNativeArm64Variant::class.java, ::KpmAndroidNativeArm64Variant
) )
} }
} }
open class KotlinIosArm32Variant @Inject constructor( open class KpmIosArm32Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.IOS_ARM32, konanTarget = KonanTarget.IOS_ARM32,
@@ -115,19 +115,19 @@ open class KotlinIosArm32Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.IOS_ARM32, KotlinIosArm32Variant::class.java, ::KotlinIosArm32Variant KonanTarget.IOS_ARM32, KpmIosArm32Variant::class.java, ::KpmIosArm32Variant
) )
} }
} }
open class KotlinIosArm64Variant @Inject constructor( open class KpmIosArm64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.IOS_ARM64, konanTarget = KonanTarget.IOS_ARM64,
@@ -138,19 +138,19 @@ open class KotlinIosArm64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.IOS_ARM64, KotlinIosArm64Variant::class.java, ::KotlinIosArm64Variant KonanTarget.IOS_ARM64, KpmIosArm64Variant::class.java, ::KpmIosArm64Variant
) )
} }
} }
open class KotlinIosX64Variant @Inject constructor( open class KpmIosX64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.IOS_X64, konanTarget = KonanTarget.IOS_X64,
@@ -161,19 +161,19 @@ open class KotlinIosX64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.IOS_X64, KotlinIosX64Variant::class.java, ::KotlinIosX64Variant KonanTarget.IOS_X64, KpmIosX64Variant::class.java, ::KpmIosX64Variant
) )
} }
} }
open class KotlinIosSimulatorArm64Variant @Inject constructor( open class KpmIosSimulatorArm64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.IOS_SIMULATOR_ARM64, konanTarget = KonanTarget.IOS_SIMULATOR_ARM64,
@@ -184,19 +184,19 @@ open class KotlinIosSimulatorArm64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.IOS_SIMULATOR_ARM64, KotlinIosSimulatorArm64Variant::class.java, ::KotlinIosSimulatorArm64Variant KonanTarget.IOS_SIMULATOR_ARM64, KpmIosSimulatorArm64Variant::class.java, ::KpmIosSimulatorArm64Variant
) )
} }
} }
open class KotlinWatchosArm32Variant @Inject constructor( open class KpmWatchosArm32Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.WATCHOS_ARM32, konanTarget = KonanTarget.WATCHOS_ARM32,
@@ -207,19 +207,19 @@ open class KotlinWatchosArm32Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.WATCHOS_ARM32, KotlinWatchosArm32Variant::class.java, ::KotlinWatchosArm32Variant KonanTarget.WATCHOS_ARM32, KpmWatchosArm32Variant::class.java, ::KpmWatchosArm32Variant
) )
} }
} }
open class KotlinWatchosArm64Variant @Inject constructor( open class KpmWatchosArm64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.WATCHOS_ARM64, konanTarget = KonanTarget.WATCHOS_ARM64,
@@ -230,19 +230,19 @@ open class KotlinWatchosArm64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.WATCHOS_ARM64, KotlinWatchosArm64Variant::class.java, ::KotlinWatchosArm64Variant KonanTarget.WATCHOS_ARM64, KpmWatchosArm64Variant::class.java, ::KpmWatchosArm64Variant
) )
} }
} }
open class KotlinWatchosX86Variant @Inject constructor( open class KpmWatchosX86Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.WATCHOS_X86, konanTarget = KonanTarget.WATCHOS_X86,
@@ -253,19 +253,19 @@ open class KotlinWatchosX86Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.WATCHOS_X86, KotlinWatchosX86Variant::class.java, ::KotlinWatchosX86Variant KonanTarget.WATCHOS_X86, KpmWatchosX86Variant::class.java, ::KpmWatchosX86Variant
) )
} }
} }
open class KotlinWatchosX64Variant @Inject constructor( open class KpmWatchosX64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.WATCHOS_X64, konanTarget = KonanTarget.WATCHOS_X64,
@@ -276,19 +276,19 @@ open class KotlinWatchosX64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.WATCHOS_X64, KotlinWatchosX64Variant::class.java, ::KotlinWatchosX64Variant KonanTarget.WATCHOS_X64, KpmWatchosX64Variant::class.java, ::KpmWatchosX64Variant
) )
} }
} }
open class KotlinWatchosSimulatorArm64Variant @Inject constructor( open class KpmWatchosSimulatorArm64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.WATCHOS_SIMULATOR_ARM64, konanTarget = KonanTarget.WATCHOS_SIMULATOR_ARM64,
@@ -299,19 +299,19 @@ open class KotlinWatchosSimulatorArm64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.WATCHOS_SIMULATOR_ARM64, KotlinWatchosSimulatorArm64Variant::class.java, ::KotlinWatchosSimulatorArm64Variant KonanTarget.WATCHOS_SIMULATOR_ARM64, KpmWatchosSimulatorArm64Variant::class.java, ::KpmWatchosSimulatorArm64Variant
) )
} }
} }
open class KotlinTvosArm64Variant @Inject constructor( open class KpmTvosArm64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.TVOS_ARM64, konanTarget = KonanTarget.TVOS_ARM64,
@@ -322,19 +322,19 @@ open class KotlinTvosArm64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.TVOS_ARM64, KotlinTvosArm64Variant::class.java, ::KotlinTvosArm64Variant KonanTarget.TVOS_ARM64, KpmTvosArm64Variant::class.java, ::KpmTvosArm64Variant
) )
} }
} }
open class KotlinTvosX64Variant @Inject constructor( open class KpmTvosX64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.TVOS_X64, konanTarget = KonanTarget.TVOS_X64,
@@ -345,19 +345,19 @@ open class KotlinTvosX64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.TVOS_X64, KotlinTvosX64Variant::class.java, ::KotlinTvosX64Variant KonanTarget.TVOS_X64, KpmTvosX64Variant::class.java, ::KpmTvosX64Variant
) )
} }
} }
open class KotlinTvosSimulatorArm64Variant @Inject constructor( open class KpmTvosSimulatorArm64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.TVOS_SIMULATOR_ARM64, konanTarget = KonanTarget.TVOS_SIMULATOR_ARM64,
@@ -368,19 +368,19 @@ open class KotlinTvosSimulatorArm64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.TVOS_SIMULATOR_ARM64, KotlinTvosSimulatorArm64Variant::class.java, ::KotlinTvosSimulatorArm64Variant KonanTarget.TVOS_SIMULATOR_ARM64, KpmTvosSimulatorArm64Variant::class.java, ::KpmTvosSimulatorArm64Variant
) )
} }
} }
open class KotlinLinuxX64Variant @Inject constructor( open class KpmLinuxX64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.LINUX_X64, konanTarget = KonanTarget.LINUX_X64,
@@ -391,19 +391,19 @@ open class KotlinLinuxX64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.LINUX_X64, KotlinLinuxX64Variant::class.java, ::KotlinLinuxX64Variant KonanTarget.LINUX_X64, KpmLinuxX64Variant::class.java, ::KpmLinuxX64Variant
) )
} }
} }
open class KotlinMingwX86Variant @Inject constructor( open class KpmMingwX86Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.MINGW_X86, konanTarget = KonanTarget.MINGW_X86,
@@ -414,19 +414,19 @@ open class KotlinMingwX86Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.MINGW_X86, KotlinMingwX86Variant::class.java, ::KotlinMingwX86Variant KonanTarget.MINGW_X86, KpmMingwX86Variant::class.java, ::KpmMingwX86Variant
) )
} }
} }
open class KotlinMingwX64Variant @Inject constructor( open class KpmMingwX64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.MINGW_X64, konanTarget = KonanTarget.MINGW_X64,
@@ -437,19 +437,19 @@ open class KotlinMingwX64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.MINGW_X64, KotlinMingwX64Variant::class.java, ::KotlinMingwX64Variant KonanTarget.MINGW_X64, KpmMingwX64Variant::class.java, ::KpmMingwX64Variant
) )
} }
} }
open class KotlinMacosX64Variant @Inject constructor( open class KpmMacosX64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.MACOS_X64, konanTarget = KonanTarget.MACOS_X64,
@@ -460,19 +460,19 @@ open class KotlinMacosX64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.MACOS_X64, KotlinMacosX64Variant::class.java, ::KotlinMacosX64Variant KonanTarget.MACOS_X64, KpmMacosX64Variant::class.java, ::KpmMacosX64Variant
) )
} }
} }
open class KotlinMacosArm64Variant @Inject constructor( open class KpmMacosArm64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.MACOS_ARM64, konanTarget = KonanTarget.MACOS_ARM64,
@@ -483,19 +483,19 @@ open class KotlinMacosArm64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.MACOS_ARM64, KotlinMacosArm64Variant::class.java, ::KotlinMacosArm64Variant KonanTarget.MACOS_ARM64, KpmMacosArm64Variant::class.java, ::KpmMacosArm64Variant
) )
} }
} }
open class KotlinLinuxArm64Variant @Inject constructor( open class KpmLinuxArm64Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.LINUX_ARM64, konanTarget = KonanTarget.LINUX_ARM64,
@@ -506,19 +506,19 @@ open class KotlinLinuxArm64Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.LINUX_ARM64, KotlinLinuxArm64Variant::class.java, ::KotlinLinuxArm64Variant KonanTarget.LINUX_ARM64, KpmLinuxArm64Variant::class.java, ::KpmLinuxArm64Variant
) )
} }
} }
open class KotlinLinuxArm32HfpVariant @Inject constructor( open class KpmLinuxArm32HfpVariant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.LINUX_ARM32_HFP, konanTarget = KonanTarget.LINUX_ARM32_HFP,
@@ -529,19 +529,19 @@ open class KotlinLinuxArm32HfpVariant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.LINUX_ARM32_HFP, KotlinLinuxArm32HfpVariant::class.java, ::KotlinLinuxArm32HfpVariant KonanTarget.LINUX_ARM32_HFP, KpmLinuxArm32HfpVariant::class.java, ::KpmLinuxArm32HfpVariant
) )
} }
} }
open class KotlinLinuxMips32Variant @Inject constructor( open class KpmLinuxMips32Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.LINUX_MIPS32, konanTarget = KonanTarget.LINUX_MIPS32,
@@ -552,19 +552,19 @@ open class KotlinLinuxMips32Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.LINUX_MIPS32, KotlinLinuxMips32Variant::class.java, ::KotlinLinuxMips32Variant KonanTarget.LINUX_MIPS32, KpmLinuxMips32Variant::class.java, ::KpmLinuxMips32Variant
) )
} }
} }
open class KotlinLinuxMipsel32Variant @Inject constructor( open class KpmLinuxMipsel32Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.LINUX_MIPSEL32, konanTarget = KonanTarget.LINUX_MIPSEL32,
@@ -575,19 +575,19 @@ open class KotlinLinuxMipsel32Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.LINUX_MIPSEL32, KotlinLinuxMipsel32Variant::class.java, ::KotlinLinuxMipsel32Variant KonanTarget.LINUX_MIPSEL32, KpmLinuxMipsel32Variant::class.java, ::KpmLinuxMipsel32Variant
) )
} }
} }
open class KotlinWasm32Variant @Inject constructor( open class KpmWasm32Variant @Inject constructor(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration? hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal( ) : KpmNativeVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
konanTarget = KonanTarget.WASM32, konanTarget = KonanTarget.WASM32,
@@ -598,66 +598,66 @@ open class KotlinWasm32Variant @Inject constructor(
) { ) {
companion object { companion object {
val constructor = KotlinNativeVariantConstructor( val constructor = KotlinNativeVariantConstructor(
KonanTarget.WASM32, KotlinWasm32Variant::class.java, ::KotlinWasm32Variant KonanTarget.WASM32, KpmWasm32Variant::class.java, ::KpmWasm32Variant
) )
} }
} }
internal val allKpmNativeVariantConstructors = listOf( internal val allKpmNativeVariantConstructors = listOf(
KotlinAndroidNativeX64Variant.constructor, KpmAndroidNativeX64Variant.constructor,
KotlinAndroidNativeX86Variant.constructor, KpmAndroidNativeX86Variant.constructor,
KotlinAndroidNativeArm32Variant.constructor, KpmAndroidNativeArm32Variant.constructor,
KotlinAndroidNativeArm64Variant.constructor, KpmAndroidNativeArm64Variant.constructor,
KotlinIosArm32Variant.constructor, KpmIosArm32Variant.constructor,
KotlinIosArm64Variant.constructor, KpmIosArm64Variant.constructor,
KotlinIosX64Variant.constructor, KpmIosX64Variant.constructor,
KotlinIosSimulatorArm64Variant.constructor, KpmIosSimulatorArm64Variant.constructor,
KotlinWatchosArm32Variant.constructor, KpmWatchosArm32Variant.constructor,
KotlinWatchosArm64Variant.constructor, KpmWatchosArm64Variant.constructor,
KotlinWatchosX86Variant.constructor, KpmWatchosX86Variant.constructor,
KotlinWatchosX64Variant.constructor, KpmWatchosX64Variant.constructor,
KotlinWatchosSimulatorArm64Variant.constructor, KpmWatchosSimulatorArm64Variant.constructor,
KotlinTvosArm64Variant.constructor, KpmTvosArm64Variant.constructor,
KotlinTvosX64Variant.constructor, KpmTvosX64Variant.constructor,
KotlinTvosSimulatorArm64Variant.constructor, KpmTvosSimulatorArm64Variant.constructor,
KotlinLinuxX64Variant.constructor, KpmLinuxX64Variant.constructor,
KotlinMingwX86Variant.constructor, KpmMingwX86Variant.constructor,
KotlinMingwX64Variant.constructor, KpmMingwX64Variant.constructor,
KotlinMacosX64Variant.constructor, KpmMacosX64Variant.constructor,
KotlinMacosArm64Variant.constructor, KpmMacosArm64Variant.constructor,
KotlinLinuxArm64Variant.constructor, KpmLinuxArm64Variant.constructor,
KotlinLinuxArm32HfpVariant.constructor, KpmLinuxArm32HfpVariant.constructor,
KotlinLinuxMips32Variant.constructor, KpmLinuxMips32Variant.constructor,
KotlinLinuxMipsel32Variant.constructor, KpmLinuxMipsel32Variant.constructor,
KotlinWasm32Variant.constructor KpmWasm32Variant.constructor
) )
internal fun kpmNativeVariantClass(konanTarget: KonanTarget): Class<out KotlinNativeVariantInternal>? = when (konanTarget) { internal fun kpmNativeVariantClass(konanTarget: KonanTarget): Class<out KpmNativeVariantInternal>? = when (konanTarget) {
KonanTarget.ANDROID_X64 -> KotlinAndroidNativeX64Variant::class.java KonanTarget.ANDROID_X64 -> KpmAndroidNativeX64Variant::class.java
KonanTarget.ANDROID_X86 -> KotlinAndroidNativeX86Variant::class.java KonanTarget.ANDROID_X86 -> KpmAndroidNativeX86Variant::class.java
KonanTarget.ANDROID_ARM32 -> KotlinAndroidNativeArm32Variant::class.java KonanTarget.ANDROID_ARM32 -> KpmAndroidNativeArm32Variant::class.java
KonanTarget.ANDROID_ARM64 -> KotlinAndroidNativeArm64Variant::class.java KonanTarget.ANDROID_ARM64 -> KpmAndroidNativeArm64Variant::class.java
KonanTarget.IOS_ARM32 -> KotlinIosArm32Variant::class.java KonanTarget.IOS_ARM32 -> KpmIosArm32Variant::class.java
KonanTarget.IOS_ARM64 -> KotlinIosArm64Variant::class.java KonanTarget.IOS_ARM64 -> KpmIosArm64Variant::class.java
KonanTarget.IOS_X64 -> KotlinIosX64Variant::class.java KonanTarget.IOS_X64 -> KpmIosX64Variant::class.java
KonanTarget.IOS_SIMULATOR_ARM64 -> KotlinIosSimulatorArm64Variant::class.java KonanTarget.IOS_SIMULATOR_ARM64 -> KpmIosSimulatorArm64Variant::class.java
KonanTarget.WATCHOS_ARM32 -> KotlinWatchosArm32Variant::class.java KonanTarget.WATCHOS_ARM32 -> KpmWatchosArm32Variant::class.java
KonanTarget.WATCHOS_ARM64 -> KotlinWatchosArm64Variant::class.java KonanTarget.WATCHOS_ARM64 -> KpmWatchosArm64Variant::class.java
KonanTarget.WATCHOS_X86 -> KotlinWatchosX86Variant::class.java KonanTarget.WATCHOS_X86 -> KpmWatchosX86Variant::class.java
KonanTarget.WATCHOS_X64 -> KotlinWatchosX64Variant::class.java KonanTarget.WATCHOS_X64 -> KpmWatchosX64Variant::class.java
KonanTarget.WATCHOS_SIMULATOR_ARM64 -> KotlinWatchosSimulatorArm64Variant::class.java KonanTarget.WATCHOS_SIMULATOR_ARM64 -> KpmWatchosSimulatorArm64Variant::class.java
KonanTarget.TVOS_ARM64 -> KotlinTvosArm64Variant::class.java KonanTarget.TVOS_ARM64 -> KpmTvosArm64Variant::class.java
KonanTarget.TVOS_X64 -> KotlinTvosX64Variant::class.java KonanTarget.TVOS_X64 -> KpmTvosX64Variant::class.java
KonanTarget.TVOS_SIMULATOR_ARM64 -> KotlinTvosSimulatorArm64Variant::class.java KonanTarget.TVOS_SIMULATOR_ARM64 -> KpmTvosSimulatorArm64Variant::class.java
KonanTarget.LINUX_X64 -> KotlinLinuxX64Variant::class.java KonanTarget.LINUX_X64 -> KpmLinuxX64Variant::class.java
KonanTarget.MINGW_X86 -> KotlinMingwX86Variant::class.java KonanTarget.MINGW_X86 -> KpmMingwX86Variant::class.java
KonanTarget.MINGW_X64 -> KotlinMingwX64Variant::class.java KonanTarget.MINGW_X64 -> KpmMingwX64Variant::class.java
KonanTarget.MACOS_X64 -> KotlinMacosX64Variant::class.java KonanTarget.MACOS_X64 -> KpmMacosX64Variant::class.java
KonanTarget.MACOS_ARM64 -> KotlinMacosArm64Variant::class.java KonanTarget.MACOS_ARM64 -> KpmMacosArm64Variant::class.java
KonanTarget.LINUX_ARM64 -> KotlinLinuxArm64Variant::class.java KonanTarget.LINUX_ARM64 -> KpmLinuxArm64Variant::class.java
KonanTarget.LINUX_ARM32_HFP -> KotlinLinuxArm32HfpVariant::class.java KonanTarget.LINUX_ARM32_HFP -> KpmLinuxArm32HfpVariant::class.java
KonanTarget.LINUX_MIPS32 -> KotlinLinuxMips32Variant::class.java KonanTarget.LINUX_MIPS32 -> KpmLinuxMips32Variant::class.java
KonanTarget.LINUX_MIPSEL32 -> KotlinLinuxMipsel32Variant::class.java KonanTarget.LINUX_MIPSEL32 -> KpmLinuxMipsel32Variant::class.java
KonanTarget.WASM32 -> KotlinWasm32Variant::class.java KonanTarget.WASM32 -> KpmWasm32Variant::class.java
else -> null else -> null
} }
@@ -11,11 +11,11 @@ import org.gradle.api.publish.maven.MavenPublication
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
import org.jetbrains.kotlin.gradle.dsl.topLevelExtensionOrNull import org.jetbrains.kotlin.gradle.dsl.topLevelExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
internal interface KpmGradleProjectModelContainer { internal interface KpmGradleProjectModelContainer {
val modules: NamedDomainObjectContainer<KotlinGradleModule> val modules: NamedDomainObjectContainer<KpmGradleModule>
val metadataCompilationRegistryByModuleId: MutableMap<KotlinModuleIdentifier, MetadataCompilationRegistry> val metadataCompilationRegistryByModuleId: MutableMap<KpmModuleIdentifier, MetadataCompilationRegistry>
val rootPublication: MavenPublication? val rootPublication: MavenPublication?
} }
@@ -32,15 +32,15 @@ internal val Project.kpmModelContainerOrNull: KpmGradleProjectModelContainer?
internal val Project.hasKpmModel: Boolean internal val Project.hasKpmModel: Boolean
get() = kpmModelContainerOrNull != null get() = kpmModelContainerOrNull != null
internal val Project.kpmModules: NamedDomainObjectContainer<KotlinGradleModule> internal val Project.kpmModules: NamedDomainObjectContainer<KpmGradleModule>
get() = kpmModelContainer.modules get() = kpmModelContainer.modules
internal val Project.metadataCompilationRegistryByModuleId: MutableMap<KotlinModuleIdentifier, MetadataCompilationRegistry> internal val Project.metadataCompilationRegistryByModuleId: MutableMap<KpmModuleIdentifier, MetadataCompilationRegistry>
get() = kpmModelContainer.metadataCompilationRegistryByModuleId get() = kpmModelContainer.metadataCompilationRegistryByModuleId
internal class DefaultKpmGradleProjectModelContainer( internal class DefaultKpmGradleProjectModelContainer(
override val modules: NamedDomainObjectContainer<KotlinGradleModule>, override val modules: NamedDomainObjectContainer<KpmGradleModule>,
override val metadataCompilationRegistryByModuleId: MutableMap<KotlinModuleIdentifier, MetadataCompilationRegistry>, override val metadataCompilationRegistryByModuleId: MutableMap<KpmModuleIdentifier, MetadataCompilationRegistry>,
) : KpmGradleProjectModelContainer { ) : KpmGradleProjectModelContainer {
override var rootPublication: MavenPublication? = null override var rootPublication: MavenPublication? = null
@@ -49,10 +49,10 @@ internal class DefaultKpmGradleProjectModelContainer(
return DefaultKpmGradleProjectModelContainer(createKpmModulesContainer(project), mutableMapOf()) return DefaultKpmGradleProjectModelContainer(createKpmModulesContainer(project), mutableMapOf())
} }
private fun createKpmModulesContainer(project: Project): NamedDomainObjectContainer<KotlinGradleModule> = private fun createKpmModulesContainer(project: Project): NamedDomainObjectContainer<KpmGradleModule> =
project.objects.domainObjectContainer( project.objects.domainObjectContainer(
KotlinGradleModule::class.java, KpmGradleModule::class.java,
KotlinGradleModuleFactory(project) KotlinGradleModuleFactory(project)
) )
} }
} }
@@ -25,20 +25,19 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName
import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet
import org.jetbrains.kotlin.gradle.utils.filesProvider import org.jetbrains.kotlin.gradle.utils.filesProvider
import org.jetbrains.kotlin.project.model.KotlinAttributeKey import org.jetbrains.kotlin.project.model.KotlinAttributeKey
import org.jetbrains.kotlin.project.model.KotlinModuleDependency import org.jetbrains.kotlin.project.model.KpmModuleDependency
import org.jetbrains.kotlin.project.model.KotlinModuleFragment
import org.jetbrains.kotlin.tooling.core.MutableExtras import org.jetbrains.kotlin.tooling.core.MutableExtras
import org.jetbrains.kotlin.tooling.core.mutableExtrasOf import org.jetbrains.kotlin.tooling.core.mutableExtrasOf
internal open class LegacyMappedVariant( internal open class LegacyMappedVariant(
internal val compilation: KotlinCompilation<*>, internal val compilation: KotlinCompilation<*>,
) : KotlinGradleVariant { ) : KpmGradleVariant {
override fun toString(): String = "variant mapped to $compilation" override fun toString(): String = "variant mapped to $compilation"
private val fragmentForDefaultSourceSet = private val fragmentForDefaultSourceSet =
(compilation.defaultSourceSet as FragmentMappedKotlinSourceSet).underlyingFragment (compilation.defaultSourceSet as FragmentMappedKotlinSourceSet).underlyingFragment
override val containingModule: KotlinGradleModule get() = fragmentForDefaultSourceSet.containingModule override val containingModule: KpmGradleModule get() = fragmentForDefaultSourceSet.containingModule
override val platformType: KotlinPlatformType override val platformType: KotlinPlatformType
get() = compilation.platformType get() = compilation.platformType
@@ -90,11 +89,11 @@ internal open class LegacyMappedVariant(
override val extras: MutableExtras = mutableExtrasOf() override val extras: MutableExtras = mutableExtrasOf()
override fun refines(other: KotlinGradleFragment) { override fun refines(other: KpmGradleFragment) {
fragmentForDefaultSourceSet.refines(other) fragmentForDefaultSourceSet.refines(other)
} }
override fun refines(other: NamedDomainObjectProvider<KotlinGradleFragment>) { override fun refines(other: NamedDomainObjectProvider<KpmGradleFragment>) {
fragmentForDefaultSourceSet.refines(other) fragmentForDefaultSourceSet.refines(other)
} }
@@ -106,10 +105,10 @@ internal open class LegacyMappedVariant(
override val fragmentName: String override val fragmentName: String
get() = fragmentForDefaultSourceSet.fragmentName + "Variant" get() = fragmentForDefaultSourceSet.fragmentName + "Variant"
override val directRefinesDependencies: Iterable<KotlinGradleFragment> override val declaredRefinesDependencies: Iterable<KpmGradleFragment>
get() = fragmentForDefaultSourceSet.directRefinesDependencies get() = fragmentForDefaultSourceSet.declaredRefinesDependencies
override val declaredModuleDependencies: Iterable<KotlinModuleDependency> override val declaredModuleDependencies: Iterable<KpmModuleDependency>
get() = fragmentForDefaultSourceSet.declaredModuleDependencies get() = fragmentForDefaultSourceSet.declaredModuleDependencies
/** This configuration includes the dependencies from the refines-parents */ /** This configuration includes the dependencies from the refines-parents */
@@ -151,7 +150,7 @@ internal open class LegacyMappedVariant(
internal class LegacyMappedVariantWithRuntime(private val compilationWithRuntime: KotlinCompilationToRunnableFiles<*>) : internal class LegacyMappedVariantWithRuntime(private val compilationWithRuntime: KotlinCompilationToRunnableFiles<*>) :
LegacyMappedVariant(compilationWithRuntime), LegacyMappedVariant(compilationWithRuntime),
KotlinGradleVariantWithRuntime { KpmGradleVariantWithRuntime {
override val runtimeDependenciesConfiguration: Configuration override val runtimeDependenciesConfiguration: Configuration
get() = project.configurations.getByName(compilationWithRuntime.runtimeDependencyConfigurationName) get() = project.configurations.getByName(compilationWithRuntime.runtimeDependencyConfigurationName)
@@ -195,7 +194,7 @@ internal fun mapTargetCompilationsToKpmVariants(target: AbstractKotlinTarget, pu
} }
whenPublicationShouldRegister { whenPublicationShouldRegister {
val mainModule = target.project.kpmModules.getByName(KotlinGradleModule.MAIN_MODULE_NAME) val mainModule = target.project.kpmModules.getByName(KpmGradleModule.MAIN_MODULE_NAME)
target.kotlinComponents.forEach { kotlinComponent -> target.kotlinComponents.forEach { kotlinComponent ->
val moduleHolder = DefaultSingleMavenPublishedModuleHolder( val moduleHolder = DefaultSingleMavenPublishedModuleHolder(
mainModule, mainModule,
@@ -18,7 +18,7 @@ internal fun setupKpmModulesPublication(project: Project) {
} }
} }
internal fun setupPublicationForModule(module: KotlinGradleModule) { internal fun setupPublicationForModule(module: KpmGradleModule) {
val project = module.project val project = module.project
val metadataElements = project.configurations.getByName(metadataElementsConfigurationName(module)) val metadataElements = project.configurations.getByName(metadataElementsConfigurationName(module))
@@ -50,7 +50,7 @@ internal fun setupPublicationForModule(module: KotlinGradleModule) {
} }
} }
private fun MavenPublication.setupKotlinToolingMetadataIfNeeded(module: KotlinGradleModule) { private fun MavenPublication.setupKotlinToolingMetadataIfNeeded(module: KpmGradleModule) {
val buildKotlinToolingMetadataTask = module.buildKotlinToolingMetadataTask ?: return val buildKotlinToolingMetadataTask = module.buildKotlinToolingMetadataTask ?: return
artifact(buildKotlinToolingMetadataTask.map { it.outputFile }) { artifact -> artifact(buildKotlinToolingMetadataTask.map { it.outputFile }) { artifact ->
@@ -67,4 +67,4 @@ private open class SoftwareComponentFactoryHolder @Inject constructor(
return project.objects.newInstance(SoftwareComponentFactoryHolder::class.java) return project.objects.newInstance(SoftwareComponentFactoryHolder::class.java)
} }
} }
} }
@@ -20,7 +20,7 @@ internal open class TransformKotlinGranularMetadataForFragment
@Inject constructor( @Inject constructor(
@get:Internal @get:Internal
@field:Transient @field:Transient
val fragment: KotlinGradleFragment, val fragment: KpmGradleFragment,
//FIXME annotations //FIXME annotations
private val transformation: FragmentGranularMetadataResolver private val transformation: FragmentGranularMetadataResolver
) : DefaultTask() { ) : DefaultTask() {
@@ -16,8 +16,8 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.project.model.KotlinModule import org.jetbrains.kotlin.project.model.KpmModule
import org.jetbrains.kotlin.project.model.LocalModuleIdentifier import org.jetbrains.kotlin.project.model.KpmLocalModuleIdentifier
val KotlinProjectExtension.targets: Iterable<KotlinTarget> val KotlinProjectExtension.targets: Iterable<KotlinTarget>
get() = when (this) { get() = when (this) {
@@ -26,8 +26,8 @@ val KotlinProjectExtension.targets: Iterable<KotlinTarget>
else -> error("Unexpected 'kotlin' extension $this") else -> error("Unexpected 'kotlin' extension $this")
} }
fun KotlinModule.representsProject(project: Project): Boolean = fun KpmModule.representsProject(project: Project): Boolean =
moduleIdentifier.let { it is LocalModuleIdentifier && it.buildId == project.currentBuildId().name && it.projectId == project.path } moduleIdentifier.let { it is KpmLocalModuleIdentifier && it.buildId == project.currentBuildId().name && it.projectId == project.path }
// FIXME internal API? // FIXME internal API?
fun Project.currentBuildId(): BuildIdentifier = fun Project.currentBuildId(): BuildIdentifier =
@@ -52,4 +52,4 @@ val Project.distsDirectory get() = if (isGradleVersionAtLeast(7, 1)) {
extensions.getByType(BasePluginExtension::class.java).distsDirectory extensions.getByType(BasePluginExtension::class.java).distsDirectory
} else { } else {
convention.getPlugin(BasePluginConvention::class.java).distsDirectory convention.getPlugin(BasePluginConvention::class.java).distsDirectory
} }
@@ -12,11 +12,11 @@ import kotlin.reflect.KClass
internal fun registerDefaultVariantFactories(project: Project) { internal fun registerDefaultVariantFactories(project: Project) {
project.kpmModules.configureEach { module -> project.kpmModules.configureEach { module ->
module.fragments.registerFactory( module.fragments.registerFactory(
KotlinJvmVariant::class.java, KpmJvmVariant::class.java,
KotlinJvmVariantFactory(module) KotlinJvmVariantFactory(module)
) )
fun <T : KotlinNativeVariantInternal> registerNativeVariantFactory( fun <T : KpmNativeVariantInternal> registerNativeVariantFactory(
constructor: KotlinNativeVariantConstructor<T> constructor: KotlinNativeVariantConstructor<T>
) = module.fragments.registerFactory( ) = module.fragments.registerFactory(
constructor.variantClass, KotlinNativeVariantFactory(module, constructor) constructor.variantClass, KotlinNativeVariantFactory(module, constructor)
@@ -15,21 +15,20 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.DefaultKotlinCompilationOutput
import org.jetbrains.kotlin.gradle.plugin.mpp.MavenPublicationCoordinatesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.MavenPublicationCoordinatesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.disambiguateName import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.disambiguateName
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.newDependencyFilesHolder
import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName
import org.jetbrains.kotlin.gradle.utils.dashSeparatedName import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
import org.jetbrains.kotlin.project.model.KotlinAttributeKey import org.jetbrains.kotlin.project.model.KotlinAttributeKey
import org.jetbrains.kotlin.project.model.KotlinPlatformTypeAttribute import org.jetbrains.kotlin.project.model.KotlinPlatformTypeAttribute
abstract class KotlinGradleVariantInternal( abstract class KpmGradleVariantInternal(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
final override val compileDependenciesConfiguration: Configuration, final override val compileDependenciesConfiguration: Configuration,
final override val apiElementsConfiguration: Configuration final override val apiElementsConfiguration: Configuration
) : KotlinGradleFragmentInternal( ) : KpmGradleFragmentInternal(
containingModule, fragmentName, dependencyConfigurations containingModule, fragmentName, dependencyConfigurations
), KotlinGradleVariant { ), KpmGradleVariant {
override val variantAttributes: Map<KotlinAttributeKey, String> override val variantAttributes: Map<KotlinAttributeKey, String>
get() = mapOf(KotlinPlatformTypeAttribute to kotlinPlatformTypeAttributeFromPlatform(platformType)) // TODO user attributes get() = mapOf(KotlinPlatformTypeAttribute to kotlinPlatformTypeAttributeFromPlatform(platformType)) // TODO user attributes
@@ -51,7 +50,7 @@ abstract class KotlinGradleVariantInternal(
} }
class DefaultSingleMavenPublishedModuleHolder( class DefaultSingleMavenPublishedModuleHolder(
private var module: KotlinGradleModule, override val defaultPublishedModuleSuffix: String? private var module: KpmGradleModule, override val defaultPublishedModuleSuffix: String?
) : SingleMavenPublishedModuleHolder { ) : SingleMavenPublishedModuleHolder {
private val project get() = module.project private val project get() = module.project
@@ -80,24 +79,24 @@ class DefaultSingleMavenPublishedModuleHolder(
private fun kotlinPlatformTypeAttributeFromPlatform(platformType: KotlinPlatformType) = platformType.name private fun kotlinPlatformTypeAttributeFromPlatform(platformType: KotlinPlatformType) = platformType.name
// TODO: rewrite with the artifacts API // TODO: rewrite with the artifacts API
internal val KotlinGradleVariant.defaultSourceArtifactTaskName: String internal val KpmGradleVariant.defaultSourceArtifactTaskName: String
get() = disambiguateName("sourcesJar") get() = disambiguateName("sourcesJar")
abstract class KotlinGradleVariantWithRuntimeInternal( abstract class KpmGradleVariantWithRuntimeInternal(
containingModule: KotlinGradleModule, containingModule: KpmGradleModule,
fragmentName: String, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
final override val runtimeDependenciesConfiguration: Configuration, final override val runtimeDependenciesConfiguration: Configuration,
final override val runtimeElementsConfiguration: Configuration final override val runtimeElementsConfiguration: Configuration
) : KotlinGradleVariantInternal( ) : KpmGradleVariantInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
dependencyConfigurations = dependencyConfigurations, dependencyConfigurations = dependencyConfigurations,
compileDependenciesConfiguration = compileDependencyConfiguration, compileDependenciesConfiguration = compileDependencyConfiguration,
apiElementsConfiguration = apiElementsConfiguration apiElementsConfiguration = apiElementsConfiguration
), KotlinGradleVariantWithRuntime { ), KpmGradleVariantWithRuntime {
// TODO deduplicate with KotlinCompilation? // TODO deduplicate with KotlinCompilation?
override var runtimeDependencyFiles: FileCollection = project.files(runtimeDependenciesConfiguration) override var runtimeDependencyFiles: FileCollection = project.files(runtimeDependenciesConfiguration)
@@ -106,17 +105,17 @@ abstract class KotlinGradleVariantWithRuntimeInternal(
project.files(listOf({ compilationOutputs.allOutputs }, { runtimeDependencyFiles })) project.files(listOf({ compilationOutputs.allOutputs }, { runtimeDependencyFiles }))
} }
private fun defaultModuleSuffix(module: KotlinGradleModule, variantName: String): String = private fun defaultModuleSuffix(module: KpmGradleModule, variantName: String): String =
dashSeparatedName(variantName, module.moduleClassifier) dashSeparatedName(variantName, module.moduleClassifier)
abstract class KotlinGradlePublishedVariantWithRuntime( abstract class KpmGradlePublishedVariantWithRuntime(
containingModule: KotlinGradleModule, fragmentName: String, containingModule: KpmGradleModule, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations, dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration, compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration, apiElementsConfiguration: Configuration,
runtimeDependencyConfiguration: Configuration, runtimeDependencyConfiguration: Configuration,
runtimeElementsConfiguration: Configuration runtimeElementsConfiguration: Configuration
) : KotlinGradleVariantWithRuntimeInternal( ) : KpmGradleVariantWithRuntimeInternal(
containingModule = containingModule, containingModule = containingModule,
fragmentName = fragmentName, fragmentName = fragmentName,
dependencyConfigurations = dependencyConfigurations, dependencyConfigurations = dependencyConfigurations,
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
import org.jetbrains.kotlin.gradle.utils.filesProvider import org.jetbrains.kotlin.gradle.utils.filesProvider
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
import org.jetbrains.kotlin.project.model.KotlinModuleFragment import org.jetbrains.kotlin.project.model.KpmFragment
import java.util.concurrent.Callable import java.util.concurrent.Callable
internal fun setupFragmentsMetadataForKpmModules(project: Project) { internal fun setupFragmentsMetadataForKpmModules(project: Project) {
@@ -38,7 +38,7 @@ internal fun setupFragmentsMetadataForKpmModules(project: Project) {
} }
} }
internal fun configureMetadataResolutionAndBuild(module: KotlinGradleModule) { internal fun configureMetadataResolutionAndBuild(module: KpmGradleModule) {
val project = module.project val project = module.project
createResolvableMetadataConfigurationForModule(module) createResolvableMetadataConfigurationForModule(module)
@@ -52,7 +52,7 @@ internal fun configureMetadataResolutionAndBuild(module: KotlinGradleModule) {
generateAndExportProjectStructureMetadata(module) generateAndExportProjectStructureMetadata(module)
} }
internal fun configureMetadataExposure(module: KotlinGradleModule) { internal fun configureMetadataExposure(module: KpmGradleModule) {
val project = module.project val project = module.project
project.configurations.create(metadataElementsConfigurationName(module)).apply { project.configurations.create(metadataElementsConfigurationName(module)).apply {
isCanBeConsumed = false isCanBeConsumed = false
@@ -83,14 +83,14 @@ internal fun configureMetadataExposure(module: KotlinGradleModule) {
) )
} }
fun metadataElementsConfigurationName(module: KotlinGradleModule) = fun metadataElementsConfigurationName(module: KpmGradleModule) =
module.disambiguateName("metadataElements") module.disambiguateName("metadataElements")
fun sourceElementsConfigurationName(module: KotlinGradleModule) = fun sourceElementsConfigurationName(module: KpmGradleModule) =
module.disambiguateName("sourceElements") module.disambiguateName("sourceElements")
private fun generateAndExportProjectStructureMetadata( private fun generateAndExportProjectStructureMetadata(
module: KotlinGradleModule module: KpmGradleModule
) { ) {
val project = module.project val project = module.project
val projectStructureMetadata = project.createGenerateProjectStructureMetadataTask(module) val projectStructureMetadata = project.createGenerateProjectStructureMetadataTask(module)
@@ -105,7 +105,7 @@ private fun generateAndExportProjectStructureMetadata(
} }
} }
private fun createResolvableMetadataConfigurationForModule(module: KotlinGradleModule) { private fun createResolvableMetadataConfigurationForModule(module: KpmGradleModule) {
val project = module.project val project = module.project
project.configurations.create(module.resolvableMetadataConfigurationName).apply { project.configurations.create(module.resolvableMetadataConfigurationName).apply {
isCanBeConsumed = false isCanBeConsumed = false
@@ -121,7 +121,7 @@ private fun createResolvableMetadataConfigurationForModule(module: KotlinGradleM
} }
private fun configureMetadataCompilationsAndCreateRegistry( private fun configureMetadataCompilationsAndCreateRegistry(
module: KotlinGradleModule, module: KpmGradleModule,
metadataCompilationRegistry: MetadataCompilationRegistry metadataCompilationRegistry: MetadataCompilationRegistry
) { ) {
val project = module.project val project = module.project
@@ -143,7 +143,7 @@ private fun configureMetadataCompilationsAndCreateRegistry(
} }
private fun configureMetadataJarTask( private fun configureMetadataJarTask(
module: KotlinGradleModule, module: KpmGradleModule,
registry: MetadataCompilationRegistry registry: MetadataCompilationRegistry
) { ) {
val project = module.project val project = module.project
@@ -169,11 +169,11 @@ private fun configureMetadataJarTask(
} }
} }
internal fun metadataJarName(module: KotlinGradleModule) = internal fun metadataJarName(module: KpmGradleModule) =
lowerCamelCaseName(module.moduleClassifier, KotlinMetadataTargetConfigurator.ALL_METADATA_JAR_NAME) lowerCamelCaseName(module.moduleClassifier, KotlinMetadataTargetConfigurator.ALL_METADATA_JAR_NAME)
private fun createCommonMetadataCompilation( private fun createCommonMetadataCompilation(
fragment: KotlinGradleFragment, fragment: KpmGradleFragment,
compileAllTask: TaskProvider<DefaultTask>, compileAllTask: TaskProvider<DefaultTask>,
metadataCompilationRegistry: MetadataCompilationRegistry metadataCompilationRegistry: MetadataCompilationRegistry
) { ) {
@@ -194,7 +194,7 @@ private fun createCommonMetadataCompilation(
} }
private fun createNativeMetadataCompilation( private fun createNativeMetadataCompilation(
fragment: KotlinGradleFragment, fragment: KpmGradleFragment,
compileAllTask: TaskProvider<DefaultTask>, compileAllTask: TaskProvider<DefaultTask>,
metadataCompilationRegistry: MetadataCompilationRegistry metadataCompilationRegistry: MetadataCompilationRegistry
) { ) {
@@ -216,7 +216,7 @@ private fun createNativeMetadataCompilation(
private class MetadataCompilationTasksConfigurator(project: Project) : KotlinCompilationTaskConfigurator(project) { private class MetadataCompilationTasksConfigurator(project: Project) : KotlinCompilationTaskConfigurator(project) {
fun createKotlinCommonCompilationTask( fun createKotlinCommonCompilationTask(
fragment: KotlinGradleFragment, fragment: KpmGradleFragment,
compilationData: KotlinCommonFragmentMetadataCompilationData compilationData: KotlinCommonFragmentMetadataCompilationData
) { ) {
KotlinCommonSourceSetProcessor( KotlinCommonSourceSetProcessor(
@@ -235,22 +235,22 @@ private class MetadataCompilationTasksConfigurator(project: Project) : KotlinCom
} }
fun createKotlinNativeMetadataCompilationTask( fun createKotlinNativeMetadataCompilationTask(
fragment: KotlinGradleFragment, fragment: KpmGradleFragment,
compilationData: KotlinNativeFragmentMetadataCompilationData compilationData: KotlinNativeFragmentMetadataCompilationData
): TaskProvider<KotlinNativeCompile> = createKotlinNativeCompilationTask(fragment, compilationData) { ): TaskProvider<KotlinNativeCompile> = createKotlinNativeCompilationTask(fragment, compilationData) {
kotlinPluginData = project.compilerPluginProviderForNativeMetadata(fragment, compilationData) kotlinPluginData = project.compilerPluginProviderForNativeMetadata(fragment, compilationData)
} }
override fun getSourcesForFragmentCompilation(fragment: KotlinGradleFragment): MultipleSourceRootsProvider { override fun getSourcesForFragmentCompilation(fragment: KpmGradleFragment): MultipleSourceRootsProvider {
return project.provider { listOf(fragmentSourcesProvider.getFragmentOwnSources(fragment)) } return project.provider { listOf(fragmentSourcesProvider.getFragmentOwnSources(fragment)) }
} }
override fun getCommonSourcesForFragmentCompilation(fragment: KotlinGradleFragment): MultipleSourceRootsProvider { override fun getCommonSourcesForFragmentCompilation(fragment: KpmGradleFragment): MultipleSourceRootsProvider {
return project.provider { listOf(fragmentSourcesProvider.getFragmentOwnSources(fragment)) } return project.provider { listOf(fragmentSourcesProvider.getFragmentOwnSources(fragment)) }
} }
} }
private fun resolvedMetadataProviders(fragment: KotlinGradleFragment) = private fun resolvedMetadataProviders(fragment: KpmGradleFragment) =
fragment.withRefinesClosure.map { fragment.withRefinesClosure.map {
FragmentResolvedMetadataProvider( FragmentResolvedMetadataProvider(
fragment.project.tasks.withType<TransformKotlinGranularMetadataForFragment>().named(transformFragmentMetadataTaskName(it)) fragment.project.tasks.withType<TransformKotlinGranularMetadataForFragment>().named(transformFragmentMetadataTaskName(it))
@@ -259,7 +259,7 @@ private fun resolvedMetadataProviders(fragment: KotlinGradleFragment) =
private fun createExtractMetadataTask( private fun createExtractMetadataTask(
project: Project, project: Project,
fragment: KotlinGradleFragment, fragment: KpmGradleFragment,
transformation: FragmentGranularMetadataResolver transformation: FragmentGranularMetadataResolver
) { ) {
project.tasks.register( project.tasks.register(
@@ -293,5 +293,5 @@ private fun disableMetadataCompilationIfNotYetSupported(
} }
} }
private fun transformFragmentMetadataTaskName(fragment: KotlinModuleFragment) = private fun transformFragmentMetadataTaskName(fragment: KpmFragment) =
lowerCamelCaseName("resolve", fragment.disambiguateName("Metadata")) lowerCamelCaseName("resolve", fragment.disambiguateName("Metadata"))
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.AbstractKotlinFragmentMetadataCompilationData import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.AbstractKotlinFragmentMetadataCompilationData
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleVariant import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleVariant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleVariantWithRuntime import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleVariantWithRuntime
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName
import org.jetbrains.kotlin.gradle.utils.filesProvider import org.jetbrains.kotlin.gradle.utils.filesProvider
@@ -20,7 +20,7 @@ interface DependencyFilesHolder {
companion object companion object
} }
internal fun DependencyFilesHolder.Companion.ofVariantCompileDependencies(variant: KotlinGradleVariant): DependencyFilesHolder = internal fun DependencyFilesHolder.Companion.ofVariantCompileDependencies(variant: KpmGradleVariant): DependencyFilesHolder =
object : DependencyFilesHolder { object : DependencyFilesHolder {
override val dependencyConfigurationName: String override val dependencyConfigurationName: String
get() = variant.compileDependenciesConfiguration.name get() = variant.compileDependenciesConfiguration.name
@@ -29,7 +29,7 @@ internal fun DependencyFilesHolder.Companion.ofVariantCompileDependencies(varian
set(value) { variant.compileDependencyFiles = value } set(value) { variant.compileDependencyFiles = value }
} }
internal fun DependencyFilesHolder.Companion.ofVariantRuntimeDependencies(variant: KotlinGradleVariantWithRuntime): DependencyFilesHolder = internal fun DependencyFilesHolder.Companion.ofVariantRuntimeDependencies(variant: KpmGradleVariantWithRuntime): DependencyFilesHolder =
object : DependencyFilesHolder { object : DependencyFilesHolder {
override val dependencyConfigurationName: String override val dependencyConfigurationName: String
get() = variant.runtimeDependenciesConfiguration.name get() = variant.runtimeDependenciesConfiguration.name
@@ -58,4 +58,4 @@ internal fun Project.newDependencyFilesHolder(dependencyConfigurationName: Strin
SimpleDependencyFilesHolder( SimpleDependencyFilesHolder(
dependencyConfigurationName, dependencyConfigurationName,
project.filesProvider { project.configurations.getByName(dependencyConfigurationName) } project.filesProvider { project.configurations.getByName(dependencyConfigurationName) }
) )
@@ -7,10 +7,10 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.project.model.KotlinModule import org.jetbrains.kotlin.project.model.KpmModule
import org.jetbrains.kotlin.project.model.KotlinModuleFragment import org.jetbrains.kotlin.project.model.KpmFragment
/** /**
* Mechanism for disambiguating/scoping names for certain entities (e.g. fragments) * Mechanism for disambiguating/scoping names for certain entities (e.g. fragments)
@@ -36,41 +36,41 @@ interface KotlinNameDisambiguation {
/* Default implementation for fragments */ /* Default implementation for fragments */
internal fun FragmentNameDisambiguation(module: KotlinModule, fragmentName: String): KotlinNameDisambiguation { internal fun FragmentNameDisambiguation(module: KpmModule, fragmentName: String): KotlinNameDisambiguation {
return DefaultKotlinFragmentNameDisambiguation(module, fragmentName) return DefaultKotlinFragmentNameDisambiguation(module, fragmentName)
} }
internal fun FragmentNameDisambiguationOmittingMain(module: KotlinModule, fragmentName: String): KotlinNameDisambiguation { internal fun FragmentNameDisambiguationOmittingMain(module: KpmModule, fragmentName: String): KotlinNameDisambiguation {
return DefaultKotlinFragmentNameDisambiguationOmittingMain(module, fragmentName) return DefaultKotlinFragmentNameDisambiguationOmittingMain(module, fragmentName)
} }
private class DefaultKotlinFragmentNameDisambiguation( private class DefaultKotlinFragmentNameDisambiguation(
private val module: KotlinModule, private val module: KpmModule,
private val fragmentName: String private val fragmentName: String
) : KotlinNameDisambiguation { ) : KotlinNameDisambiguation {
override fun disambiguateName(simpleName: String): String { override fun disambiguateName(simpleName: String): String {
return KotlinModuleFragment.disambiguateName(module, fragmentName, simpleName) return KpmFragment.disambiguateName(module, fragmentName, simpleName)
} }
} }
private class DefaultKotlinFragmentNameDisambiguationOmittingMain( private class DefaultKotlinFragmentNameDisambiguationOmittingMain(
private val module: KotlinModule, private val module: KpmModule,
private val fragmentName: String private val fragmentName: String
) : KotlinNameDisambiguation { ) : KotlinNameDisambiguation {
override fun disambiguateName(simpleName: String): String { override fun disambiguateName(simpleName: String): String {
return KotlinModuleFragment.disambiguateNameOmittingMain(module, fragmentName, simpleName) return KpmFragment.disambiguateNameOmittingMain(module, fragmentName, simpleName)
} }
} }
internal fun KotlinModuleFragment.disambiguateName(simpleName: String) = internal fun KpmFragment.disambiguateName(simpleName: String) =
KotlinModuleFragment.disambiguateName(containingModule, fragmentName, simpleName) KpmFragment.disambiguateName(containingModule, fragmentName, simpleName)
internal val KotlinModuleFragment.unambiguousNameInProject internal val KpmFragment.unambiguousNameInProject
get() = disambiguateName("") get() = disambiguateName("")
internal fun KotlinModuleFragment.Companion.disambiguateName(module: KotlinModule, fragmentName: String, simpleName: String) = internal fun KpmFragment.Companion.disambiguateName(module: KpmModule, fragmentName: String, simpleName: String) =
lowerCamelCaseName(fragmentName, module.moduleIdentifier.moduleClassifier ?: KotlinGradleModule.MAIN_MODULE_NAME, simpleName) lowerCamelCaseName(fragmentName, module.moduleIdentifier.moduleClassifier ?: KpmGradleModule.MAIN_MODULE_NAME, simpleName)
internal fun KotlinModuleFragment.Companion.disambiguateNameOmittingMain(module: KotlinModule, fragmentName: String, simpleName: String) = internal fun KpmFragment.Companion.disambiguateNameOmittingMain(module: KpmModule, fragmentName: String, simpleName: String) =
lowerCamelCaseName(fragmentName, module.moduleIdentifier.moduleClassifier, simpleName) lowerCamelCaseName(fragmentName, module.moduleIdentifier.moduleClassifier, simpleName)
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util
import org.gradle.api.capabilities.Capability import org.gradle.api.capabilities.Capability
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
internal class ComputedCapability( internal class ComputedCapability(
val groupProvider: Provider<String>, val groupProvider: Provider<String>,
@@ -22,7 +22,7 @@ internal class ComputedCapability(
override fun getVersion(): String? = versionProvider.get() override fun getVersion(): String? = versionProvider.get()
companion object { companion object {
fun fromModule(module: KotlinGradleModule): ComputedCapability { fun fromModule(module: KpmGradleModule): ComputedCapability {
val project = module.project val project = module.project
return ComputedCapability( return ComputedCapability(
project.provider { project.group.toString() }, project.provider { project.group.toString() },
@@ -32,14 +32,14 @@ internal class ComputedCapability(
) )
} }
fun fromModuleOrNull(module: KotlinGradleModule): ComputedCapability? = fun fromModuleOrNull(module: KpmGradleModule): ComputedCapability? =
if (module.moduleClassifier != null) if (module.moduleClassifier != null)
fromModule(module) fromModule(module)
else null else null
fun capabilityStringFromModule(module: KotlinGradleModule): String? = fun capabilityStringFromModule(module: KpmGradleModule): String? =
if (module.moduleClassifier != null) fromModule(module).notation() else null if (module.moduleClassifier != null) fromModule(module).notation() else null
} }
fun notation(): String = "$group:$name:$version" fun notation(): String = "$group:$name:$version"
} }
@@ -5,13 +5,13 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleDependencyGraph import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleDependencyGraph
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleDependencyGraphNode import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleDependencyGraphNode
import org.jetbrains.kotlin.project.model.KotlinModule import org.jetbrains.kotlin.project.model.KpmModule
import org.jetbrains.kotlin.tooling.core.withClosure import org.jetbrains.kotlin.tooling.core.withClosure
internal val GradleDependencyGraph.allDependencyNodes: Iterable<GradleDependencyGraphNode> internal val KpmGradleDependencyGraph.allDependencyNodes: Iterable<GradleDependencyGraphNode>
get() = root.withClosure { it.dependenciesByFragment.values.flatten() } get() = root.withClosure { it.dependenciesByFragment.values.flatten() }
internal val GradleDependencyGraph.allDependencyModules: Iterable<KotlinModule> internal val KpmGradleDependencyGraph.allDependencyModules: Iterable<KpmModule>
get() = allDependencyNodes.map { it.module } get() = allDependencyNodes.map { it.module }
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20 package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import com.android.build.gradle.internal.publishing.AndroidArtifacts
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ModuleDependency import org.gradle.api.artifacts.ModuleDependency
@@ -33,14 +32,14 @@ import javax.inject.Inject
interface PlatformPublicationToMavenRequest { interface PlatformPublicationToMavenRequest {
val componentName: String val componentName: String
val fromModule: KotlinGradleModule val fromModule: KpmGradleModule
val publicationHolder: SingleMavenPublishedModuleHolder val publicationHolder: SingleMavenPublishedModuleHolder
val variantPublicationRequests: Iterable<VariantPublicationRequest> val variantPublicationRequests: Iterable<VariantPublicationRequest>
} }
data class BasicPlatformPublicationToMavenRequest( data class BasicPlatformPublicationToMavenRequest(
override val componentName: String, override val componentName: String,
override val fromModule: KotlinGradleModule, override val fromModule: KpmGradleModule,
override val publicationHolder: SingleMavenPublishedModuleHolder, override val publicationHolder: SingleMavenPublishedModuleHolder,
override val variantPublicationRequests: Iterable<VariantPublicationRequest> override val variantPublicationRequests: Iterable<VariantPublicationRequest>
) : PlatformPublicationToMavenRequest { ) : PlatformPublicationToMavenRequest {
@@ -54,17 +53,17 @@ data class BasicPlatformPublicationToMavenRequest(
/** TODO: consider also using this class for exposing a KPM variant's configurations for project-to-project dependencies, /** TODO: consider also using this class for exposing a KPM variant's configurations for project-to-project dependencies,
* so that a variant may expose an arbitrary set of configurations rather just { API, runtime } or { API } */ * so that a variant may expose an arbitrary set of configurations rather just { API, runtime } or { API } */
interface VariantPublicationRequest { interface VariantPublicationRequest {
val fromVariant: KotlinGradleVariant val fromVariant: KpmGradleVariant
val publishConfiguration: Configuration val publishConfiguration: Configuration
} }
data class BasicVariantPublicationRequest( data class BasicVariantPublicationRequest(
override val fromVariant: KotlinGradleVariant, override val fromVariant: KpmGradleVariant,
override val publishConfiguration: Configuration override val publishConfiguration: Configuration
) : VariantPublicationRequest ) : VariantPublicationRequest
fun VariantPublishingConfigurator.configureNativeVariantPublication(variant: KotlinNativeVariantInternal) { fun VariantPublishingConfigurator.configureNativeVariantPublication(variant: KpmNativeVariantInternal) {
val publishConfigurations = listOfNotNull( val publishConfigurations = listOfNotNull(
variant.apiElementsConfiguration, variant.apiElementsConfiguration,
variant.hostSpecificMetadataElementsConfiguration // host-specific metadata may be absent variant.hostSpecificMetadataElementsConfiguration // host-specific metadata may be absent
@@ -72,13 +71,13 @@ fun VariantPublishingConfigurator.configureNativeVariantPublication(variant: Kot
configureSingleVariantPublishing(variant, variant, publishConfigurations) configureSingleVariantPublishing(variant, variant, publishConfigurations)
} }
fun VariantPublishingConfigurator.configureSingleVariantPublication(variant: KotlinGradlePublishedVariantWithRuntime) { fun VariantPublishingConfigurator.configureSingleVariantPublication(variant: KpmGradlePublishedVariantWithRuntime) {
val publishConfigurations = listOf(variant.apiElementsConfiguration, variant.runtimeElementsConfiguration) val publishConfigurations = listOf(variant.apiElementsConfiguration, variant.runtimeElementsConfiguration)
configureSingleVariantPublishing(variant, variant, publishConfigurations) configureSingleVariantPublishing(variant, variant, publishConfigurations)
} }
fun VariantPublishingConfigurator.configureSingleVariantPublishing( fun VariantPublishingConfigurator.configureSingleVariantPublishing(
variant: KotlinGradleVariant, variant: KpmGradleVariant,
publishedModuleHolder: SingleMavenPublishedModuleHolder, publishedModuleHolder: SingleMavenPublishedModuleHolder,
publishConfigurations: Iterable<Configuration> publishConfigurations: Iterable<Configuration>
) { ) {
@@ -103,12 +102,12 @@ open class VariantPublishingConfigurator @Inject constructor(
project.objects.newInstance(VariantPublishingConfigurator::class.java, project) project.objects.newInstance(VariantPublishingConfigurator::class.java, project)
} }
open fun platformComponentName(variant: KotlinGradleVariant) = variant.disambiguateName("") open fun platformComponentName(variant: KpmGradleVariant) = variant.disambiguateName("")
open fun inferMavenScope(variant: KotlinGradleVariant, configurationName: String): String? = open fun inferMavenScope(variant: KpmGradleVariant, configurationName: String): String? =
when { when {
configurationName == variant.apiElementsConfiguration.name -> "compile" configurationName == variant.apiElementsConfiguration.name -> "compile"
variant is KotlinGradleVariantWithRuntime && configurationName == variant.runtimeElementsConfiguration.name -> "runtime" variant is KpmGradleVariantWithRuntime && configurationName == variant.runtimeElementsConfiguration.name -> "runtime"
else -> null else -> null
} }
@@ -144,7 +143,7 @@ open class VariantPublishingConfigurator @Inject constructor(
) )
} }
protected open fun configureSourceElementsPublishing(componentName: String, variant: KotlinGradleVariant) { protected open fun configureSourceElementsPublishing(componentName: String, variant: KpmGradleVariant) {
val configurationName = variant.disambiguateName("sourceElements") val configurationName = variant.disambiguateName("sourceElements")
val docsVariants = DocumentationVariantConfigurator().createSourcesElementsConfiguration(configurationName, variant) val docsVariants = DocumentationVariantConfigurator().createSourcesElementsConfiguration(configurationName, variant)
project.components.withType(AdhocComponentWithVariants::class.java).named(componentName).configure { component -> project.components.withType(AdhocComponentWithVariants::class.java).named(componentName).configure { component ->
@@ -205,7 +204,7 @@ open class VariantPublishingConfigurator @Inject constructor(
protected open fun registerPlatformVariantsInRootModule( protected open fun registerPlatformVariantsInRootModule(
publishedModuleHolder: SingleMavenPublishedModuleHolder, publishedModuleHolder: SingleMavenPublishedModuleHolder,
kotlinModule: KotlinGradleModule, kotlinModule: KpmGradleModule,
variantRequests: Iterable<VariantPublicationRequest> variantRequests: Iterable<VariantPublicationRequest>
) { ) {
val platformModuleDependencyProvider = project.provider { val platformModuleDependencyProvider = project.provider {
@@ -238,7 +237,7 @@ open class VariantPublishingConfigurator @Inject constructor(
} }
internal data class AdvancedVariantPublicationRequest( internal data class AdvancedVariantPublicationRequest(
override val fromVariant: KotlinGradleVariant, override val fromVariant: KpmGradleVariant,
override val publishConfiguration: Configuration, override val publishConfiguration: Configuration,
val overrideConfigurationAttributesForPublication: AttributeContainer?, val overrideConfigurationAttributesForPublication: AttributeContainer?,
val overrideConfigurationArtifactsForPublication: Provider<out Iterable<PublishArtifact>>?, val overrideConfigurationArtifactsForPublication: Provider<out Iterable<PublishArtifact>>?,
@@ -271,7 +270,7 @@ open class DocumentationVariantConfigurator {
open fun createSourcesElementsConfiguration( open fun createSourcesElementsConfiguration(
configurationName: String, configurationName: String,
variant: KotlinGradleVariant variant: KpmGradleVariant
): Configuration { ): Configuration {
val sourcesArtifactTask = variant.project.tasks.withType<AbstractArchiveTask>().named(variant.sourceArchiveTaskName) val sourcesArtifactTask = variant.project.tasks.withType<AbstractArchiveTask>().named(variant.sourceArchiveTaskName)
val artifactClassifier = dashSeparatedName(variant.containingModule.moduleClassifier, "sources") val artifactClassifier = dashSeparatedName(variant.containingModule.moduleClassifier, "sources")
@@ -283,4 +282,4 @@ open class DocumentationVariantConfigurator {
ComputedCapability.fromModuleOrNull(variant.containingModule) ComputedCapability.fromModuleOrNull(variant.containingModule)
) )
} }
} }
@@ -15,13 +15,12 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.unambiguousNameInProject
import org.jetbrains.kotlin.gradle.plugin.sources.createDefaultSourceDirectorySet import org.jetbrains.kotlin.gradle.plugin.sources.createDefaultSourceDirectorySet
class FragmentMappedKotlinSourceSet( class FragmentMappedKotlinSourceSet(
private val sourceSetName: String, private val sourceSetName: String,
private val project: Project, private val project: Project,
internal val underlyingFragment: KotlinGradleFragment internal val underlyingFragment: KpmGradleFragment
) : KotlinSourceSet { ) : KotlinSourceSet {
val displayName: String val displayName: String
get() = sourceSetName get() = sourceSetName
@@ -75,7 +74,7 @@ class FragmentMappedKotlinSourceSet(
override val dependsOn: Set<KotlinSourceSet> override val dependsOn: Set<KotlinSourceSet>
get() = project.kotlinExtension.sourceSets.filter { get() = project.kotlinExtension.sourceSets.filter {
it is FragmentMappedKotlinSourceSet && it.underlyingFragment in underlyingFragment.directRefinesDependencies it is FragmentMappedKotlinSourceSet && it.underlyingFragment in underlyingFragment.declaredRefinesDependencies
}.toSet() }.toSet()
override fun toString(): String = "source set $name" override fun toString(): String = "source set $name"
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.gradle.dsl.*
import org.jetbrains.kotlin.gradle.dsl.topLevelExtensionOrNull import org.jetbrains.kotlin.gradle.dsl.topLevelExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTargetPreset import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTargetPreset
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules
interface SourceSetMappedFragmentLocator { interface SourceSetMappedFragmentLocator {
@@ -36,7 +36,7 @@ internal class MultiplatformSourceSetMappedFragmentLocator : SourceSetMappedFrag
override fun locateFragmentForSourceSet(project: Project, sourceSetName: String): SourceSetMappedFragmentLocator.FragmentLocation { override fun locateFragmentForSourceSet(project: Project, sourceSetName: String): SourceSetMappedFragmentLocator.FragmentLocation {
val camelCaseParts = sourceSetName.camelCaseParts() val camelCaseParts = sourceSetName.camelCaseParts()
if (camelCaseParts.size < 2) { if (camelCaseParts.size < 2) {
return SourceSetMappedFragmentLocator.FragmentLocation(KotlinGradleModule.MAIN_MODULE_NAME, sourceSetName) return SourceSetMappedFragmentLocator.FragmentLocation(KpmGradleModule.MAIN_MODULE_NAME, sourceSetName)
} }
val androidTarget = when (val ext = project.topLevelExtension) { val androidTarget = when (val ext = project.topLevelExtension) {
@@ -55,7 +55,7 @@ internal class MultiplatformSourceSetMappedFragmentLocator : SourceSetMappedFrag
androidSourceSetModuleName(androidTarget.name, sourceSetName) androidSourceSetModuleName(androidTarget.name, sourceSetName)
else null else null
} ?: candidateModuleNames.lastOrNull { project.kpmModules.findByName(it) != null } } ?: candidateModuleNames.lastOrNull { project.kpmModules.findByName(it) != null }
?: KotlinGradleModule.MAIN_MODULE_NAME ?: KpmGradleModule.MAIN_MODULE_NAME
val fragmentName = val fragmentName =
if (sourceSetName.endsWith(moduleName, ignoreCase = true)) sourceSetName.dropLast(moduleName.length) else sourceSetName if (sourceSetName.endsWith(moduleName, ignoreCase = true)) sourceSetName.dropLast(moduleName.length) else sourceSetName
@@ -67,7 +67,7 @@ internal class MultiplatformSourceSetMappedFragmentLocator : SourceSetMappedFrag
val compilationName = sourceSetName.removePrefix(targetName).takeIf { it != sourceSetName } ?: return null val compilationName = sourceSetName.removePrefix(targetName).takeIf { it != sourceSetName } ?: return null
return when { return when {
"Test" in compilationName -> "test" "Test" in compilationName -> "test"
else -> KotlinGradleModule.MAIN_MODULE_NAME else -> KpmGradleModule.MAIN_MODULE_NAME
} }
} }
@@ -84,4 +84,4 @@ private class SingleTargetSourceSetMappedFragmentLocator : SourceSetMappedFragme
} }
} }
internal const val SINGLE_PLATFORM_FRAGMENT_NAME = "common" internal const val SINGLE_PLATFORM_FRAGMENT_NAME = "common"
@@ -489,7 +489,7 @@ internal class NativeSharedCompilationProcessor(
override fun run() = Unit override fun run() = Unit
} }
internal fun Project.createGenerateProjectStructureMetadataTask(module: KotlinGradleModule): TaskProvider<GenerateProjectStructureMetadata> = internal fun Project.createGenerateProjectStructureMetadataTask(module: KpmGradleModule): TaskProvider<GenerateProjectStructureMetadata> =
project.registerTask(lowerCamelCaseName("generate", module.moduleClassifier, "ProjectStructureMetadata")) { task -> project.registerTask(lowerCamelCaseName("generate", module.moduleClassifier, "ProjectStructureMetadata")) { task ->
task.lazyKotlinProjectStructureMetadata = lazy { buildProjectStructureMetadata(module) } task.lazyKotlinProjectStructureMetadata = lazy { buildProjectStructureMetadata(module) }
} }
@@ -39,7 +39,7 @@ internal class KpmMetadataTargetConfigurator(private val metadataTargetConfigura
private fun configureTargetWithKpm(target: KotlinMetadataTarget) { private fun configureTargetWithKpm(target: KotlinMetadataTarget) {
target.project.whenEvaluated { target.project.whenEvaluated {
val mainModule = target.project.kpmModules.getByName(KotlinGradleModule.MAIN_MODULE_NAME) val mainModule = target.project.kpmModules.getByName(KpmGradleModule.MAIN_MODULE_NAME)
val metadataCompilations = target.project.metadataCompilationRegistryByModuleId.getValue(mainModule.moduleIdentifier) val metadataCompilations = target.project.metadataCompilationRegistryByModuleId.getValue(mainModule.moduleIdentifier)
mainModule.fragments.forEach { fragment -> mainModule.fragments.forEach { fragment ->
val compilationData = metadataCompilations.getForFragmentOrNull(fragment) ?: return@forEach val compilationData = metadataCompilations.getForFragmentOrNull(fragment) ?: return@forEach
@@ -53,7 +53,7 @@ internal class KpmMetadataTargetConfigurator(private val metadataTargetConfigura
val compilation = when { val compilation = when {
isNative -> { isNative -> {
val konanTargets = val konanTargets =
mainModule.variantsContainingFragment(fragment).map { (it as KotlinNativeVariantInternal).konanTarget } mainModule.variantsContainingFragment(fragment).map { (it as KpmNativeVariantInternal).konanTarget }
KotlinSharedNativeCompilation(konanTargets, compilationDetails as CompilationDetails<KotlinCommonOptions>) KotlinSharedNativeCompilation(konanTargets, compilationDetails as CompilationDetails<KotlinCommonOptions>)
} }
else -> KotlinCommonCompilation(compilationDetails as CompilationDetails<KotlinMultiplatformCommonOptions>) else -> KotlinCommonCompilation(compilationDetails as CompilationDetails<KotlinMultiplatformCommonOptions>)
@@ -158,12 +158,12 @@ private fun <T> getHostSpecificElements(
): Set<T> = fragments.filterTo(mutableSetOf()) { isNativeShared(it) && isHostSpecificKonanTargetsSet(getKonanTargets(it)) } ): Set<T> = fragments.filterTo(mutableSetOf()) { isNativeShared(it) && isHostSpecificKonanTargetsSet(getKonanTargets(it)) }
internal fun getHostSpecificFragments( internal fun getHostSpecificFragments(
module: KotlinGradleModule module: KpmGradleModule
): Set<KotlinGradleFragment> = getHostSpecificElements<KotlinGradleFragment>( ): Set<KpmGradleFragment> = getHostSpecificElements<KpmGradleFragment>(
module.fragments, module.fragments,
isNativeShared = { it.isNativeShared() }, isNativeShared = { it.isNativeShared() },
getKonanTargets = { getKonanTargets = {
val nativeVariants = module.variantsContainingFragment(it).filterIsInstance<KotlinNativeVariantInternal>() val nativeVariants = module.variantsContainingFragment(it).filterIsInstance<KpmNativeVariantInternal>()
nativeVariants.mapTo(mutableSetOf()) { it.konanTarget } nativeVariants.mapTo(mutableSetOf()) { it.konanTarget }
} }
) )
@@ -450,7 +450,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
it.dependsOn(compileTaskProvider) it.dependsOn(compileTaskProvider)
} }
} }
val shouldAddCompileOutputsToElements = compilation.owner is KotlinGradleVariant || compilation.isMainCompilationData() val shouldAddCompileOutputsToElements = compilation.owner is KpmGradleVariant || compilation.isMainCompilationData()
if (shouldAddCompileOutputsToElements) { if (shouldAddCompileOutputsToElements) {
createRegularKlibArtifact(compilation, compileTaskProvider) createRegularKlibArtifact(compilation, compileTaskProvider)
} }
@@ -536,7 +536,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
private val KotlinNativeCompilationData<*>.apiElementsConfigurationName: String private val KotlinNativeCompilationData<*>.apiElementsConfigurationName: String
get() = when (val dataOwner = owner) { get() = when (val dataOwner = owner) {
is KotlinGradleVariant -> dataOwner.apiElementsConfiguration.name is KpmGradleVariant -> dataOwner.apiElementsConfiguration.name
is KotlinTarget -> dataOwner.apiElementsConfigurationName is KotlinTarget -> dataOwner.apiElementsConfigurationName
else -> error("unexpected owner of $this") else -> error("unexpected owner of $this")
} }
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.gradle.utils.filesProvider
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.gradle.utils.outputFilesProvider import org.jetbrains.kotlin.gradle.utils.outputFilesProvider
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
import java.io.File import java.io.File
import java.util.concurrent.Callable import java.util.concurrent.Callable
import javax.inject.Inject import javax.inject.Inject
@@ -104,7 +104,7 @@ internal open class CInteropMetadataDependencyTransformationTask @Inject constru
@Suppress("unused") @Suppress("unused")
class ChooseVisibleSourceSetProjection( class ChooseVisibleSourceSetProjection(
@Input val dependencyModuleIdentifiers: List<KotlinModuleIdentifier>, @Input val dependencyModuleIdentifiers: List<KpmModuleIdentifier>,
@Nested val projectStructureMetadata: KotlinProjectStructureMetadata, @Nested val projectStructureMetadata: KotlinProjectStructureMetadata,
@Input val visibleSourceSetsProvidingCInterops: Set<String> @Input val visibleSourceSetsProvidingCInterops: Set<String>
) { ) {

Some files were not shown because too many files have changed in this diff Show More