[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> {
override val owner: KotlinGradleVariant
override val owner: KpmGradleVariant
override val project: Project get() = owner.containingModule.project
@@ -68,4 +68,4 @@ interface KotlinVariantCompilationData<T : KotlinCommonOptions> : KotlinCompilat
get() = owner.platformType
override val ownModuleName: String
}
}
@@ -12,16 +12,16 @@ import org.gradle.api.Project
import org.gradle.api.file.SourceDirectorySet
import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
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.tooling.core.MutableExtras
import org.jetbrains.kotlin.tooling.core.closure
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 containingModule: KotlinGradleModule
override val containingModule: KpmGradleModule
override fun getName(): String = fragmentName
@@ -32,11 +32,17 @@ interface KotlinGradleFragment : KotlinModuleFragment, HasKotlinDependencies, Ko
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?>) =
dependencies f@{ project.configure(this@f, configureClosure) }
@@ -63,14 +69,8 @@ interface KotlinGradleFragment : KotlinModuleFragment, HasKotlinDependencies, Ko
listOf(transitiveApiConfiguration.name, transitiveImplementationConfiguration.name)
}
val KotlinGradleFragment.withRefinesClosure: Set<KotlinGradleFragment>
get() = this.withClosure { it.directRefinesDependencies }
val KotlinGradleFragment.refinesClosure: Set<KotlinGradleFragment>
get() = this.closure { it.directRefinesDependencies }
val KotlinGradleFragment.path: String
val KpmGradleFragment.path: String
get() = "${project.path}/${containingModule.name}/$fragmentName"
val KotlinGradleFragment.containingVariants: Set<KotlinGradleVariant>
get() = containingModule.variantsContainingFragment(this).map { it as KotlinGradleVariant }.toSet()
val KpmGradleFragment.containingVariants: Set<KpmGradleVariant>
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.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
import org.jetbrains.kotlin.project.model.KotlinModule
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier
import org.jetbrains.kotlin.project.model.KpmModule
import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
import org.jetbrains.kotlin.project.model.KpmCompilerPlugin
interface KotlinGradleModule : KotlinModule, Named, HasKotlinDependencies {
interface KpmGradleModule : KpmModule, Named, HasKotlinDependencies {
val project: Project
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?
override val variants: NamedDomainObjectSet<KotlinGradleVariant>
override val variants: NamedDomainObjectSet<KpmGradleVariant>
override val plugins: Set<KpmCompilerPlugin>
@@ -34,7 +34,7 @@ interface KotlinGradleModule : KotlinModule, Named, HasKotlinDependencies {
fun makePublic()
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 TEST_MODULE_NAME = "test"
@@ -47,10 +47,10 @@ interface KotlinGradleModule : KotlinModule, Named, HasKotlinDependencies {
// DSL
val common: KotlinGradleFragment
get() = fragments.getByName(KotlinGradleFragment.COMMON_FRAGMENT_NAME)
val common: KpmGradleFragment
get() = fragments.getByName(KpmGradleFragment.COMMON_FRAGMENT_NAME)
fun common(configure: KotlinGradleFragment.() -> Unit) =
fun common(configure: KpmGradleFragment.() -> Unit) =
common.configure()
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.jetbrains.kotlin.gradle.plugin.KotlinCompilationOutput
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
// TODO generalize with KotlinCompilation?
@@ -33,7 +33,7 @@ interface KotlinGradleVariant : KotlinGradleFragment, KotlinModuleVariant {
val gradleVariantNames: Set<String>
}
interface KotlinGradleVariantWithRuntime : KotlinGradleVariant {
interface KpmGradleVariantWithRuntime : KpmGradleVariant {
// TODO deduplicate with KotlinCompilation?
val runtimeDependenciesConfiguration: Configuration
@@ -45,7 +45,7 @@ interface KotlinGradleVariantWithRuntime : KotlinGradleVariant {
val runtimeElementsConfiguration: Configuration
}
interface KotlinNativeVariant : KotlinGradleVariant {
interface KpmNativeVariant : KpmGradleVariant {
override val platformType: KotlinPlatformType
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.serialize
import org.jetbrains.kotlin.gradle.plugin.KotlinPm20PluginWrapper
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinIosX64Variant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinLinuxX64Variant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmIosX64Variant
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.jvm
import org.jetbrains.kotlin.tooling.core.extrasKeyOf
@@ -49,8 +49,8 @@ class BackwardsCompatibilityDeserializationTest {
kotlinExtension.mainAndTest {
jvm
val native = fragments.create("native")
val linux = fragments.create<KotlinLinuxX64Variant>("linuxX64")
val ios = fragments.create<KotlinIosX64Variant>("iosX64")
val linux = fragments.create<KpmLinuxX64Variant>("linuxX64")
val ios = fragments.create<KpmIosX64Variant>("iosX64")
native.refines(common)
linux.refines(native)
ios.refines(native)
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.gradle
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.Companion.taskNameForKotlinModule
import org.jetbrains.kotlin.konan.target.KonanTarget
@@ -29,7 +29,7 @@ class KotlinToolingMetadataMppIT : BaseGradleIT() {
private val buildKotlinToolingMetadataTaskName get() =
if (isKpmModelMappingEnabled) {
taskNameForKotlinModule(KotlinGradleModule.MAIN_MODULE_NAME)
taskNameForKotlinModule(KpmGradleModule.MAIN_MODULE_NAME)
} else {
BuildKotlinToolingMetadataTask.defaultTaskName
}
@@ -122,7 +122,7 @@ class KotlinToolingMetadataMppIT : BaseGradleIT() {
with(transformProjectWithPluginsDsl("kpm-multi-module-published")) {
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 }
assertEquals(KonanTarget.LINUX_X64.name, nativeTarget.extras.native?.konanTarget)
},
@@ -17,12 +17,12 @@ kotlin {
// feel free to add more modules, variants and fragments
mainAndTest {
jvm
val linuxX64 by fragments.creating(KotlinLinuxX64Variant::class)
val linuxX64 by fragments.creating(KpmLinuxX64Variant::class)
}
val secondaryModule by modules.creating {
jvm
val linuxArm64 by fragments.creating(KotlinLinuxArm64Variant::class)
val linuxArm64 by fragments.creating(KpmLinuxArm64Variant::class)
makePublic()
}
@@ -34,7 +34,7 @@ kotlin {
val integrationTest by modules.creating {
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 forNativeMetadataCompilation(fragment: KotlinModuleFragment) = pluginData()
override fun forPlatformCompilation(variant: KotlinModuleVariant) = pluginData()
override fun forMetadataCompilation(fragment: KpmFragment) = pluginData()
override fun forNativeMetadataCompilation(fragment: KpmFragment) = pluginData()
override fun forPlatformCompilation(variant: KpmVariant) = pluginData()
}
class GradleKpmPluginWithTransientPluginOptions : GradleKpmCompilerPlugin {
@@ -6,13 +6,13 @@
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 java.io.File
import java.io.Serializable
internal val androidDslKey = extrasKeyOf<AndroidDsl>()
val KotlinGradleFragment.androidDsl: AndroidDsl? get() = this.extras[androidDslKey]
val KpmGradleFragment.androidDsl: AndroidDsl? get() = this.extras[androidDslKey]
class AndroidDsl : Serializable {
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.mpp.pm20.*
fun KotlinGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
val androidOutgoingArtifacts = FragmentArtifacts<KotlinJvmVariant> {
fun KpmGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
val androidOutgoingArtifacts = FragmentArtifacts<KpmJvmVariant> {
variants.create("classes") { variant ->
variant.attributes.attribute(AndroidArtifacts.ARTIFACT_TYPE, AndroidArtifacts.ArtifactType.CLASSES_JAR.type)
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(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(
/* Only swap out configuration that is used. Default setup shall still be applied */
compileDependencies = (DefaultKotlinCompileDependenciesDefinition +
FragmentAttributes<KotlinGradleFragment> {
FragmentAttributes<KpmGradleFragment> {
namedAttribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, TargetJvmEnvironment.ANDROID)
attribute(KotlinPlatformType.attribute, KotlinPlatformType.androidJvm)
})
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.gradle.android
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentInternal
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragmentInternal
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 ->
fragment.refines(common)
}) as KotlinGradleFragmentInternal
}) as KpmGradleFragmentInternal
@@ -5,12 +5,12 @@
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
val KotlinPm20ProjectExtension.instrumentedTest
get() = modules.maybeCreate("instrumentedTest")
fun KotlinPm20ProjectExtension.instrumentedTest(configure: KotlinGradleModule.() -> Unit) {
fun KotlinPm20ProjectExtension.instrumentedTest(configure: KpmGradleModule.() -> Unit) {
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.KotlinWithJavaTarget
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.statistics.KotlinBuildStatsService
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.tasks.CompileUsingKotlinDaemon
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.lowerCamelCaseName
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? =
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.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
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.kpmModules
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
@@ -134,8 +134,8 @@ internal fun configureStdlibDefaultDependency(project: Project) = with(project)
private fun addStdlibToKpmProject(
project: Project
) {
project.kpmModules.matching { it.name == KotlinGradleModule.MAIN_MODULE_NAME }.configureEach { main ->
main.fragments.matching { it.name == KotlinGradleFragment.COMMON_FRAGMENT_NAME }.configureEach { common ->
project.kpmModules.matching { it.name == KpmGradleModule.MAIN_MODULE_NAME }.configureEach { main ->
main.fragments.matching { it.name == KpmGradleFragment.COMMON_FRAGMENT_NAME }.configureEach { common ->
common.dependencies {
api(project.kotlinDependency("kotlin-stdlib-common", project.topLevelExtension.coreLibrariesVersion))
}
@@ -22,16 +22,15 @@ val KotlinPm20ProjectExtension.ideaKotlinProjectModelBuilder: IdeaKotlinProjectM
get() = this.ideaKotlinProjectModelBuilder
@ExternalVariantApi
fun KotlinGradleModule.createExternalJvmVariant(
fun KpmGradleModule.createExternalJvmVariant(
name: String,
config: KotlinJvmVariantConfig
): KotlinJvmVariant {
): KpmJvmVariant {
val variant = KotlinJvmVariantFactory(this, config).create(name)
fragments.add(variant)
return variant
}
@ExternalVariantApi
val KotlinGradleVariantInternal.compilationData
val KpmGradleVariantInternal.compilationData
get() = this.compilationData
@@ -35,7 +35,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
private val additionalDependencies = mutableListOf<IdeaKotlinDependencyResolver>()
@ExternalVariantPlatformDependencyResolutionDsl
var platformResolutionAttributes: FragmentAttributes<KotlinGradleFragment>? = null
var platformResolutionAttributes: FragmentAttributes<KpmGradleFragment>? = null
@ExternalVariantPlatformDependencyResolutionDsl
class ArtifactViewDslHandle(
@@ -43,10 +43,10 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
var binaryType: String
) {
@ExternalVariantPlatformDependencyResolutionDsl
var attributes: FragmentAttributes<KotlinGradleFragment> = FragmentAttributes { }
var attributes: FragmentAttributes<KpmGradleFragment> = FragmentAttributes { }
@ExternalVariantPlatformDependencyResolutionDsl
fun attributes(setAttributes: KotlinGradleFragmentConfigurationAttributesContext<KotlinGradleFragment>.() -> Unit) {
fun attributes(setAttributes: KotlinGradleFragmentConfigurationAttributesContext<KpmGradleFragment>.() -> Unit) {
attributes += FragmentAttributes(setAttributes)
}
}
@@ -64,7 +64,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
@ExternalVariantPlatformDependencyResolutionDsl
fun withPlatformResolutionAttributes(
setAttributes: KotlinGradleFragmentConfigurationAttributesContext<KotlinGradleFragment>.() -> Unit
setAttributes: KotlinGradleFragmentConfigurationAttributesContext<KpmGradleFragment>.() -> Unit
) {
val additionalAttributes = FragmentAttributes(setAttributes)
this.platformResolutionAttributes = platformResolutionAttributes?.plus(additionalAttributes) ?: additionalAttributes
@@ -76,7 +76,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
}
@ExternalVariantPlatformDependencyResolutionDsl
fun additionalDependencies(dependencyProvider: (KotlinGradleFragment) -> List<IdeaKotlinDependency>) {
fun additionalDependencies(dependencyProvider: (KpmGradleFragment) -> List<IdeaKotlinDependency>) {
this.additionalDependencies += IdeaKotlinDependencyResolver { fragment -> dependencyProvider(fragment).toSet() }
}
@@ -130,7 +130,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
return parentConstraint and this.constraint
}
private fun buildPlatformResolutionAttributes(): FragmentAttributes<KotlinGradleFragment>? {
private fun buildPlatformResolutionAttributes(): FragmentAttributes<KpmGradleFragment>? {
val parentAttributes = parent?.buildPlatformResolutionAttributes() ?: return this.platformResolutionAttributes
return parentAttributes + (this.platformResolutionAttributes ?: return parentAttributes)
}
@@ -5,7 +5,7 @@
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.
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment
* that the dependency resolution result is final.
*/
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 ->
@@ -5,12 +5,12 @@
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
internal object IdeaKotlinDependencyLogger : IdeaKotlinDependencyEffect {
override fun invoke(
fragment: KotlinGradleFragment, dependencies: Set<IdeaKotlinDependency>
fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
) {
val fragmentPathRegex = fragment.project.properties["idea.kotlin.log.dependencies"]?.toString() ?: return
if (!fragment.path.matches(Regex(fragmentPathRegex))) return
@@ -5,13 +5,13 @@
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 resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency>
fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency>
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(
val children: List<IdeaKotlinDependencyResolver>
) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> {
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
return children.flatMap { child -> child.resolve(fragment) }.toSet()
}
}
@@ -5,7 +5,7 @@
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.
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment
*/
fun interface IdeaKotlinDependencyTransformer {
fun transform(
fragment: KotlinGradleFragment, dependencies: Set<IdeaKotlinDependency>
fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
): Set<IdeaKotlinDependency>
}
@@ -54,7 +54,7 @@ private class CompositeIdeaKotlinDependencyTransformer(
val transformers: List<IdeaKotlinDependencyTransformer>
) : IdeaKotlinDependencyTransformer {
override fun transform(
fragment: KotlinGradleFragment, dependencies: Set<IdeaKotlinDependency>
fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
): Set<IdeaKotlinDependency> {
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.tooling.core.emptyExtras
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinFragment(fragment: KotlinGradleFragment): IdeaKotlinFragment {
return if (fragment is KotlinGradleVariant) buildIdeaKotlinVariant(fragment)
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinFragment(fragment: KpmGradleFragment): IdeaKotlinFragment {
return if (fragment is KpmGradleVariant) buildIdeaKotlinVariant(fragment)
else buildIdeaKotlinFragment(fragment)
}
private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragment: KotlinGradleFragment): IdeaKotlinFragment {
private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragment: KpmGradleFragment): IdeaKotlinFragment {
return IdeaKotlinFragmentImpl(
coordinates = IdeaKotlinFragmentCoordinates(fragment),
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(
fragment = buildIdeaKotlinFragment(variant),
platform = IdeaKotlinPlatform(variant),
@@ -5,9 +5,9 @@
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(
module = IdeaKotlinModuleCoordinates(fragment.containingModule),
fragmentName = fragment.name
@@ -8,22 +8,22 @@ package org.jetbrains.kotlin.gradle.kpm.idea
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
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.KotlinGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule.Companion.moduleName
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
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.toModuleDependency
internal class IdeaKotlinGranularFragmentDependencyResolver(
private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory
) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> {
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
.filterIsInstance<ChooseVisibleSourceSets>()
.flatMap { resolution -> resolve(fragment, resolution) }
.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 kotlinModuleIdentifier = resolution.dependency.toModuleDependency().moduleIdentifier
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.ProjectMetadataProvider
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.KotlinGradleModule.Companion.moduleName
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
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.utils.withTemporaryDirectory
internal class IdeaKotlinMetadataBinaryDependencyResolver(
private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory
) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> {
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
.filterIsInstance<ChooseVisibleSourceSets>()
.flatMap { resolution -> resolve(fragment, resolution) }
.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 kotlinModuleIdentifier = resolution.dependency.toModuleDependency().moduleIdentifier
@@ -5,18 +5,18 @@
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.utils.addToStdlib.ifNotEmpty
internal object IdeaKotlinMissingFileDependencyLogger : IdeaKotlinDependencyEffect {
override fun invoke(fragment: KotlinGradleFragment, dependencies: Set<IdeaKotlinDependency>) {
override fun invoke(fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>) {
dependencies.filterIsInstance<IdeaKotlinResolvedBinaryDependency>()
.filter { !it.binaryFile.exists() }
.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")
dependencies.forEach { dependency ->
appendLine(dependency.binaryFile)
@@ -5,9 +5,9 @@
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(
coordinates = IdeaKotlinModuleCoordinates(module),
fragments = module.fragments.toList().map { fragment -> IdeaKotlinFragment(fragment) }
@@ -5,10 +5,10 @@
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
internal fun IdeaKotlinModuleCoordinates(module: KotlinGradleModule): IdeaKotlinModuleCoordinates {
internal fun IdeaKotlinModuleCoordinates(module: KpmGradleModule): IdeaKotlinModuleCoordinates {
return IdeaKotlinModuleCoordinatesImpl(
buildId = module.project.currentBuildId().name,
projectPath = module.project.path,
@@ -10,8 +10,8 @@ import org.jetbrains.kotlin.commonizer.KonanDistribution
import org.jetbrains.kotlin.commonizer.platformLibsDir
import org.jetbrains.kotlin.compilerRunner.konanHome
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinNativeVariantInternal
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmNativeVariantInternal
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants
import org.jetbrains.kotlin.library.ToolingSingleFileKlibResolveStrategy
import org.jetbrains.kotlin.library.resolveSingleFileKlib
@@ -20,9 +20,9 @@ import org.jetbrains.kotlin.library.uniqueName
import java.io.File
internal class IdeaKotlinNativePlatformDependencyResolver : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> {
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
val konanTargets = fragment.containingVariants
.map { it as? KotlinNativeVariantInternal ?: return emptySet() }
.map { it as? KpmNativeVariantInternal ?: return emptySet() }
.map { it.konanTarget }
.toSet()
@@ -9,10 +9,10 @@ import org.jetbrains.kotlin.commonizer.KonanDistribution
import org.jetbrains.kotlin.commonizer.stdlib
import org.jetbrains.kotlin.compilerRunner.konanHome
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 {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> {
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
return setOf(
IdeaKotlinResolvedBinaryDependencyImpl(
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.mpp.MetadataDependencyResolution.KeepOriginalDependency
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
internal class IdeaKotlinOriginalMetadataDependencyResolver(
private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory
) : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> {
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
val dependencyIdentifiers = fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
.filterIsInstance<KeepOriginalDependency>()
.mapNotNull { resolution -> resolution.dependency.id as? ModuleComponentIdentifier }
@@ -14,10 +14,10 @@ import org.jetbrains.kotlin.konan.target.HostManager
@Suppress("unused")
/* 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) {
is KotlinJvmVariant -> return IdeaKotlinPlatform.jvm(variant.compilationData.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name)
is KotlinNativeVariantInternal -> return IdeaKotlinPlatform.native(variant.konanTarget.name)
is KpmJvmVariant -> return IdeaKotlinPlatform.jvm(variant.compilationData.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name)
is KpmNativeVariantInternal -> return IdeaKotlinPlatform.native(variant.konanTarget.name)
is LegacyMappedVariant -> when (val compilation = variant.compilation) {
is KotlinJvmCompilation -> 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.
* '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.
* 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]
*/
class IdeaKotlinPlatformDependencyResolver(
@@ -30,28 +30,28 @@ class IdeaKotlinPlatformDependencyResolver(
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.
* @param artifactViewAttributes: Additional attributes that will be used to create an [ArtifactView] for resolving the dependencies.
*/
data class Variant(
internal val artifactViewAttributes: FragmentAttributes<KotlinGradleFragment> = FragmentAttributes { }
internal val artifactViewAttributes: FragmentAttributes<KpmGradleFragment> = FragmentAttributes { }
) : 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.
* @param platformResolutionAttributes: Attributes describing how to resolve platform artifacts in general.
* @param artifactViewAttributes: Additional attributes that will be used to create an [ArtifactView] for
* resolving the dependencies
*/
data class PlatformFragment(
internal val platformResolutionAttributes: FragmentAttributes<KotlinGradleFragment>,
internal val artifactViewAttributes: FragmentAttributes<KotlinGradleFragment> = FragmentAttributes { },
internal val platformResolutionAttributes: FragmentAttributes<KpmGradleFragment>,
internal val artifactViewAttributes: FragmentAttributes<KpmGradleFragment> = FragmentAttributes { },
) : ArtifactResolution()
}
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinBinaryDependency> {
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinBinaryDependency> {
val artifacts = artifactResolution.createArtifactView(fragment)?.artifacts ?: return emptySet()
val unresolvedDependencies = artifacts.failures
@@ -87,15 +87,15 @@ private val ComponentIdentifier.ideaKotlinBinaryCoordinates: IdeaKotlinBinaryCoo
else -> null
}
private fun ArtifactResolution.createArtifactView(fragment: KotlinGradleFragment): ArtifactView? {
private fun ArtifactResolution.createArtifactView(fragment: KpmGradleFragment): ArtifactView? {
return when (this) {
is ArtifactResolution.Variant -> createVariantArtifactView(fragment)
is ArtifactResolution.PlatformFragment -> createPlatformFragmentArtifactView(fragment)
}
}
private fun ArtifactResolution.Variant.createVariantArtifactView(fragment: KotlinGradleFragment): ArtifactView? {
if (fragment !is KotlinGradleVariant) return null
private fun ArtifactResolution.Variant.createVariantArtifactView(fragment: KpmGradleFragment): ArtifactView? {
if (fragment !is KpmGradleVariant) return null
return fragment.compileDependenciesConfiguration.incoming.artifactView { view ->
view.isLenient = true
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()
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.plugin.KotlinPlatformType.native
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.containingVariants
import org.jetbrains.kotlin.project.model.KotlinModuleVariant
import org.jetbrains.kotlin.project.model.KpmVariant
import java.io.File
internal interface IdeaKotlinProjectModelBuildingContext {
@@ -94,11 +94,11 @@ interface IdeaKotlinProjectModelBuilder {
* Used for scoping [IdeaKotlinDependencyResolver], [IdeaKotlinDependencyTransformer] and [IdeaKotlinDependencyEffect]
*/
fun interface FragmentConstraint {
operator fun invoke(fragment: KotlinGradleFragment): Boolean
operator fun invoke(fragment: KpmGradleFragment): Boolean
companion object {
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 } } }
}
}
@@ -5,14 +5,13 @@
package org.jetbrains.kotlin.gradle.kpm.idea
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.refinesClosure
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
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()
private fun createRefinesDependency(fragment: KotlinGradleFragment): IdeaKotlinDependency {
private fun createRefinesDependency(fragment: KpmGradleFragment): IdeaKotlinDependency {
return IdeaKotlinFragmentDependencyImpl(
type = IdeaKotlinFragmentDependency.Type.Refines,
coordinates = IdeaKotlinFragmentCoordinates(fragment)
@@ -5,7 +5,7 @@
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
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")
override fun transform(
fragment: KotlinGradleFragment,
fragment: KpmGradleFragment,
dependencies: Set<IdeaKotlinDependency>
): Set<IdeaKotlinDependency> {
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.language.base.artifact.SourcesArtifact
import org.gradle.language.java.artifact.JavadocArtifact
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleVariant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleVariant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName
internal class IdeaKotlinSourcesAndDocumentationResolver : IdeaKotlinDependencyResolver {
override fun resolve(fragment: KotlinGradleFragment): Set<IdeaKotlinDependency> {
if (fragment is KotlinGradleVariant) {
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
if (fragment is KpmGradleVariant) {
return resolve(fragment.project, fragment.compileDependenciesConfiguration)
}
@@ -5,11 +5,11 @@
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 {
override fun transform(
fragment: KotlinGradleFragment, dependencies: Set<IdeaKotlinDependency>
fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
): Set<IdeaKotlinDependency> {
val sourcesAndDocumentationDependencies = dependencies
.filterIsInstance<IdeaKotlinResolvedBinaryDependency>()
@@ -432,7 +432,7 @@ internal open class MetadataMappedCompilationDetails<T : KotlinCommonOptions>(
}
internal open class VariantMappedCompilationDetails<T : KotlinCommonOptions>(
open val variant: KotlinGradleVariantInternal,
open val variant: KpmGradleVariantInternal,
override val target: KotlinTarget
) : CompilationDetails<T> {
@@ -469,7 +469,7 @@ internal open class VariantMappedCompilationDetails<T : KotlinCommonOptions>(
}
internal open class VariantMappedCompilationDetailsWithRuntime<T : KotlinCommonOptions>(
override val variant: KotlinGradleVariantWithRuntimeInternal,
override val variant: KpmGradleVariantWithRuntimeInternal,
target: KotlinTarget
) : VariantMappedCompilationDetails<T>(variant, target),
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.KotlinDependencyHandler
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.targets.js.npm.NpmDependency
import org.jetbrains.kotlin.gradle.targets.js.npm.directoryNpmDependency
@@ -74,7 +74,7 @@ class DefaultKotlinDependencyHandler(
dependencyNotation: Any
): Dependency? {
val dependency = when (dependencyNotation) {
is KotlinGradleModule -> project.dependencies.create(dependencyNotation.project).apply {
is KpmGradleModule -> project.dependencies.create(dependencyNotation.project).apply {
(this as ModuleDependency).capabilities {
if (dependencyNotation.moduleClassifier != null) {
it.requireCapability(ComputedCapability.fromModule(dependencyNotation))
@@ -26,33 +26,33 @@ import org.jetbrains.kotlin.gradle.utils.getOrPutRootProjectProperty
import org.jetbrains.kotlin.project.model.*
class ProjectStructureMetadataModuleBuilder {
private val modulesCache = mutableMapOf<KotlinModuleIdentifier, KotlinModule>()
private val modulesCache = mutableMapOf<KpmModuleIdentifier, KpmModule>()
private fun buildModuleFromProjectStructureMetadata(
component: ResolvedComponentResult,
metadata: KotlinProjectStructureMetadata
): KotlinModule {
val moduleData = BasicKotlinModule(component.toSingleModuleIdentifier()).apply {
): KpmModule {
val moduleData = KpmBasicModule(component.toSingleModuleIdentifier()).apply {
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 })
fragments.add(BasicKotlinModuleFragment(this@apply, sourceSetName))
fragments.add(KpmBasicFragment(this@apply, sourceSetName))
return fragmentByName(sourceSetName)
}
metadata.sourceSetNamesByVariantName.forEach { (variantName, sourceSets) ->
val variant = fragmentByName(variantName)
sourceSets.forEach { sourceSetName ->
variant.directRefinesDependencies.add(fragment(sourceSetName))
variant.declaredRefinesDependencies.add(fragment(sourceSetName))
}
}
metadata.sourceSetModuleDependencies.forEach { (sourceSetName, dependencies) ->
val fragment = fragment(sourceSetName)
dependencies.forEach { dependency ->
fragment.declaredModuleDependencies.add(
KotlinModuleDependency(
MavenModuleIdentifier(
KpmModuleDependency(
KpmMavenModuleIdentifier(
dependency.groupId.orEmpty(),
dependency.moduleId,
null /* TODO */
@@ -65,18 +65,18 @@ class ProjectStructureMetadataModuleBuilder {
metadata.sourceSetsDependsOnRelation.forEach { (depending, dependencies) ->
val dependingFragment = fragment(depending)
dependencies.forEach { dependency ->
dependingFragment.directRefinesDependencies.add(fragment(dependency))
dependingFragment.declaredRefinesDependencies.add(fragment(dependency))
}
}
}
return ExternalImportedKotlinModule(
return KpmExternalImportedModule(
moduleData,
metadata,
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()
return modulesCache.getOrPut(moduleId) {
buildModuleFromProjectStructureMetadata(
@@ -123,7 +123,7 @@ private fun detectModules(targets: Iterable<KotlinTarget>, sourceSets: Iterable<
class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExplicit: Boolean) {
private fun getModulesFromPm20Project(project: Project) = project.kpmModules.toList()
fun buildModulesFromProject(project: Project): List<KotlinModule> {
fun buildModulesFromProject(project: Project): List<KpmModule> {
if (project.hasKpmModel)
return getModulesFromPm20Project(project)
@@ -144,19 +144,19 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
.flatMap { component -> (component as? KotlinVariant)?.usages.orEmpty() }
}.groupBy { it.compilation }
val moduleByFragment = mutableMapOf<KotlinModuleFragment, KotlinModule>()
val moduleByFragment = mutableMapOf<KpmFragment, KpmModule>()
val result = moduleCompilationCluster.entries.map { (classifier, compilationsToInclude) ->
val sourceSetsToInclude = compilationsToInclude.flatMapTo(mutableSetOf()) { it.allKotlinSourceSets }
val moduleIdentifier = LocalModuleIdentifier(
val moduleIdentifier = KpmLocalModuleIdentifier(
project.currentBuildId().name,
project.path,
classifier.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }
)
BasicKotlinModule(moduleIdentifier).apply {
val variantToCompilation = mutableMapOf<BasicKotlinModuleFragment, KotlinCompilation<*>>()
KpmBasicModule(moduleIdentifier).apply {
val variantToCompilation = mutableMapOf<KpmBasicFragment, KotlinCompilation<*>>()
compilationsToInclude.forEach { compilation ->
// 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)
variantNames.forEach { variantName ->
val variant = BasicKotlinModuleVariant(this@apply, variantName, DefaultLanguageSettingsBuilder())
val variant = KpmBasicVariant(this@apply, variantName, DefaultLanguageSettingsBuilder())
moduleByFragment[variant] = this@apply
variantToCompilation[variant] = compilation
fragments.add(variant)
@@ -181,8 +181,8 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
}
// Once all fragments are created, add dependencies between them
sourceSetsToInclude.forEach { sourceSet ->
val existingVariant = fragments.filterIsInstance<BasicKotlinModuleVariant>().find { it.fragmentName == sourceSet.name }
val fragment = existingVariant ?: BasicKotlinModuleFragment(this@apply, sourceSet.name, sourceSet.languageSettings).also { fragments.add(it) }
val existingVariant = fragments.filterIsInstance<KpmBasicVariant>().find { it.fragmentName == sourceSet.name }
val fragment = existingVariant ?: KpmBasicFragment(this@apply, sourceSet.name, sourceSet.languageSettings).also { fragments.add(it) }
moduleByFragment[fragment] = this@apply
fragment.kotlinSourceRoots = sourceSet.kotlin.sourceDirectories.toList()
@@ -197,7 +197,7 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
?: variantToCompilation.getValue(fragment).defaultSourceSet
sourceSet.dependsOn.forEach { dependency ->
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)
compilation.associateWith.forEach { associate ->
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)
getVisibleSourceSetsFromAssociateCompilations(project, sourceSet).forEach { dependency ->
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(
project: Project
): KotlinModuleDependency {
return KotlinModuleDependency(
): KpmModuleDependency {
return KpmModuleDependency(
when (this) {
is ProjectDependency ->
LocalModuleIdentifier(
KpmLocalModuleIdentifier(
project.currentBuildId().name,
dependencyProject.path,
moduleClassifiersFromCapabilities(requestedCapabilities).single() // FIXME multiple capabilities
)
is ModuleDependency ->
MavenModuleIdentifier(
KpmMavenModuleIdentifier(
group.orEmpty(),
name,
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 }
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() }
return resultCache.getOrPut(dependencyModule) { actualResolver.getChosenVariant(requestingVariant, dependencyModule) }
}
}
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
// unrequested dependency. This workaround is needed for synthetic modules which were not produced from module metadata, so maybe
// those modules should be marked somehow
if (dependencyModule is ExternalPlainKotlinModule) {
if (dependencyModule is KpmExternalPlainModule) {
return VariantResolution.fromMatchingVariants(
requestingVariant,
dependencyModule,
@@ -283,7 +283,7 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
)
}
if (requestingVariant !is KotlinGradleVariant) {
if (requestingVariant !is KpmGradleVariant) {
return VariantResolution.Unknown(requestingVariant, dependencyModule)
}
@@ -300,7 +300,7 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
// FIXME check composite builds, it's likely that resolvedVariantProvider fails on them?
val resolvedGradleVariantName = resolvedVariantProvider.getResolvedVariantName(dependencyModuleId, compileClasspath)
val kotlinVariantName = when (dependencyModule) {
is KotlinGradleModule -> {
is KpmGradleModule -> {
dependencyModule.variants.singleOrNull { resolvedGradleVariantName in it.gradleVariantNames }?.name
?: return VariantResolution.Unknown(requestingVariant, dependencyModule)
}
@@ -315,10 +315,10 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
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 {
project.hasKpmModel -> {
(requestingVariant as KotlinGradleVariant).compileDependenciesConfiguration
(requestingVariant as KpmGradleVariant).compileDependenciesConfiguration
}
else -> {
val targets =
@@ -80,10 +80,10 @@ class KotlinMultiplatformPlugin : Plugin<Project> {
setupKpmModulesPublication(project)
registerDefaultVariantFactories(project)
with(project.kpmModules) {
create(KotlinGradleModule.MAIN_MODULE_NAME) {
create(KpmGradleModule.MAIN_MODULE_NAME) {
it.makePublic()
}
create(KotlinGradleModule.TEST_MODULE_NAME)
create(KpmGradleModule.TEST_MODULE_NAME)
}
}
@@ -282,7 +282,7 @@ internal fun applyUserDefinedAttributes(target: AbstractKotlinTarget) {
private fun applyUserDefinedAttributesWithKpm(
target: AbstractKotlinTarget,
) {
fun copyAttributesToVariant(variant: KotlinGradleVariant, from: AttributeContainer) {
fun copyAttributesToVariant(variant: KpmGradleVariant, from: AttributeContainer) {
variant.gradleVariantNames.forEach { configurationOrVariantName ->
val configuration = variant.project.configurations.findByName(configurationOrVariantName)
?: 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
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
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.Nested
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.withRefinesClosure
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope
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 }
fun <T> expandVariantKeys(map: Map<String, T>) =
@@ -202,7 +201,7 @@ internal fun buildProjectStructureMetadata(module: KotlinGradleModule): KotlinPr
val kotlinFragmentsPerKotlinVariant =
module.variants.associate { variant -> variant.name to variant.withRefinesClosure.map { it.name }.toSet() }
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 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.util.ComputedCapability
import org.jetbrains.kotlin.gradle.utils.getValue
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier
import org.jetbrains.kotlin.project.model.LocalModuleIdentifier
import org.jetbrains.kotlin.project.model.MavenModuleIdentifier
import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
import org.jetbrains.kotlin.project.model.KpmLocalModuleIdentifier
import org.jetbrains.kotlin.project.model.KpmMavenModuleIdentifier
internal object ModuleIds {
fun fromDependency(dependency: Dependency): ModuleDependencyIdentifier = when (dependency) {
@@ -71,9 +71,9 @@ internal object ModuleIds {
idOfRootModule(thisProject.project(projectPath))
// FIXME use capabilities to point to auxiliary modules
fun lossyFromModuleIdentifier(thisProject: Project, moduleIdentifier: KotlinModuleIdentifier): ModuleDependencyIdentifier {
fun lossyFromModuleIdentifier(thisProject: Project, moduleIdentifier: KpmModuleIdentifier): ModuleDependencyIdentifier {
when (moduleIdentifier) {
is LocalModuleIdentifier -> {
is KpmLocalModuleIdentifier -> {
check(moduleIdentifier.buildId == thisProject.currentBuildId().name)
val dependencyProject = thisProject.project(moduleIdentifier.projectId)
val topLevelExtension = dependencyProject.topLevelExtension
@@ -101,7 +101,7 @@ internal object ModuleIds {
)
return ChangingModuleDependencyIdentifier({ coordinatesProvider.group }, { coordinatesProvider.name })
}
is MavenModuleIdentifier -> {
is KpmMavenModuleIdentifier -> {
return ModuleDependencyIdentifier(moduleIdentifier.group, moduleIdentifier.name)
}
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.hasKpmModel
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.InputStream
import java.util.zip.ZipFile
@@ -25,7 +25,7 @@ sealed class MppDependencyProjectStructureMetadataExtractor {
}
internal class ProjectMppDependencyProjectStructureMetadataExtractor(
val moduleIdentifier: KotlinModuleIdentifier,
val moduleIdentifier: KpmModuleIdentifier,
val dependencyProject: Project
) : 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.ResolvedDependencyResult
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(
project: Project,
@@ -36,7 +36,7 @@ internal fun MppDependencyProjectStructureMetadataExtractor.Factory.create(
internal fun MppDependencyProjectStructureMetadataExtractor.Factory.create(
project: Project,
resolvedComponentResult: ResolvedComponentResult,
moduleIdentifier: KotlinModuleIdentifier,
moduleIdentifier: KpmModuleIdentifier,
configuration: Configuration
): MppDependencyProjectStructureMetadataExtractor? {
return create(
@@ -51,7 +51,7 @@ internal fun MppDependencyProjectStructureMetadataExtractor.Factory.create(
private fun MppDependencyProjectStructureMetadataExtractor.Factory.create(
resolvedMppVariantsProvider: ResolvedMppVariantsProvider,
moduleIdentifier: KotlinModuleIdentifier,
moduleIdentifier: KpmModuleIdentifier,
configuration: Configuration,
resolveViaAvailableAt: Boolean,
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.metadataCompilationRegistryByModuleId
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(
dependencyProject: Project,
moduleIdentifier: KotlinModuleIdentifier
moduleIdentifier: KpmModuleIdentifier
): ProjectMetadataProvider {
return ProjectMetadataProviderImpl(dependencyProject, moduleIdentifier)
}
private class ProjectMetadataProviderImpl(
private val dependencyProject: Project,
private val moduleIdentifier: KotlinModuleIdentifier
private val moduleIdentifier: KpmModuleIdentifier
) : ProjectMetadataProvider() {
override fun getSourceSetCompiledMetadata(sourceSetName: String): FileCollection {
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.usageByName
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
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].
* 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 {
if (configuration !in resolvedVariantsByConfiguration) {
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].
* If the [configuration] requests platform artifacts and not the common code metadata, then this function will resolve its
* dependencies to metadata separately. */
fun getHostSpecificMetadataArtifactByRootModule(rootModuleIdentifier: KotlinModuleIdentifier, configuration: Configuration): File? {
fun getHostSpecificMetadataArtifactByRootModule(rootModuleIdentifier: KpmModuleIdentifier, configuration: Configuration): File? {
val rootModuleEntry = getEntryForModule(rootModuleIdentifier)
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]. */
fun getResolvedArtifactByPlatformModule(moduleIdentifier: KotlinModuleIdentifier, configuration: Configuration): File? =
fun getResolvedArtifactByPlatformModule(moduleIdentifier: KpmModuleIdentifier, configuration: Configuration): File? =
getEntryForModule(moduleIdentifier).run {
if (configuration !in resolvedArtifactByConfiguration) {
resolveConfigurationAndSaveVariants(configuration, artifactResolutionMode = ArtifactResolutionMode.NORMAL)
@@ -77,10 +77,10 @@ internal class ResolvedMppVariantsProvider private constructor(private val proje
resolvedArtifactByConfiguration.getOrPut(configuration) { null }
}
private fun getEntryForModule(moduleIdentifier: KotlinModuleIdentifier) =
private fun getEntryForModule(moduleIdentifier: KpmModuleIdentifier) =
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()
@@ -211,12 +211,12 @@ internal class ResolvedMppVariantsProvider private constructor(private val proje
*/
private class ModuleEntry(
@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 resolvedArtifactByConfiguration: MutableMap<Configuration, File?> = HashMap()
val resolvedMetadataArtifactByConfiguration: MutableMap<Configuration, File?> = 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.utils.isGradleVersionAtLeast
val KotlinFragmentPlatformAttributes = FragmentAttributes<KotlinGradleVariant> {
val KotlinFragmentPlatformAttributes = FragmentAttributes<KpmGradleVariant> {
if (isGradleVersionAtLeast(7, 0) && fragment.platformType == KotlinPlatformType.jvm) {
namedAttribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, TargetJvmEnvironment.STANDARD_JVM)
}
@@ -28,26 +28,26 @@ val KotlinFragmentPlatformAttributes = FragmentAttributes<KotlinGradleVariant> {
attribute(KotlinPlatformType.attribute, fragment.platformType)
}
val KotlinFragmentConsumerApiUsageAttribute = FragmentAttributes<KotlinGradleVariant> {
val KotlinFragmentConsumerApiUsageAttribute = FragmentAttributes<KpmGradleVariant> {
attribute(USAGE_ATTRIBUTE, consumerApiUsage(project, fragment.platformType))
}
val KotlinFragmentProducerApiUsageAttribute = FragmentAttributes<KotlinGradleVariant> {
val KotlinFragmentProducerApiUsageAttribute = FragmentAttributes<KpmGradleVariant> {
attribute(USAGE_ATTRIBUTE, producerApiUsage(fragment.project, fragment.platformType))
}
val KotlinFragmentConsumerRuntimeUsageAttribute = FragmentAttributes<KotlinGradleVariant> {
val KotlinFragmentConsumerRuntimeUsageAttribute = FragmentAttributes<KpmGradleVariant> {
attribute(USAGE_ATTRIBUTE, consumerRuntimeUsage(fragment.project, fragment.platformType))
}
val KotlinFragmentProducerRuntimeUsageAttribute = FragmentAttributes<KotlinGradleVariant> {
val KotlinFragmentProducerRuntimeUsageAttribute = FragmentAttributes<KpmGradleVariant> {
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))
}
val KotlinFragmentKonanTargetAttribute = FragmentAttributes<KotlinNativeVariantInternal> {
val KotlinFragmentKonanTargetAttribute = FragmentAttributes<KpmNativeVariantInternal> {
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.*
internal fun resolvableMetadataConfiguration(
module: KotlinGradleModule
module: KpmGradleModule
) = module.project.configurations.getByName(module.resolvableMetadataConfigurationName)
internal fun configurationToResolveMetadataDependencies(project: Project, requestingModule: KotlinModule): Configuration =
internal fun configurationToResolveMetadataDependencies(project: Project, requestingModule: KpmModule): Configuration =
when {
project.hasKpmModel -> resolvableMetadataConfiguration(requestingModule as KotlinGradleModule)
project.hasKpmModel -> resolvableMetadataConfiguration(requestingModule as KpmGradleModule)
else -> resolvableMetadataConfiguration(
project,
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(
private val moduleResolver: ModuleDependencyResolver
) : KotlinDependencyGraphResolver {
class KpmGradleDependencyGraphResolver(
private val moduleResolver: KpmModuleDependencyResolver
) : KpmDependencyGraphResolver {
private fun configurationToResolve(requestingModule: KotlinGradleModule): Configuration =
private fun configurationToResolve(requestingModule: KpmGradleModule): Configuration =
configurationToResolveMetadataDependencies(requestingModule.project, requestingModule)
override fun resolveDependencyGraph(requestingModule: KotlinModule): DependencyGraphResolution {
if (requestingModule !is KotlinGradleModule)
return DependencyGraphResolution.Unknown(requestingModule)
override fun resolveDependencyGraph(requestingModule: KpmModule): KpmDependencyGraphResolution {
if (requestingModule !is KpmGradleModule)
return KpmDependencyGraphResolution.Unknown(requestingModule)
return resolveAsGraph(requestingModule)
}
private fun resolveAsGraph(requestingModule: KotlinGradleModule): GradleDependencyGraph {
val nodeByModuleId = mutableMapOf<KotlinModuleIdentifier, GradleDependencyGraphNode>()
private fun resolveAsGraph(requestingModule: KpmGradleModule): KpmGradleDependencyGraph {
val nodeByModuleId = mutableMapOf<KpmModuleIdentifier, GradleDependencyGraphNode>()
fun getKotlinModuleFromComponentResult(component: ResolvedComponentResult): KotlinModule =
fun getKotlinModuleFromComponentResult(component: ResolvedComponentResult): KpmModule =
moduleResolver.resolveDependency(requestingModule, component.toModuleDependency())
?: buildSyntheticPlainModule(
component,
component.variants.singleOrNull()?.displayName ?: "default",
)
fun nodeFromModule(componentResult: ResolvedComponentResult, kotlinModule: KotlinModule): GradleDependencyGraphNode {
val id = kotlinModule.moduleIdentifier
fun nodeFromModule(componentResult: ResolvedComponentResult, kpmModule: KpmModule): GradleDependencyGraphNode {
val id = kpmModule.moduleIdentifier
return nodeByModuleId.getOrPut(id) {
val metadataSourceComponent =
(kotlinModule as? ExternalImportedKotlinModule)
(kpmModule as? KpmExternalImportedModule)
?.takeIf { it.hasLegacyMetadataModule }
?.let { (componentResult.dependencies.singleOrNull() as? ResolvedDependencyResult)?.selected }
?: componentResult
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
.filterIsInstance<ResolvedDependencyResult>()
@@ -72,7 +72,7 @@ class GradleKotlinDependencyGraphResolver(
.flatMap { dependency -> dependency.requested.toModuleIdentifiers().map { id -> id to dependency.selected } }
.toMap()
val fragmentDependencies = kotlinModule.fragments.associateWith { it.declaredModuleDependencies }
val fragmentDependencies = kpmModule.fragments.associateWith { it.declaredModuleDependencies }
val nodeDependenciesMap = fragmentDependencies.mapValues { (_, deps) ->
deps.mapNotNull { resolvedComponentDependencies[it.moduleIdentifier] }.map {
@@ -82,7 +82,7 @@ class GradleKotlinDependencyGraphResolver(
}
GradleDependencyGraphNode(
kotlinModule,
kpmModule,
componentResult,
metadataSourceComponent,
nodeDependenciesMap
@@ -90,7 +90,7 @@ class GradleKotlinDependencyGraphResolver(
}
}
return GradleDependencyGraph(
return KpmGradleDependencyGraph(
requestingModule,
nodeFromModule(configurationToResolve(requestingModule).incoming.resolutionResult.root, requestingModule)
)
@@ -98,16 +98,16 @@ class GradleKotlinDependencyGraphResolver(
}
class GradleDependencyGraphNode(
override val module: KotlinModule,
override val module: KpmModule,
val selectedComponent: ResolvedComponentResult,
/** 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. */
val metadataSourceComponent: ResolvedComponentResult?,
override val dependenciesByFragment: Map<KotlinModuleFragment, Iterable<GradleDependencyGraphNode>>
) : DependencyGraphNode(module, dependenciesByFragment)
override val dependenciesByFragment: Map<KpmFragment, Iterable<GradleDependencyGraphNode>>
) : KpmDependencyGraphNode(module, dependenciesByFragment)
class GradleDependencyGraph(
override val requestingModule: KotlinGradleModule,
class KpmGradleDependencyGraph(
override val requestingModule: KpmGradleModule,
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.utils.getOrPutRootProjectProperty
import org.jetbrains.kotlin.project.model.*
import org.jetbrains.kotlin.project.model.KpmVariant
import java.util.*
class CachingModuleDependencyResolver(private val actualResolver: ModuleDependencyResolver) : ModuleDependencyResolver {
private val cacheByRequestingModule = WeakHashMap<KotlinModule, MutableMap<KotlinModuleDependency, KotlinModule?>>()
class KpmCachingModuleDependencyResolver(private val actualResolver: KpmModuleDependencyResolver) : KpmModuleDependencyResolver {
private val cacheByRequestingModule = WeakHashMap<KpmModule, MutableMap<KpmModuleDependency, KpmModule?>>()
private fun cacheForRequestingModule(requestingModule: KotlinModule) =
private fun cacheForRequestingModule(requestingModule: KpmModule) =
cacheByRequestingModule.getOrPut(requestingModule) { mutableMapOf() }
override fun resolveDependency(requestingModule: KotlinModule, moduleDependency: KotlinModuleDependency): KotlinModule? =
override fun resolveDependency(requestingModule: KpmModule, moduleDependency: KpmModuleDependency): KpmModule? =
cacheForRequestingModule(requestingModule).getOrPut(moduleDependency) {
actualResolver.resolveDependency(requestingModule, moduleDependency)
}
}
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)
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
// FIXME handle multi-component results
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) }
fun resolveModuleDependencyAsComponentResult(
requestingModule: KotlinGradleModule,
moduleDependency: KotlinModuleDependency
requestingModule: KpmGradleModule,
moduleDependency: KpmModuleDependency
): ResolvedComponentResult? =
getResultsForModule(requestingModule)[moduleDependency.moduleIdentifier]
@@ -61,14 +62,14 @@ open class GradleComponentResultCachingResolver {
}
}
class GradleModuleDependencyResolver(
class KpmGradleModuleDependencyResolver(
private val gradleComponentResultResolver: GradleComponentResultCachingResolver,
private val projectStructureMetadataModuleBuilder: ProjectStructureMetadataModuleBuilder,
private val projectModuleBuilder: GradleProjectModuleBuilder
) : ModuleDependencyResolver {
) : KpmModuleDependencyResolver {
override fun resolveDependency(requestingModule: KotlinModule, moduleDependency: KotlinModuleDependency): KotlinModule? {
require(requestingModule is KotlinGradleModule)
override fun resolveDependency(requestingModule: KpmModule, moduleDependency: KpmModuleDependency): KpmModule? {
require(requestingModule is KpmGradleModule)
val project = requestingModule.project
val component = gradleComponentResultResolver.resolveModuleDependencyAsComponentResult(requestingModule, moduleDependency)
@@ -97,14 +98,14 @@ class GradleModuleDependencyResolver(
}
companion object {
fun getForCurrentBuild(project: Project): ModuleDependencyResolver {
fun getForCurrentBuild(project: Project): KpmModuleDependencyResolver {
val extraPropertyName = "org.jetbrains.kotlin.dependencyResolution.moduleResolver.${project.getKotlinPluginVersion()}"
return project.getOrPutRootProjectProperty(extraPropertyName) {
val componentResultResolver = GradleComponentResultCachingResolver.getForCurrentBuild(project)
val metadataModuleBuilder = ProjectStructureMetadataModuleBuilder()
val projectModuleBuilder = GradleProjectModuleBuilder(true)
CachingModuleDependencyResolver(
GradleModuleDependencyResolver(componentResultResolver, metadataModuleBuilder, projectModuleBuilder)
KpmCachingModuleDependencyResolver(
KpmGradleModuleDependencyResolver(componentResultResolver, metadataModuleBuilder, projectModuleBuilder)
)
}
}
@@ -116,10 +117,10 @@ class GradleModuleDependencyResolver(
internal fun buildSyntheticPlainModule(
resolvedComponentResult: ResolvedComponentResult,
singleVariantName: String,
): ExternalPlainKotlinModule {
): KpmExternalPlainModule {
val moduleDependency = resolvedComponentResult.toModuleDependency()
return ExternalPlainKotlinModule(BasicKotlinModule(moduleDependency.moduleIdentifier).apply {
BasicKotlinModuleVariant(this@apply, singleVariantName, DefaultLanguageSettingsBuilder()).apply {
return KpmExternalPlainModule(KpmBasicModule(moduleDependency.moduleIdentifier).apply {
KpmBasicVariant(this@apply, singleVariantName, DefaultLanguageSettingsBuilder()).apply {
fragments.add(this)
this.declaredModuleDependencies.addAll(
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"
val singleVariant: KotlinModuleVariant
val singleVariant: KpmVariant
get() = moduleData.variants.singleOrNull()
?: error("synthetic $moduleData was expected to have a single variant, got: ${moduleData.variants}")
}
internal class ExternalImportedKotlinModule(
private val moduleData: BasicKotlinModule,
internal class KpmExternalImportedModule(
private val moduleData: KpmBasicModule,
val projectStructureMetadata: KotlinProjectStructureMetadata,
val hostSpecificFragments: Set<KotlinModuleFragment>
) : KotlinModule by moduleData {
val hostSpecificFragments: Set<KpmFragment>
) : KpmModule by moduleData {
val hasLegacyMetadataModule = !projectStructureMetadata.isPublishedAsRoot
override fun toString(): String = "imported $moduleData"
}
private fun ModuleComponentIdentifier.toSingleModuleIdentifier(classifier: String? = null): MavenModuleIdentifier =
MavenModuleIdentifier(moduleIdentifier.group, moduleIdentifier.name, classifier)
private fun ModuleComponentIdentifier.toSingleModuleIdentifier(classifier: String? = null): KpmMavenModuleIdentifier =
KpmMavenModuleIdentifier(moduleIdentifier.group, moduleIdentifier.name, classifier)
internal fun ComponentIdentifier.matchesModule(module: KotlinModule): Boolean =
internal fun ComponentIdentifier.matchesModule(module: KpmModule): Boolean =
matchesModuleIdentifier(module.moduleIdentifier)
internal fun ResolvedComponentResult.toModuleIdentifiers(): List<KotlinModuleIdentifier> {
internal fun ResolvedComponentResult.toModuleIdentifiers(): List<KpmModuleIdentifier> {
val classifiers = moduleClassifiersFromCapabilities(variants.flatMap { it.capabilities })
return classifiers.map { moduleClassifier -> toModuleIdentifier(moduleClassifier) }
}
// 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 moduleClassifier = classifiers.single() // FIXME handle multiple capabilities
return toModuleIdentifier(moduleClassifier)
}
private fun ResolvedComponentResult.toModuleIdentifier(moduleClassifier: String?): KotlinModuleIdentifier {
private fun ResolvedComponentResult.toModuleIdentifier(moduleClassifier: String?): KpmModuleIdentifier {
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()
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*/ }
}
internal fun ComponentSelector.toModuleIdentifiers(): Iterable<KotlinModuleIdentifier> {
internal fun ComponentSelector.toModuleIdentifiers(): Iterable<KpmModuleIdentifier> {
val moduleClassifiers = moduleClassifiersFromCapabilities(requestedCapabilities)
return when (this) {
is ProjectComponentSelector -> moduleClassifiers.map { LocalModuleIdentifier(buildName, projectPath, it) }
is ModuleComponentSelector -> moduleClassifiers.map { MavenModuleIdentifier(moduleIdentifier.group, moduleIdentifier.name, it) }
is ProjectComponentSelector -> moduleClassifiers.map { KpmLocalModuleIdentifier(buildName, projectPath, it) }
is ModuleComponentSelector -> moduleClassifiers.map { KpmMavenModuleIdentifier(moduleIdentifier.group, moduleIdentifier.name, it) }
else -> error("unexpected component selector")
}
}
internal fun ResolvedComponentResult.toModuleDependency(): KotlinModuleDependency = KotlinModuleDependency(toSingleModuleIdentifier())
internal fun ComponentSelector.toModuleDependency(): KotlinModuleDependency {
internal fun ResolvedComponentResult.toModuleDependency(): KpmModuleDependency = KpmModuleDependency(toSingleModuleIdentifier())
internal fun ComponentSelector.toModuleDependency(): KpmModuleDependency {
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)
internal fun ComponentIdentifier.matchesModuleIdentifier(id: KotlinModuleIdentifier): Boolean =
internal fun ComponentIdentifier.matchesModuleIdentifier(id: KpmModuleIdentifier): Boolean =
when (id) {
is LocalModuleIdentifier -> {
is KpmLocalModuleIdentifier -> {
val projectId = this as? ProjectComponentIdentifier
projectId?.build?.name == id.buildId && projectId.projectPath == id.projectId
}
is MavenModuleIdentifier -> {
is KpmMavenModuleIdentifier -> {
val componentId = this as? ModuleComponentIdentifier
componentId?.toSingleModuleIdentifier() == id
}
@@ -214,7 +215,7 @@ private fun getProjectStructureMetadata(
project: Project,
module: ResolvedComponentResult,
configuration: Configuration,
moduleIdentifier: KotlinModuleIdentifier? = null
moduleIdentifier: KpmModuleIdentifier? = null
): KotlinProjectStructureMetadata? {
val extractor = if (moduleIdentifier != null)
MppDependencyProjectStructureMetadataExtractor.create(project, module, moduleIdentifier, configuration)
@@ -15,7 +15,7 @@ import java.io.File
import java.util.*
internal class FragmentGranularMetadataResolver(
private val requestingFragment: KotlinGradleFragment,
private val requestingFragment: KpmGradleFragment,
private val refinesParentResolvers: Lazy<Iterable<FragmentGranularMetadataResolver>>
) {
val resolutions: Iterable<MetadataDependencyResolution> by lazy {
@@ -25,14 +25,14 @@ internal class FragmentGranularMetadataResolver(
private val project: 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() }
}
private val moduleResolver = GradleModuleDependencyResolver.getForCurrentBuild(project)
private val moduleResolver = KpmGradleModuleDependencyResolver.getForCurrentBuild(project)
private val variantResolver = GradleModuleVariantResolver.getForCurrentBuild(project)
private val fragmentResolver = DefaultModuleFragmentsResolver(variantResolver)
private val dependencyGraphResolver = GradleKotlinDependencyGraphResolver(moduleResolver)
private val dependencyGraphResolver = KpmGradleDependencyGraphResolver(moduleResolver)
private fun doResolveMetadataDependencies(): Iterable<MetadataDependencyResolution> {
val configurationToResolve = configurationToResolveMetadataDependencies(project, requestingFragment.containingModule)
@@ -44,10 +44,10 @@ internal class FragmentGranularMetadataResolver(
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")
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 requestedDependencies = dependencyGraph.root.dependenciesByFragment.filterKeys { it in fragmentsToInclude }.values.flatten()
@@ -74,7 +74,7 @@ internal class FragmentGranularMetadataResolver(
val resolvedComponentResult = dependencyNode.selectedComponent
val isResolvedAsProject = resolvedComponentResult.toProjectOrNull(project)
val result = when (dependencyModule) {
is ExternalPlainKotlinModule -> {
is KpmExternalPlainModule -> {
MetadataDependencyResolution.KeepOriginalDependency(resolvedComponentResult, isResolvedAsProject)
}
else -> run {
@@ -96,7 +96,7 @@ internal class FragmentGranularMetadataResolver(
"the presence of a proper Kotlin Module"
)
val projectStructureMetadata = (dependencyModule as? ExternalImportedKotlinModule)?.projectStructureMetadata
val projectStructureMetadata = (dependencyModule as? KpmExternalImportedModule)?.projectStructureMetadata
?: checkNotNull(projectStructureMetadataExtractor.getProjectStructureMetadata())
@@ -111,7 +111,7 @@ internal class FragmentGranularMetadataResolver(
projectStructureMetadata = projectStructureMetadata,
primaryArtifactFile = projectStructureMetadataExtractor.primaryArtifactFile,
hostSpecificArtifactsBySourceSet = if (
dependencyModule is ExternalImportedKotlinModule && chosenFragments != null
dependencyModule is KpmExternalImportedModule && chosenFragments != null
) resolveHostSpecificMetadataArtifacts(dependencyModule, chosenFragments) else emptyMap(),
).asMetadataProvider()
}
@@ -140,14 +140,14 @@ internal class FragmentGranularMetadataResolver(
return results
}
private fun fragmentsNamesVisibleByParents(kotlinModuleIdentifier: KotlinModuleIdentifier): MutableSet<String> {
private fun fragmentsNamesVisibleByParents(kotlinModuleIdentifier: KpmModuleIdentifier): MutableSet<String> {
val parentResolutionsForDependency = parentResultsByModuleIdentifier[kotlinModuleIdentifier].orEmpty()
return parentResolutionsForDependency.filterIsInstance<MetadataDependencyResolution.ChooseVisibleSourceSets>()
.flatMapTo(mutableSetOf()) { it.allVisibleSourceSetNames }
}
private fun resolveHostSpecificMetadataArtifacts(
dependencyModule: ExternalImportedKotlinModule,
dependencyModule: KpmExternalImportedModule,
chosenFragments: FragmentResolution.ChosenFragments,
): Map<String, File> {
val visibleFragments = chosenFragments.visibleFragments
@@ -161,7 +161,7 @@ internal class FragmentGranularMetadataResolver(
// resolve the dependencies of that variant getting the host-specific metadata artifact
relevantVariantResolution?.let { resolution ->
val configurationResolvingPlatformVariant =
(resolution.requestingVariant as KotlinGradleVariant).compileDependenciesConfiguration
(resolution.requestingVariant as KpmGradleVariant).compileDependenciesConfiguration
val hostSpecificArtifact = ResolvedMppVariantsProvider.get(project)
.getHostSpecificMetadataArtifactByRootModule(
dependencyModule.moduleIdentifier,
@@ -6,9 +6,9 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
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 {
fragment.refinesClosure.map { refinesFragment ->
getOrCreate(refinesFragment)
@@ -13,30 +13,30 @@ import java.io.File
typealias SourceRoots = Iterable<File>
typealias SourceRootsProvider = Provider<out SourceRoots>
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
* 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) */
open class FragmentSourcesProvider {
protected open fun getSourcesFromFragmentsAsMap(
fragments: Iterable<KotlinGradleFragment>
fragments: Iterable<KpmGradleFragment>
): SourceRootsProvidersByFragment =
fragments.associateWith { it.project.provider { it.kotlinSourceRoots } }
open fun getFragmentOwnSources(fragment: KotlinGradleFragment): SourceRootsProvider =
open fun getFragmentOwnSources(fragment: KpmGradleFragment): SourceRootsProvider =
getSourcesFromFragmentsAsMap(listOf(fragment)).values.single()
open fun getAllFragmentSourcesAsMap(module: KotlinGradleModule): SourceRootsProvidersByFragment =
open fun getAllFragmentSourcesAsMap(module: KpmGradleModule): SourceRootsProvidersByFragment =
getSourcesFromFragmentsAsMap(module.fragments)
open fun getSourcesFromRefinesClosureAsMap(fragment: KotlinGradleFragment): SourceRootsProvidersByFragment =
open fun getSourcesFromRefinesClosureAsMap(fragment: KpmGradleFragment): SourceRootsProvidersByFragment =
getSourcesFromFragmentsAsMap(fragment.withRefinesClosure)
open fun getSourcesFromRefinesClosure(fragment: KotlinGradleFragment): MultipleSourceRootsProvider =
open fun getSourcesFromRefinesClosure(fragment: KpmGradleFragment): MultipleSourceRootsProvider =
fragment.project.provider { getSourcesFromRefinesClosureAsMap(fragment).values }
open fun getCommonSourcesFromRefinesClosure(fragment: KotlinGradleFragment): MultipleSourceRootsProvider {
open fun getCommonSourcesFromRefinesClosure(fragment: KpmGradleFragment): MultipleSourceRootsProvider {
val containingModule = fragment.containingModule
val project = containingModule.project
getSourcesFromRefinesClosureAsMap(fragment)
@@ -18,17 +18,17 @@ import org.jetbrains.kotlin.project.model.*
import java.io.File
internal fun Project.compilerPluginProviderForMetadata(
fragment: KotlinGradleFragment,
fragment: KpmGradleFragment,
compilationData: KotlinCommonFragmentMetadataCompilationData
) = compilerPluginDataProvider(compilationData, fragment::metadataCompilationPluginData)
internal fun Project.compilerPluginProviderForNativeMetadata(
fragment: KotlinGradleFragment,
fragment: KpmGradleFragment,
compilationData: KotlinNativeFragmentMetadataCompilationData
) = compilerPluginDataProvider(compilationData, fragment::nativeMetadataCompilationPluginData)
internal fun Project.compilerPluginProviderForPlatformCompilation(
variant: KotlinGradleVariant,
variant: KpmGradleVariant,
compilationData: KotlinCompilationData<*>
) = compilerPluginDataProvider(compilationData, variant::platformCompilationPluginData)
@@ -44,13 +44,13 @@ abstract class KotlinPm20GradlePlugin @Inject constructor(
private fun createDefaultModules(project: Project) {
project.pm20Extension.apply {
modules.create(KotlinGradleModule.MAIN_MODULE_NAME)
modules.create(KotlinGradleModule.TEST_MODULE_NAME)
modules.create(KpmGradleModule.MAIN_MODULE_NAME)
modules.create(KpmGradleModule.TEST_MODULE_NAME)
main { makePublic() }
}
}
private fun setupPublicationForModule(module: KotlinGradleModule) {
private fun setupPublicationForModule(module: KpmGradleModule) {
val project = module.project
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")
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) }
val modules: NamedDomainObjectContainer<KotlinGradleModule>
val modules: NamedDomainObjectContainer<KpmGradleModule>
get() = project.kpmModules
@Suppress("unused") // DSL function
fun mainAndTest(configure: KotlinGradleModule.() -> Unit) {
fun mainAndTest(configure: KpmGradleModule.() -> Unit) {
main(configure)
test(configure)
}
val main: KotlinGradleModule
get() = modules.getByName(KotlinGradleModule.MAIN_MODULE_NAME)
val main: KpmGradleModule
get() = modules.getByName(KpmGradleModule.MAIN_MODULE_NAME)
val test: KotlinGradleModule
get() = modules.getByName(KotlinGradleModule.TEST_MODULE_NAME)
val test: KpmGradleModule
get() = modules.getByName(KpmGradleModule.TEST_MODULE_NAME)
fun main(configure: KotlinGradleModule.() -> Unit = { }) = main.apply(configure)
fun test(configure: KotlinGradleModule.() -> Unit = { }) = test.apply(configure)
fun main(configure: KpmGradleModule.() -> Unit = { }) = main.apply(configure)
fun test(configure: KpmGradleModule.() -> Unit = { }) = test.apply(configure)
@PublishedApi
@JvmName("isAllowCommonizer")
internal fun isAllowCommonizerForIde(@Suppress("UNUSED_PARAMETER") project: Project): Boolean = false
}
val KotlinGradleModule.jvm: KotlinJvmVariant
get() = fragments.maybeCreate("jvm", KotlinJvmVariant::class.java)
val KpmGradleModule.jvm: KpmJvmVariant
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) {
val getOrCreateVariant: KotlinGradleModule.() -> KotlinJvmVariant = { jvm }
fun KotlinPm20ProjectExtension.jvm(configure: KotlinFragmentSlice<KpmJvmVariant>.() -> Unit) {
val getOrCreateVariant: KpmGradleModule.() -> KpmJvmVariant = { jvm }
mainAndTest { getOrCreateVariant(this) }
val slice = KotlinFragmentSlice(this, getOrCreateVariant)
configure(slice)
}
open class KotlinFragmentSlice<T : KotlinGradleFragment>(
open class KotlinFragmentSlice<T : KpmGradleFragment>(
val pm20ProjectExtension: KotlinPm20ProjectExtension,
val getOrCreateFragment: (KotlinGradleModule) -> T
val getOrCreateFragment: (KpmGradleModule) -> T
) {
fun inMain(configure: T.() -> Unit) {
pm20ProjectExtension.modules.getByName(KotlinGradleModule.MAIN_MODULE_NAME).apply {
pm20ProjectExtension.modules.getByName(KpmGradleModule.MAIN_MODULE_NAME).apply {
getOrCreateFragment(this).configure()
}
}
fun inTest(configure: T.() -> Unit) {
pm20ProjectExtension.modules.getByName(KotlinGradleModule.TEST_MODULE_NAME).apply {
pm20ProjectExtension.modules.getByName(KpmGradleModule.TEST_MODULE_NAME).apply {
getOrCreateFragment(this).configure()
}
}
@@ -161,11 +161,11 @@ open class KotlinFragmentSlice<T : KotlinGradleFragment>(
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) }
}
fun inModule(module: KotlinGradleModule, configure: T.() -> Unit) {
fun inModule(module: KpmGradleModule, configure: T.() -> Unit) {
getOrCreateFragment(module).configure()
}
}
@@ -8,37 +8,36 @@
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.KotlinNameDisambiguation
typealias KotlinCommonFragmentFactory = KotlinGradleFragmentFactory<KotlinGradleFragmentInternal>
typealias KotlinCommonFragmentFactory = KotlinGradleFragmentFactory<KpmGradleFragmentInternal>
fun KotlinCommonFragmentFactory(module: KotlinGradleModule): KotlinCommonFragmentFactory =
fun KotlinCommonFragmentFactory(module: KpmGradleModule): KotlinCommonFragmentFactory =
KotlinCommonFragmentFactory(KotlinCommonFragmentInstantiator(module))
fun KotlinCommonFragmentFactory(
commonFragmentInstantiator: KotlinCommonFragmentInstantiator,
commonFragmentConfigurator: KotlinCommonFragmentConfigurator = KotlinCommonFragmentConfigurator()
): KotlinGradleFragmentFactory<KotlinGradleFragmentInternal> = KotlinGradleFragmentFactory(
): KotlinGradleFragmentFactory<KpmGradleFragmentInternal> = KotlinGradleFragmentFactory(
fragmentInstantiator = commonFragmentInstantiator,
fragmentConfigurator = commonFragmentConfigurator
)
class KotlinCommonFragmentInstantiator(
private val module: KotlinGradleModule,
private val module: KpmGradleModule,
private val dependencyConfigurationsFactory: KotlinFragmentDependencyConfigurationsFactory =
DefaultKotlinFragmentDependencyConfigurationsFactory
) : KotlinGradleFragmentFactory.FragmentInstantiator<KotlinGradleFragmentInternal> {
override fun create(name: String): KotlinGradleFragmentInternal {
) : KotlinGradleFragmentFactory.FragmentInstantiator<KpmGradleFragmentInternal> {
override fun create(name: String): KpmGradleFragmentInternal {
val names = FragmentNameDisambiguation(module, name)
return KotlinGradleFragmentInternal(module, name, dependencyConfigurationsFactory.create(module, names))
return KpmGradleFragmentInternal(module, name, dependencyConfigurationsFactory.create(module, names))
}
}
class KotlinCommonFragmentConfigurator(
private val sourceDirectoriesSetup: KotlinSourceDirectoriesConfigurator<KotlinGradleFragmentInternal> =
private val sourceDirectoriesSetup: KotlinSourceDirectoriesConfigurator<KpmGradleFragmentInternal> =
DefaultKotlinSourceDirectoriesConfigurator
) : KotlinGradleFragmentFactory.FragmentConfigurator<KotlinGradleFragmentInternal> {
override fun configure(fragment: KotlinGradleFragmentInternal) {
) : KotlinGradleFragmentFactory.FragmentConfigurator<KpmGradleFragmentInternal> {
override fun configure(fragment: KpmGradleFragmentInternal) {
sourceDirectoriesSetup.configure(fragment)
}
}
@@ -7,20 +7,20 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
import org.gradle.api.tasks.TaskProvider
interface KotlinCompileTaskConfigurator<in T : KotlinGradleVariant> {
interface KotlinCompileTaskConfigurator<in T : KpmGradleVariant> {
fun registerCompileTasks(variant: T): TaskProvider<*>
}
object KotlinJvmCompileTaskConfigurator : KotlinCompileTaskConfigurator<KotlinJvmVariant> {
override fun registerCompileTasks(variant: KotlinJvmVariant): TaskProvider<*> {
object KotlinJvmCompileTaskConfigurator : KotlinCompileTaskConfigurator<KpmJvmVariant> {
override fun registerCompileTasks(variant: KpmJvmVariant): TaskProvider<*> {
val compilationData = variant.compilationData
LifecycleTasksManager(variant.project).registerClassesTask(compilationData)
return KotlinCompilationTaskConfigurator(variant.project).createKotlinJvmCompilationTask(variant, compilationData)
}
}
object KotlinNativeCompileTaskConfigurator : KotlinCompileTaskConfigurator<KotlinNativeVariantInternal> {
override fun registerCompileTasks(variant: KotlinNativeVariantInternal): TaskProvider<*> {
object KotlinNativeCompileTaskConfigurator : KotlinCompileTaskConfigurator<KpmNativeVariantInternal> {
override fun registerCompileTasks(variant: KpmNativeVariantInternal): TaskProvider<*> {
val compilationData = variant.compilationData
LifecycleTasksManager(variant.project).registerClassesTask(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.lowerCamelCaseName
import org.jetbrains.kotlin.project.model.VariantResolution
import org.jetbrains.kotlin.project.model.withRefinesClosure
interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : KotlinVariantCompilationData<T> {
override val compileKotlinTaskName: String
@@ -27,7 +26,7 @@ interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : Kotlin
get() = owner.disambiguateName("classes")
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>
get() {
@@ -55,21 +54,21 @@ interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : Kotlin
override val moduleName: String
get() = // TODO accurate module names that don't rely on all variants having a main counterpart
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
get() = owner.ownModuleName()
private fun resolveFriendVariants(): Iterable<KotlinGradleVariant> {
val moduleResolver = GradleModuleDependencyResolver.getForCurrentBuild(project)
private fun resolveFriendVariants(): Iterable<KpmGradleVariant> {
val moduleResolver = KpmGradleModuleDependencyResolver.getForCurrentBuild(project)
val variantResolver = GradleModuleVariantResolver.getForCurrentBuild(project)
val dependencyGraphResolver = GradleKotlinDependencyGraphResolver(moduleResolver)
val dependencyGraphResolver = KpmGradleDependencyGraphResolver(moduleResolver)
val friendModules =
((dependencyGraphResolver.resolveDependencyGraph(owner.containingModule) as? GradleDependencyGraph)
((dependencyGraphResolver.resolveDependencyGraph(owner.containingModule) as? KpmGradleDependencyGraph)
?: error("Failed to resolve dependencies of ${owner.containingModule}"))
.allDependencyModules
.filterIsInstance<KotlinGradleModule>()
.filterIsInstance<KpmGradleModule>()
.filter { dependencyModule ->
// the module comes from the same Gradle project // todo: extend to other friends once supported
dependencyModule.project == owner.containingModule.project
@@ -79,11 +78,11 @@ interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : Kotlin
.map { friendModule -> variantResolver.getChosenVariant(owner, friendModule) }
// also, important to check that the owner variant really requests this module:
.filterIsInstance<VariantResolution.VariantMatch>()
.mapNotNull { variantMatch -> variantMatch.chosenVariant as? KotlinGradleVariant }
.mapNotNull { variantMatch -> variantMatch.chosenVariant as? KpmGradleVariant }
}
}
fun KotlinCompilationData<*>.isMainCompilationData(): Boolean = when (this) {
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 fun getSourcesForFragmentCompilation(fragment: KotlinGradleFragment): MultipleSourceRootsProvider =
open fun getSourcesForFragmentCompilation(fragment: KpmGradleFragment): MultipleSourceRootsProvider =
fragmentSourcesProvider.getSourcesFromRefinesClosure(fragment)
open fun getCommonSourcesForFragmentCompilation(fragment: KotlinGradleFragment): MultipleSourceRootsProvider =
open fun getCommonSourcesForFragmentCompilation(fragment: KpmGradleFragment): MultipleSourceRootsProvider =
fragmentSourcesProvider.getCommonSourcesFromRefinesClosure(fragment)
fun createKotlinJvmCompilationTask(
variant: KotlinGradleVariant,
variant: KpmGradleVariant,
compilationData: KotlinCompilationData<*>
): TaskProvider<out KotlinCompile> {
Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilationData).run()
@@ -46,7 +46,7 @@ open class KotlinCompilationTaskConfigurator(
}
protected fun createKotlinNativeCompilationTask(
fragment: KotlinGradleFragment,
fragment: KpmGradleFragment,
compilationData: KotlinNativeCompilationData<*>,
configure: KotlinNativeCompile.() -> Unit
): TaskProvider<KotlinNativeCompile> {
@@ -65,9 +65,9 @@ open class KotlinCompilationTaskConfigurator(
}
fun createKotlinNativeCompilationTask(
variant: KotlinGradleVariant,
variant: KpmGradleVariant,
compilationData: KotlinNativeCompilationData<*>
): TaskProvider<KotlinNativeCompile> = createKotlinNativeCompilationTask(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.
*/
val KotlinFragmentCompilationOutputsJarArtifact = FragmentArtifacts<KotlinGradleVariant> {
val KotlinFragmentCompilationOutputsJarArtifact = FragmentArtifacts<KpmGradleVariant> {
val jar = project.locateOrRegisterTask<Jar>(fragment.outputsJarTaskName) {
it.from(fragment.compilationOutputs.allOutputs)
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)
}
internal val KotlinGradleVariant.outputsJarTaskName: String
get() = FragmentNameDisambiguationOmittingMain(containingModule, name).disambiguateName("jar")
internal val KpmGradleVariant.outputsJarTaskName: String
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
interface KotlinFragmentDependencyConfigurationsFactory {
fun create(module: KotlinGradleModule, names: KotlinNameDisambiguation): KotlinFragmentDependencyConfigurations
fun create(module: KpmGradleModule, names: KotlinNameDisambiguation): KotlinFragmentDependencyConfigurations
}
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 apiConfiguration = configurations.maybeCreate(names.disambiguateName("api"))
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.tasks.registerTask
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 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 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.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability
val KotlinFragmentModuleCapability = FragmentCapabilities<KotlinGradleFragment> {
val KotlinFragmentModuleCapability = FragmentCapabilities<KpmGradleFragment> {
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)
}
internal val KotlinGradleModule.moduleCapability: Capability?
internal val KpmGradleModule.moduleCapability: Capability?
get() = if (moduleClassifier != null) ComputedCapability.fromModule(this) else null
@@ -14,15 +14,15 @@ import org.gradle.api.artifacts.ConfigurationVariant
/* Internal abbreviation */
internal typealias FragmentArtifacts<T> = KotlinGradleFragmentConfigurationArtifacts<T>
interface KotlinGradleFragmentConfigurationArtifacts<in T : KotlinGradleFragment> {
interface KotlinGradleFragmentConfigurationArtifacts<in T : KpmGradleFragment> {
fun addArtifacts(outgoing: ConfigurationPublications, fragment: T)
object None : KotlinGradleFragmentConfigurationArtifacts<KotlinGradleFragment> {
override fun addArtifacts(outgoing: ConfigurationPublications, fragment: KotlinGradleFragment) = Unit
object None : KotlinGradleFragmentConfigurationArtifacts<KpmGradleFragment> {
override fun addArtifacts(outgoing: ConfigurationPublications, fragment: KpmGradleFragment) = Unit
}
}
class KotlinGradleFragmentConfigurationArtifactsContext<T : KotlinGradleFragment> internal constructor(
class KotlinGradleFragmentConfigurationArtifactsContext<T : KpmGradleFragment> internal constructor(
internal val outgoing: ConfigurationPublications,
val fragment: T
) {
@@ -40,7 +40,7 @@ class KotlinGradleFragmentConfigurationArtifactsContext<T : KotlinGradleFragment
}
@Suppress("FunctionName")
fun <T : KotlinGradleFragment> FragmentArtifacts(
fun <T : KpmGradleFragment> FragmentArtifacts(
addArtifacts: KotlinGradleFragmentConfigurationArtifactsContext<T>.() -> Unit
): 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 (other === KotlinGradleFragmentConfigurationArtifacts.None) return this
@@ -70,7 +70,7 @@ operator fun <T : KotlinGradleFragment> FragmentArtifacts<T>.plus(other: Fragmen
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> {
override fun addArtifacts(outgoing: ConfigurationPublications, fragment: T) {
@@ -13,16 +13,16 @@ import org.gradle.api.attributes.AttributeContainer
/* Internal abbreviation */
internal typealias FragmentAttributes<T> = KotlinGradleFragmentConfigurationAttributes<T>
interface KotlinGradleFragmentConfigurationAttributes<in T : KotlinGradleFragment> {
interface KotlinGradleFragmentConfigurationAttributes<in T : KpmGradleFragment> {
fun setAttributes(attributes: AttributeContainer, fragment: T)
object None : FragmentAttributes<KotlinGradleFragment> {
override fun setAttributes(attributes: AttributeContainer, fragment: KotlinGradleFragment) = Unit
object None : FragmentAttributes<KpmGradleFragment> {
override fun setAttributes(attributes: AttributeContainer, fragment: KpmGradleFragment) = Unit
}
}
class KotlinGradleFragmentConfigurationAttributesContext<T : KotlinGradleFragment> internal constructor(
class KotlinGradleFragmentConfigurationAttributesContext<T : KpmGradleFragment> internal constructor(
internal val attributes: AttributeContainer,
val fragment: T,
) : AttributeContainer by attributes {
@@ -38,7 +38,7 @@ class KotlinGradleFragmentConfigurationAttributesContext<T : KotlinGradleFragmen
}
@Suppress("FunctionName")
fun <T : KotlinGradleFragment> FragmentAttributes(
fun <T : KpmGradleFragment> FragmentAttributes(
setAttributes: KotlinGradleFragmentConfigurationAttributesContext<T>.() -> Unit
): 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.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 (other === KotlinGradleFragmentConfigurationAttributes.None) return this
@@ -74,7 +74,7 @@ operator fun <T : KotlinGradleFragment> FragmentAttributes<T>.plus(other: Fragme
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> {
override fun setAttributes(attributes: AttributeContainer, fragment: T) {
children.forEach { child -> child.setAttributes(attributes, fragment) }
@@ -16,19 +16,19 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentConfigura
/* Internal abbreviation */
internal typealias FragmentCapabilities<T> = KotlinGradleFragmentConfigurationCapabilities<T>
interface KotlinGradleFragmentConfigurationCapabilities<in T : KotlinGradleFragment> {
interface KotlinGradleFragmentConfigurationCapabilities<in T : KpmGradleFragment> {
interface CapabilitiesContainer {
fun capability(notation: Any)
}
fun setCapabilities(container: CapabilitiesContainer, fragment: T)
object None : KotlinGradleFragmentConfigurationCapabilities<KotlinGradleFragment> {
override fun setCapabilities(container: CapabilitiesContainer, fragment: KotlinGradleFragment) = Unit
object None : KotlinGradleFragmentConfigurationCapabilities<KpmGradleFragment> {
override fun setCapabilities(container: CapabilitiesContainer, fragment: KpmGradleFragment) = Unit
}
}
fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationCapabilities<T>.setCapabilities(
fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationCapabilities<T>.setCapabilities(
publications: ConfigurationPublications, fragment: T
) = setCapabilities(CapabilitiesContainer(publications), fragment)
@@ -44,13 +44,13 @@ private class CapabilitiesContainerImpl(
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
) : CapabilitiesContainer by container {
val project: Project get() = fragment.project
}
fun <T : KotlinGradleFragment> FragmentCapabilities(
fun <T : KpmGradleFragment> FragmentCapabilities(
setCapabilities: KotlinGradleFragmentConfigurationCapabilitiesContext<T>.() -> Unit
): KotlinGradleFragmentConfigurationCapabilities<T> = object : KotlinGradleFragmentConfigurationCapabilities<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 (other === KotlinGradleFragmentConfigurationCapabilities.None) return this
@@ -78,7 +78,7 @@ operator fun <T : KotlinGradleFragment> FragmentCapabilities<T>.plus(other: Frag
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> {
override fun setCapabilities(container: CapabilitiesContainer, fragment: T) {
children.forEach { child -> child.setCapabilities(container, fragment) }
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.KotlinNameDisambiguation
/* Internal abbreviation */
internal typealias ConfigurationDefinition<T> = KotlinGradleFragmentConfigurationDefinition<T>
data class KotlinGradleFragmentConfigurationDefinition<in T : KotlinGradleFragment>(
data class KotlinGradleFragmentConfigurationDefinition<in T : KpmGradleFragment>(
val provider: KotlinGradleFragmentConfigurationProvider,
val attributes: KotlinGradleFragmentConfigurationAttributes<T> = KotlinGradleFragmentConfigurationAttributes.None,
val artifacts: KotlinGradleFragmentConfigurationArtifacts<T> = KotlinGradleFragmentConfigurationArtifacts.None,
@@ -26,29 +26,29 @@ internal typealias ConfigurationContext = KotlinGradleFragmentConfigurationConte
interface KotlinGradleFragmentConfigurationContext : KotlinNameDisambiguation {
val project: Project get() = module.project
val module: KotlinGradleModule
val module: KpmGradleModule
val dependencies: KotlinFragmentDependencyConfigurations
}
internal class KotlinGradleFragmentConfigurationContextImpl(
override val module: KotlinGradleModule,
override val module: KpmGradleModule,
override val dependencies: KotlinFragmentDependencyConfigurations,
names: KotlinNameDisambiguation
) : KotlinGradleFragmentConfigurationContext, KotlinNameDisambiguation by names
fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.withConfigurationProvider(
fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.withConfigurationProvider(
provider: KotlinGradleFragmentConfigurationContext.() -> Configuration
) = 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)
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)
operator fun <T : KotlinGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentConfigurationRelation):
operator fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentConfigurationRelation):
KotlinGradleFragmentConfigurationDefinition<T> = copy(relations = relations + other)
@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)
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentFactory.F
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:
*
* [FragmentInstantiator]:
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentFactory.F
* - Setting up additional Gradle tasks
* - Setting up publication
*/
class KotlinGradleFragmentFactory<T : KotlinGradleFragment>(
class KotlinGradleFragmentFactory<T : KpmGradleFragment>(
private val fragmentInstantiator: FragmentInstantiator<T>,
private val fragmentConfigurator: FragmentConfigurator<T>
) : NamedDomainObjectFactory<T> {
@@ -34,14 +34,14 @@ class KotlinGradleFragmentFactory<T : KotlinGradleFragment>(
/**
* @see KotlinGradleFragmentFactory
*/
interface FragmentInstantiator<out T : KotlinGradleFragment> {
interface FragmentInstantiator<out T : KpmGradleFragment> {
fun create(name: String): T
}
/**
* @see KotlinGradleFragmentFactory
*/
interface FragmentConfigurator<in T : KotlinGradleFragment> {
interface FragmentConfigurator<in T : KpmGradleFragment> {
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.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.utils.addExtendsFromRelation
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.mutableExtrasOf
import javax.inject.Inject
open class KotlinGradleFragmentInternal @Inject constructor(
final override val containingModule: KotlinGradleModule,
open class KpmGradleFragmentInternal @Inject constructor(
final override val containingModule: KpmGradleModule,
final override val fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations
) : KotlinGradleFragment,
) : KpmGradleFragment,
KotlinFragmentDependencyConfigurations by dependencyConfigurations {
final override fun getName(): String = fragmentName
@@ -44,12 +44,12 @@ open class KotlinGradleFragmentInternal @Inject constructor(
// FIXME check for consistency
override val languageSettings: LanguageSettingsBuilder = DefaultLanguageSettingsBuilder()
override fun refines(other: KotlinGradleFragment) {
override fun refines(other: KpmGradleFragment) {
checkCanRefine(other)
refines(containingModule.fragments.named(other.name))
}
override fun refines(other: NamedDomainObjectProvider<KotlinGradleFragment>) {
override fun refines(other: NamedDomainObjectProvider<KpmGradleFragment>) {
_directRefinesDependencies.add(other)
other.configure { checkCanRefine(it) }
@@ -66,11 +66,11 @@ open class KotlinGradleFragmentInternal @Inject constructor(
)
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) {
"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?>) =
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()
// 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
// 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 ->
exportConfiguration.allDependencies.map { dependency -> dependency.toModuleDependency(project) }
}
@@ -106,7 +106,7 @@ open class KotlinGradleFragmentInternal @Inject constructor(
FragmentConsistencyChecker(
unitsName = "fragments",
name = { name },
checks = FragmentConsistencyChecks<KotlinGradleFragment>(
checks = FragmentConsistencyChecks<KpmGradleFragment>(
unitName = "fragment",
languageSettings = { languageSettings }
).allChecks
@@ -15,26 +15,26 @@ import org.jetbrains.kotlin.project.model.*
import org.jetbrains.kotlin.project.model.utils.variantsContainingFragment
import javax.inject.Inject
open class KotlinGradleModuleInternal(
open class KpmGradleModuleInternal(
final override val project: Project,
final override val moduleClassifier: String?
) : KotlinGradleModule {
) : KpmGradleModule {
@Inject
constructor(project: Project, moduleName: CharSequence) : this(
project,
moduleName.takeIf { it != KotlinGradleModule.MAIN_MODULE_NAME }?.toString()
moduleName.takeIf { it != KpmGradleModule.MAIN_MODULE_NAME }?.toString()
)
override val moduleIdentifier: KotlinModuleIdentifier =
LocalModuleIdentifier(project.currentBuildId().name, project.path, moduleClassifier)
override val moduleIdentifier: KpmModuleIdentifier =
KpmLocalModuleIdentifier(project.currentBuildId().name, project.path, moduleClassifier)
override val fragments: ExtensiblePolymorphicDomainObjectContainer<KotlinGradleFragment> =
project.objects.polymorphicDomainObjectContainer(KotlinGradleFragment::class.java)
override val fragments: ExtensiblePolymorphicDomainObjectContainer<KpmGradleFragment> =
project.objects.polymorphicDomainObjectContainer(KpmGradleFragment::class.java)
// TODO DSL & build script model: find a way to create a flexible typed view on fragments?
override val variants: NamedDomainObjectSet<KotlinGradleVariant> by lazy {
fragments.withType(KotlinGradleVariant::class.java)
override val variants: NamedDomainObjectSet<KpmGradleVariant> by lazy {
fragments.withType(KpmGradleVariant::class.java)
}
override val plugins: Set<KpmCompilerPlugin> by lazy {
@@ -70,14 +70,14 @@ open class KotlinGradleModuleInternal(
override fun toString(): String = "$moduleIdentifier (Gradle)"
}
internal val KotlinGradleModule.resolvableMetadataConfigurationName: String
internal val KpmGradleModule.resolvableMetadataConfigurationName: String
get() = lowerCamelCaseName(name, "DependenciesMetadata")
internal val KotlinGradleModule.isMain
internal val KpmGradleModule.isMain
get() = moduleIdentifier.moduleClassifier == null
internal fun KotlinGradleModule.disambiguateName(simpleName: String) =
internal fun KpmGradleModule.disambiguateName(simpleName: String) =
lowerCamelCaseName(moduleClassifier, simpleName)
internal fun KotlinGradleModule.variantsContainingFragment(fragment: KotlinModuleFragment): Iterable<KotlinGradleVariant> =
(this as KotlinModule).variantsContainingFragment(fragment).onEach { it as KotlinGradleVariant } as Iterable<KotlinGradleVariant>
internal fun KpmGradleModule.variantsContainingFragment(fragment: KpmFragment): Iterable<KpmGradleVariant> =
(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.Project
import org.jetbrains.kotlin.gradle.dsl.pm20Extension
open class KotlinGradleModuleFactory(private val project: Project) : NamedDomainObjectFactory<KotlinGradleModule> {
override fun create(name: String): KotlinGradleModule {
val result = project.objects.newInstance(KotlinGradleModuleInternal::class.java, project, name)
open class KotlinGradleModuleFactory(private val project: Project) : NamedDomainObjectFactory<KpmGradleModule> {
override fun create(name: String): KpmGradleModule {
val result = project.objects.newInstance(KpmGradleModuleInternal::class.java, project, name)
registerFragmentFactory(result)
registerDefaultCommonFragment(result)
addDefaultDependencyOnMainModule(result)
@@ -19,29 +18,29 @@ open class KotlinGradleModuleFactory(private val project: Project) : NamedDomain
return result
}
protected open fun registerDefaultCommonFragment(module: KotlinGradleModule) {
module.fragments.register(KotlinGradleFragment.COMMON_FRAGMENT_NAME, KotlinGradleFragment::class.java)
protected open fun registerDefaultCommonFragment(module: KpmGradleModule) {
module.fragments.register(KpmGradleFragment.COMMON_FRAGMENT_NAME, KpmGradleFragment::class.java)
}
protected open fun addDefaultRefinementDependencyOnCommon(module: KotlinGradleModule) {
module.fragments.matching { it.name != KotlinGradleFragment.COMMON_FRAGMENT_NAME }.all {
it.refines(module.fragments.named(KotlinGradleFragment.COMMON_FRAGMENT_NAME))
protected open fun addDefaultRefinementDependencyOnCommon(module: KpmGradleModule) {
module.fragments.matching { it.name != KpmGradleFragment.COMMON_FRAGMENT_NAME }.all {
it.refines(module.fragments.named(KpmGradleFragment.COMMON_FRAGMENT_NAME))
}
}
protected open fun addDefaultDependencyOnMainModule(module: KotlinGradleModule) {
if (module.name != KotlinGradleModule.MAIN_MODULE_NAME) {
protected open fun addDefaultDependencyOnMainModule(module: KpmGradleModule) {
if (module.name != KpmGradleModule.MAIN_MODULE_NAME) {
module.fragments
.matching { it.fragmentName == KotlinGradleFragment.COMMON_FRAGMENT_NAME }
.matching { it.fragmentName == KpmGradleFragment.COMMON_FRAGMENT_NAME }
.configureEach { commonFragment ->
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) {
module.fragments.registerFactory(KotlinGradleFragment::class.java, KotlinCommonFragmentFactory(module))
protected open fun registerFragmentFactory(module: KpmGradleModule) {
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.targets.jvm.KotlinJvmTarget
open class KotlinJvmVariant(
containingModule: KotlinGradleModule,
open class KpmJvmVariant(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependenciesConfiguration: Configuration,
apiElementsConfiguration: Configuration,
runtimeDependenciesConfiguration: Configuration,
runtimeElementsConfiguration: Configuration
) : KotlinGradlePublishedVariantWithRuntime(
) : KpmGradlePublishedVariantWithRuntime(
containingModule = containingModule,
fragmentName = fragmentName,
dependencyConfigurations = dependencyConfigurations,
@@ -36,14 +36,14 @@ open class KotlinJvmVariant(
get() = KotlinPlatformType.jvm
}
class KotlinJvmVariantCompilationData(val variant: KotlinJvmVariant) : KotlinVariantCompilationDataInternal<KotlinJvmOptions> {
override val owner: KotlinJvmVariant get() = variant
class KotlinJvmVariantCompilationData(val variant: KpmJvmVariant) : KotlinVariantCompilationDataInternal<KotlinJvmOptions> {
override val owner: KpmJvmVariant get() = variant
// TODO pull out to the variant
override val kotlinOptions: KotlinJvmOptions = KotlinJvmOptionsImpl()
}
internal fun KotlinGradleVariant.ownModuleName(): String {
internal fun KpmGradleVariant.ownModuleName(): String {
val project = containingModule.project
val baseName = project.archivesName
?: project.name
@@ -56,10 +56,10 @@ internal class KotlinMappedJvmCompilationFactory(
) : KotlinJvmCompilationFactory(target) {
override fun create(name: String): KotlinJvmCompilation {
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(
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
typealias KotlinJvmVariantFactory = KotlinGradleFragmentFactory<KotlinJvmVariant>
typealias KotlinJvmVariantFactory = KotlinGradleFragmentFactory<KpmJvmVariant>
fun KotlinJvmVariantFactory(
module: KotlinGradleModule, config: KotlinJvmVariantConfig = KotlinJvmVariantConfig()
module: KpmGradleModule, config: KotlinJvmVariantConfig = KotlinJvmVariantConfig()
): KotlinJvmVariantFactory = KotlinJvmVariantFactory(
KotlinJvmVariantInstantiator(module, config),
KotlinJvmVariantConfigurator(config)
@@ -22,43 +22,43 @@ data class KotlinJvmVariantConfig(
val dependenciesConfigurationFactory: KotlinFragmentDependencyConfigurationsFactory
= DefaultKotlinFragmentDependencyConfigurationsFactory,
val compileDependencies: KotlinGradleFragmentConfigurationDefinition<KotlinJvmVariant>
val compileDependencies: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
= DefaultKotlinCompileDependenciesDefinition,
val runtimeDependencies: KotlinGradleFragmentConfigurationDefinition<KotlinJvmVariant>
val runtimeDependencies: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
= DefaultKotlinRuntimeDependenciesDefinition,
val apiElements: KotlinGradleFragmentConfigurationDefinition<KotlinJvmVariant>
val apiElements: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
= DefaultKotlinApiElementsDefinition + KotlinFragmentCompilationOutputsJarArtifact,
val runtimeElements: KotlinGradleFragmentConfigurationDefinition<KotlinJvmVariant>
val runtimeElements: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
= DefaultKotlinRuntimeElementsDefinition,
val compileTaskConfigurator: KotlinCompileTaskConfigurator<KotlinJvmVariant>
val compileTaskConfigurator: KotlinCompileTaskConfigurator<KpmJvmVariant>
= KotlinJvmCompileTaskConfigurator,
val sourceArchiveTaskConfigurator: KotlinSourceArchiveTaskConfigurator<KotlinJvmVariant>
val sourceArchiveTaskConfigurator: KotlinSourceArchiveTaskConfigurator<KpmJvmVariant>
= DefaultKotlinSourceArchiveTaskConfigurator,
val sourceDirectoriesConfigurator: KotlinSourceDirectoriesConfigurator<KotlinJvmVariant>
val sourceDirectoriesConfigurator: KotlinSourceDirectoriesConfigurator<KpmJvmVariant>
= DefaultKotlinSourceDirectoriesConfigurator,
val publicationConfigurator: KotlinPublicationConfigurator<KotlinJvmVariant>
val publicationConfigurator: KotlinPublicationConfigurator<KpmJvmVariant>
= KotlinPublicationConfigurator.SingleVariantPublication
)
class KotlinJvmVariantInstantiator internal constructor(
private val module: KotlinGradleModule,
private val module: KpmGradleModule,
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 context = KotlinGradleFragmentConfigurationContextImpl(
module, config.dependenciesConfigurationFactory.create(module, names), names
)
return KotlinJvmVariant(
return KpmJvmVariant(
containingModule = module,
fragmentName = name,
dependencyConfigurations = context.dependencies,
@@ -80,9 +80,9 @@ class KotlinJvmVariantInstantiator internal constructor(
class KotlinJvmVariantConfigurator internal constructor(
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.runtimeDependenciesConfiguration.configure(config.runtimeDependencies, fragment)
fragment.apiElementsConfiguration.configure(config.apiElements, fragment)
@@ -32,8 +32,8 @@ interface KotlinCommonFragmentMetadataCompilationData : KotlinMetadataCompilatio
internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : KotlinCommonOptions>(
final override val project: Project,
val fragment: KotlinGradleFragment,
private val module: KotlinGradleModule,
val fragment: KpmGradleFragment,
private val module: KpmGradleModule,
private val compileAllTask: TaskProvider<DefaultTask>,
val metadataCompilationRegistry: MetadataCompilationRegistry,
private val resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>>
@@ -106,8 +106,8 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : Kotlin
internal open class KotlinCommonFragmentMetadataCompilationDataImpl(
project: Project,
fragment: KotlinGradleFragment,
module: KotlinGradleModule,
fragment: KpmGradleFragment,
module: KpmGradleModule,
compileAllTask: TaskProvider<DefaultTask>,
metadataCompilationRegistry: MetadataCompilationRegistry,
resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>>
@@ -133,18 +133,18 @@ interface KotlinNativeFragmentMetadataCompilationData :
KotlinMetadataCompilationData<KotlinCommonOptions>,
KotlinNativeCompilationData<KotlinCommonOptions>
internal fun KotlinGradleFragment.isNativeShared(): Boolean =
internal fun KpmGradleFragment.isNativeShared(): Boolean =
containingVariants.run {
any() && all { it.platformType == KotlinPlatformType.native }
}
internal fun KotlinGradleFragment.isNativeHostSpecific(): Boolean =
internal fun KpmGradleFragment.isNativeHostSpecific(): Boolean =
this in getHostSpecificFragments(containingModule)
internal open class KotlinNativeFragmentMetadataCompilationDataImpl(
project: Project,
fragment: KotlinGradleFragment,
module: KotlinGradleModule,
fragment: KpmGradleFragment,
module: KpmGradleModule,
compileAllTask: TaskProvider<DefaultTask>,
metadataCompilationRegistry: MetadataCompilationRegistry,
resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>>
@@ -168,7 +168,7 @@ internal open class KotlinNativeFragmentMetadataCompilationDataImpl(
override val konanTarget: KonanTarget
get() {
val nativeVariants =
fragment.containingVariants.filterIsInstance<KotlinNativeVariantInternal>()
fragment.containingVariants.filterIsInstance<KpmNativeVariantInternal>()
return nativeVariants.firstOrNull { it.konanTarget.enabledOnCurrentHost }?.konanTarget
?: nativeVariants.firstOrNull()?.konanTarget
?: 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
// what tasks should we create? should there be a generic task for that?
internal class MetadataCompilationRegistry {
private val commonCompilationDataPerFragment = LinkedHashMap<KotlinGradleFragment, KotlinCommonFragmentMetadataCompilationDataImpl>()
private val nativeCompilationDataPerFragment = LinkedHashMap<KotlinGradleFragment, KotlinNativeFragmentMetadataCompilationDataImpl>()
private val commonCompilationDataPerFragment = LinkedHashMap<KpmGradleFragment, KotlinCommonFragmentMetadataCompilationDataImpl>()
private val nativeCompilationDataPerFragment = LinkedHashMap<KpmGradleFragment, KotlinNativeFragmentMetadataCompilationDataImpl>()
fun registerCommon(fragment: KotlinGradleFragment, compilationData: KotlinCommonFragmentMetadataCompilationDataImpl) {
fun registerCommon(fragment: KpmGradleFragment, compilationData: KotlinCommonFragmentMetadataCompilationDataImpl) {
commonCompilationDataPerFragment.compute(fragment) { _, existing ->
existing?.let { error("common compilation data for fragment $fragment already registered") }
compilationData
@@ -193,7 +193,7 @@ internal class MetadataCompilationRegistry {
withAllCommonCallbacks.forEach { it.invoke(compilationData) }
}
fun registerNative(fragment: KotlinGradleFragment, compilationData: KotlinNativeFragmentMetadataCompilationDataImpl) {
fun registerNative(fragment: KpmGradleFragment, compilationData: KotlinNativeFragmentMetadataCompilationDataImpl) {
nativeCompilationDataPerFragment.compute(fragment) { _, existing ->
existing?.let { error("native compilation data for fragment $fragment already registered") }
compilationData
@@ -201,7 +201,7 @@ internal class MetadataCompilationRegistry {
withAllNativeCallbacks.forEach { it.invoke(compilationData) }
}
fun getForFragmentOrNull(fragment: KotlinGradleFragment): AbstractKotlinFragmentMetadataCompilationData<*>? =
fun getForFragmentOrNull(fragment: KpmGradleFragment): AbstractKotlinFragmentMetadataCompilationData<*>? =
listOf(commonCompilationDataPerFragment.getValue(fragment), nativeCompilationDataPerFragment.getValue(fragment)).singleOrNull {
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.publishedConfigurationName
import org.jetbrains.kotlin.konan.target.KonanTarget
import javax.inject.Inject
abstract class KotlinNativeVariantInternal(
containingModule: KotlinGradleModule,
abstract class KpmNativeVariantInternal(
containingModule: KpmGradleModule,
fragmentName: String,
val konanTarget: KonanTarget,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
final override val hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariant,
KotlinGradleVariantInternal(
) : KpmNativeVariant,
KpmGradleVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
dependencyConfigurations = dependencyConfigurations,
@@ -44,11 +43,11 @@ abstract class KotlinNativeVariantInternal(
override val compilationData by lazy { KotlinNativeVariantCompilationData(this) }
}
class KotlinNativeVariantConstructor<T : KotlinNativeVariantInternal>(
class KotlinNativeVariantConstructor<T : KpmNativeVariantInternal>(
val konanTarget: KonanTarget,
val variantClass: Class<T>,
private val constructor: (
containingModule: KotlinGradleModule,
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
@@ -57,7 +56,7 @@ class KotlinNativeVariantConstructor<T : KotlinNativeVariantInternal>(
) -> T
) {
operator fun invoke(
containingModule: KotlinGradleModule,
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
@@ -78,7 +77,7 @@ interface KotlinNativeCompilationData<T : KotlinCommonOptions> : KotlinCompilati
}
internal class KotlinNativeVariantCompilationData(
val variant: KotlinNativeVariantInternal
val variant: KpmNativeVariantInternal
) : KotlinVariantCompilationDataInternal<KotlinCommonOptions>, KotlinNativeCompilationData<KotlinCommonOptions> {
override val konanTarget: KonanTarget
get() = variant.konanTarget
@@ -89,7 +88,7 @@ internal class KotlinNativeVariantCompilationData(
override val project: Project
get() = variant.containingModule.project
override val owner: KotlinNativeVariant
override val owner: KpmNativeVariant
get() = variant
override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions { variant.languageSettings }
@@ -97,7 +96,7 @@ internal class KotlinNativeVariantCompilationData(
internal class KotlinMappedNativeCompilationFactory(
target: KotlinNativeTarget,
private val variantClass: Class<out KotlinNativeVariantInternal>
private val variantClass: Class<out KpmNativeVariantInternal>
) : KotlinNativeCompilationFactory(target) {
override fun create(name: String): KotlinNativeCompilation {
val module = target.project.kpmModules.maybeCreate(name)
@@ -108,4 +107,4 @@ internal class KotlinMappedNativeCompilationFactory(
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
fun <T : KotlinNativeVariantInternal> KotlinNativeVariantFactory(
module: KotlinGradleModule,
fun <T : KpmNativeVariantInternal> KotlinNativeVariantFactory(
module: KpmGradleModule,
constructor: KotlinNativeVariantConstructor<T>,
config: KotlinNativeVariantConfig<T> = KotlinNativeVariantConfig()
) = KotlinGradleFragmentFactory(
@@ -18,7 +18,7 @@ fun <T : KotlinNativeVariantInternal> KotlinNativeVariantFactory(
fragmentConfigurator = KotlinNativeVariantConfigurator(config)
)
data class KotlinNativeVariantConfig<T : KotlinNativeVariantInternal>(
data class KotlinNativeVariantConfig<T : KpmNativeVariantInternal>(
val dependenciesConfigurationFactory: KotlinFragmentDependencyConfigurationsFactory =
DefaultKotlinFragmentDependencyConfigurationsFactory,
@@ -42,12 +42,12 @@ data class KotlinNativeVariantConfig<T : KotlinNativeVariantInternal>(
val sourceDirectoriesConfigurator: KotlinSourceDirectoriesConfigurator<T> =
DefaultKotlinSourceDirectoriesConfigurator,
val publicationConfigurator: KotlinPublicationConfigurator<KotlinNativeVariantInternal> =
val publicationConfigurator: KotlinPublicationConfigurator<KpmNativeVariantInternal> =
KotlinPublicationConfigurator.NativeVariantPublication
)
class KotlinNativeVariantInstantiator<T : KotlinNativeVariantInternal>(
private val module: KotlinGradleModule,
class KotlinNativeVariantInstantiator<T : KpmNativeVariantInternal>(
private val module: KpmGradleModule,
private val kotlinNativeVariantConstructor: KotlinNativeVariantConstructor<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>
) : KotlinGradleFragmentFactory.FragmentConfigurator<T> {
@@ -5,20 +5,20 @@
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> {
override fun configure(fragment: KotlinGradleVariant) = Unit
object NoPublication : KotlinPublicationConfigurator<KpmGradleVariant> {
override fun configure(fragment: KpmGradleVariant) = Unit
}
object SingleVariantPublication : KotlinPublicationConfigurator<KotlinGradlePublishedVariantWithRuntime> {
override fun configure(fragment: KotlinGradlePublishedVariantWithRuntime) {
object SingleVariantPublication : KotlinPublicationConfigurator<KpmGradlePublishedVariantWithRuntime> {
override fun configure(fragment: KpmGradlePublishedVariantWithRuntime) {
VariantPublishingConfigurator.get(fragment.project).configureSingleVariantPublication(fragment)
}
}
object NativeVariantPublication : KotlinPublicationConfigurator<KotlinNativeVariantInternal> {
override fun configure(fragment: KotlinNativeVariantInternal) {
object NativeVariantPublication : KotlinPublicationConfigurator<KpmNativeVariantInternal> {
override fun configure(fragment: KpmNativeVariantInternal) {
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.sourcesJarTaskNamed
interface KotlinSourceArchiveTaskConfigurator<in T : KotlinGradleVariant> {
interface KotlinSourceArchiveTaskConfigurator<in T : KpmGradleVariant> {
fun registerSourceArchiveTask(variant: T): TaskProvider<*>?
}
object DefaultKotlinSourceArchiveTaskConfigurator : KotlinSourceArchiveTaskConfigurator<KotlinGradleVariant> {
override fun registerSourceArchiveTask(variant: KotlinGradleVariant): TaskProvider<*> {
object DefaultKotlinSourceArchiveTaskConfigurator : KotlinSourceArchiveTaskConfigurator<KpmGradleVariant> {
override fun registerSourceArchiveTask(variant: KpmGradleVariant): TaskProvider<*> {
return sourcesJarTaskNamed(
taskName = variant.sourceArchiveTaskName,
project = variant.project,
@@ -11,10 +11,10 @@ import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSource
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.io.File
interface KotlinSourceDirectoriesConfigurator<in T : KotlinGradleFragment>: KotlinGradleFragmentFactory.FragmentConfigurator<T>
interface KotlinSourceDirectoriesConfigurator<in T : KpmGradleFragment>: KotlinGradleFragmentFactory.FragmentConfigurator<T>
object DefaultKotlinSourceDirectoriesConfigurator : KotlinSourceDirectoriesConfigurator<KotlinGradleFragment> {
override fun configure(fragment: KotlinGradleFragment) {
object DefaultKotlinSourceDirectoriesConfigurator : KotlinSourceDirectoriesConfigurator<KpmGradleFragment> {
override fun configure(fragment: KpmGradleFragment) {
fragment.kotlinSourceRoots.srcDir(
fragment.project.provider {
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 isModelMappingEnabled = project.multiplatformExtensionOrNull != null
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)
return fragment.project.file("src/$fragmentDirectoryName/$type")
}
@@ -5,14 +5,14 @@ import org.jetbrains.kotlin.konan.target.KonanTarget
import javax.inject.Inject
// DO NOT EDIT MANUALLY! Generated by org.jetbrains.kotlin.generators.gradle.dsl.KpmNativeVariantCodegenKt
open class KotlinAndroidNativeX64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmAndroidNativeX64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.ANDROID_X64,
@@ -23,19 +23,19 @@ open class KotlinAndroidNativeX64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.ANDROID_X64, KotlinAndroidNativeX64Variant::class.java, ::KotlinAndroidNativeX64Variant
KonanTarget.ANDROID_X64, KpmAndroidNativeX64Variant::class.java, ::KpmAndroidNativeX64Variant
)
}
}
open class KotlinAndroidNativeX86Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmAndroidNativeX86Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.ANDROID_X86,
@@ -46,19 +46,19 @@ open class KotlinAndroidNativeX86Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.ANDROID_X86, KotlinAndroidNativeX86Variant::class.java, ::KotlinAndroidNativeX86Variant
KonanTarget.ANDROID_X86, KpmAndroidNativeX86Variant::class.java, ::KpmAndroidNativeX86Variant
)
}
}
open class KotlinAndroidNativeArm32Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmAndroidNativeArm32Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.ANDROID_ARM32,
@@ -69,19 +69,19 @@ open class KotlinAndroidNativeArm32Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.ANDROID_ARM32, KotlinAndroidNativeArm32Variant::class.java, ::KotlinAndroidNativeArm32Variant
KonanTarget.ANDROID_ARM32, KpmAndroidNativeArm32Variant::class.java, ::KpmAndroidNativeArm32Variant
)
}
}
open class KotlinAndroidNativeArm64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmAndroidNativeArm64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.ANDROID_ARM64,
@@ -92,19 +92,19 @@ open class KotlinAndroidNativeArm64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.ANDROID_ARM64, KotlinAndroidNativeArm64Variant::class.java, ::KotlinAndroidNativeArm64Variant
KonanTarget.ANDROID_ARM64, KpmAndroidNativeArm64Variant::class.java, ::KpmAndroidNativeArm64Variant
)
}
}
open class KotlinIosArm32Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmIosArm32Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.IOS_ARM32,
@@ -115,19 +115,19 @@ open class KotlinIosArm32Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.IOS_ARM32, KotlinIosArm32Variant::class.java, ::KotlinIosArm32Variant
KonanTarget.IOS_ARM32, KpmIosArm32Variant::class.java, ::KpmIosArm32Variant
)
}
}
open class KotlinIosArm64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmIosArm64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.IOS_ARM64,
@@ -138,19 +138,19 @@ open class KotlinIosArm64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.IOS_ARM64, KotlinIosArm64Variant::class.java, ::KotlinIosArm64Variant
KonanTarget.IOS_ARM64, KpmIosArm64Variant::class.java, ::KpmIosArm64Variant
)
}
}
open class KotlinIosX64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmIosX64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.IOS_X64,
@@ -161,19 +161,19 @@ open class KotlinIosX64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.IOS_X64, KotlinIosX64Variant::class.java, ::KotlinIosX64Variant
KonanTarget.IOS_X64, KpmIosX64Variant::class.java, ::KpmIosX64Variant
)
}
}
open class KotlinIosSimulatorArm64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmIosSimulatorArm64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.IOS_SIMULATOR_ARM64,
@@ -184,19 +184,19 @@ open class KotlinIosSimulatorArm64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.IOS_SIMULATOR_ARM64, KotlinIosSimulatorArm64Variant::class.java, ::KotlinIosSimulatorArm64Variant
KonanTarget.IOS_SIMULATOR_ARM64, KpmIosSimulatorArm64Variant::class.java, ::KpmIosSimulatorArm64Variant
)
}
}
open class KotlinWatchosArm32Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmWatchosArm32Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.WATCHOS_ARM32,
@@ -207,19 +207,19 @@ open class KotlinWatchosArm32Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.WATCHOS_ARM32, KotlinWatchosArm32Variant::class.java, ::KotlinWatchosArm32Variant
KonanTarget.WATCHOS_ARM32, KpmWatchosArm32Variant::class.java, ::KpmWatchosArm32Variant
)
}
}
open class KotlinWatchosArm64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmWatchosArm64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.WATCHOS_ARM64,
@@ -230,19 +230,19 @@ open class KotlinWatchosArm64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.WATCHOS_ARM64, KotlinWatchosArm64Variant::class.java, ::KotlinWatchosArm64Variant
KonanTarget.WATCHOS_ARM64, KpmWatchosArm64Variant::class.java, ::KpmWatchosArm64Variant
)
}
}
open class KotlinWatchosX86Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmWatchosX86Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.WATCHOS_X86,
@@ -253,19 +253,19 @@ open class KotlinWatchosX86Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.WATCHOS_X86, KotlinWatchosX86Variant::class.java, ::KotlinWatchosX86Variant
KonanTarget.WATCHOS_X86, KpmWatchosX86Variant::class.java, ::KpmWatchosX86Variant
)
}
}
open class KotlinWatchosX64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmWatchosX64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.WATCHOS_X64,
@@ -276,19 +276,19 @@ open class KotlinWatchosX64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.WATCHOS_X64, KotlinWatchosX64Variant::class.java, ::KotlinWatchosX64Variant
KonanTarget.WATCHOS_X64, KpmWatchosX64Variant::class.java, ::KpmWatchosX64Variant
)
}
}
open class KotlinWatchosSimulatorArm64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmWatchosSimulatorArm64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.WATCHOS_SIMULATOR_ARM64,
@@ -299,19 +299,19 @@ open class KotlinWatchosSimulatorArm64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.WATCHOS_SIMULATOR_ARM64, KotlinWatchosSimulatorArm64Variant::class.java, ::KotlinWatchosSimulatorArm64Variant
KonanTarget.WATCHOS_SIMULATOR_ARM64, KpmWatchosSimulatorArm64Variant::class.java, ::KpmWatchosSimulatorArm64Variant
)
}
}
open class KotlinTvosArm64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmTvosArm64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.TVOS_ARM64,
@@ -322,19 +322,19 @@ open class KotlinTvosArm64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.TVOS_ARM64, KotlinTvosArm64Variant::class.java, ::KotlinTvosArm64Variant
KonanTarget.TVOS_ARM64, KpmTvosArm64Variant::class.java, ::KpmTvosArm64Variant
)
}
}
open class KotlinTvosX64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmTvosX64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.TVOS_X64,
@@ -345,19 +345,19 @@ open class KotlinTvosX64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.TVOS_X64, KotlinTvosX64Variant::class.java, ::KotlinTvosX64Variant
KonanTarget.TVOS_X64, KpmTvosX64Variant::class.java, ::KpmTvosX64Variant
)
}
}
open class KotlinTvosSimulatorArm64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmTvosSimulatorArm64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.TVOS_SIMULATOR_ARM64,
@@ -368,19 +368,19 @@ open class KotlinTvosSimulatorArm64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.TVOS_SIMULATOR_ARM64, KotlinTvosSimulatorArm64Variant::class.java, ::KotlinTvosSimulatorArm64Variant
KonanTarget.TVOS_SIMULATOR_ARM64, KpmTvosSimulatorArm64Variant::class.java, ::KpmTvosSimulatorArm64Variant
)
}
}
open class KotlinLinuxX64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmLinuxX64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.LINUX_X64,
@@ -391,19 +391,19 @@ open class KotlinLinuxX64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.LINUX_X64, KotlinLinuxX64Variant::class.java, ::KotlinLinuxX64Variant
KonanTarget.LINUX_X64, KpmLinuxX64Variant::class.java, ::KpmLinuxX64Variant
)
}
}
open class KotlinMingwX86Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmMingwX86Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.MINGW_X86,
@@ -414,19 +414,19 @@ open class KotlinMingwX86Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.MINGW_X86, KotlinMingwX86Variant::class.java, ::KotlinMingwX86Variant
KonanTarget.MINGW_X86, KpmMingwX86Variant::class.java, ::KpmMingwX86Variant
)
}
}
open class KotlinMingwX64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmMingwX64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.MINGW_X64,
@@ -437,19 +437,19 @@ open class KotlinMingwX64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.MINGW_X64, KotlinMingwX64Variant::class.java, ::KotlinMingwX64Variant
KonanTarget.MINGW_X64, KpmMingwX64Variant::class.java, ::KpmMingwX64Variant
)
}
}
open class KotlinMacosX64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmMacosX64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.MACOS_X64,
@@ -460,19 +460,19 @@ open class KotlinMacosX64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.MACOS_X64, KotlinMacosX64Variant::class.java, ::KotlinMacosX64Variant
KonanTarget.MACOS_X64, KpmMacosX64Variant::class.java, ::KpmMacosX64Variant
)
}
}
open class KotlinMacosArm64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmMacosArm64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.MACOS_ARM64,
@@ -483,19 +483,19 @@ open class KotlinMacosArm64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.MACOS_ARM64, KotlinMacosArm64Variant::class.java, ::KotlinMacosArm64Variant
KonanTarget.MACOS_ARM64, KpmMacosArm64Variant::class.java, ::KpmMacosArm64Variant
)
}
}
open class KotlinLinuxArm64Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmLinuxArm64Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.LINUX_ARM64,
@@ -506,19 +506,19 @@ open class KotlinLinuxArm64Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.LINUX_ARM64, KotlinLinuxArm64Variant::class.java, ::KotlinLinuxArm64Variant
KonanTarget.LINUX_ARM64, KpmLinuxArm64Variant::class.java, ::KpmLinuxArm64Variant
)
}
}
open class KotlinLinuxArm32HfpVariant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmLinuxArm32HfpVariant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.LINUX_ARM32_HFP,
@@ -529,19 +529,19 @@ open class KotlinLinuxArm32HfpVariant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.LINUX_ARM32_HFP, KotlinLinuxArm32HfpVariant::class.java, ::KotlinLinuxArm32HfpVariant
KonanTarget.LINUX_ARM32_HFP, KpmLinuxArm32HfpVariant::class.java, ::KpmLinuxArm32HfpVariant
)
}
}
open class KotlinLinuxMips32Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmLinuxMips32Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.LINUX_MIPS32,
@@ -552,19 +552,19 @@ open class KotlinLinuxMips32Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.LINUX_MIPS32, KotlinLinuxMips32Variant::class.java, ::KotlinLinuxMips32Variant
KonanTarget.LINUX_MIPS32, KpmLinuxMips32Variant::class.java, ::KpmLinuxMips32Variant
)
}
}
open class KotlinLinuxMipsel32Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmLinuxMipsel32Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.LINUX_MIPSEL32,
@@ -575,19 +575,19 @@ open class KotlinLinuxMipsel32Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.LINUX_MIPSEL32, KotlinLinuxMipsel32Variant::class.java, ::KotlinLinuxMipsel32Variant
KonanTarget.LINUX_MIPSEL32, KpmLinuxMipsel32Variant::class.java, ::KpmLinuxMipsel32Variant
)
}
}
open class KotlinWasm32Variant @Inject constructor(
containingModule: KotlinGradleModule,
open class KpmWasm32Variant @Inject constructor(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
hostSpecificMetadataElementsConfiguration: Configuration?
) : KotlinNativeVariantInternal(
) : KpmNativeVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
konanTarget = KonanTarget.WASM32,
@@ -598,66 +598,66 @@ open class KotlinWasm32Variant @Inject constructor(
) {
companion object {
val constructor = KotlinNativeVariantConstructor(
KonanTarget.WASM32, KotlinWasm32Variant::class.java, ::KotlinWasm32Variant
KonanTarget.WASM32, KpmWasm32Variant::class.java, ::KpmWasm32Variant
)
}
}
internal val allKpmNativeVariantConstructors = listOf(
KotlinAndroidNativeX64Variant.constructor,
KotlinAndroidNativeX86Variant.constructor,
KotlinAndroidNativeArm32Variant.constructor,
KotlinAndroidNativeArm64Variant.constructor,
KotlinIosArm32Variant.constructor,
KotlinIosArm64Variant.constructor,
KotlinIosX64Variant.constructor,
KotlinIosSimulatorArm64Variant.constructor,
KotlinWatchosArm32Variant.constructor,
KotlinWatchosArm64Variant.constructor,
KotlinWatchosX86Variant.constructor,
KotlinWatchosX64Variant.constructor,
KotlinWatchosSimulatorArm64Variant.constructor,
KotlinTvosArm64Variant.constructor,
KotlinTvosX64Variant.constructor,
KotlinTvosSimulatorArm64Variant.constructor,
KotlinLinuxX64Variant.constructor,
KotlinMingwX86Variant.constructor,
KotlinMingwX64Variant.constructor,
KotlinMacosX64Variant.constructor,
KotlinMacosArm64Variant.constructor,
KotlinLinuxArm64Variant.constructor,
KotlinLinuxArm32HfpVariant.constructor,
KotlinLinuxMips32Variant.constructor,
KotlinLinuxMipsel32Variant.constructor,
KotlinWasm32Variant.constructor
KpmAndroidNativeX64Variant.constructor,
KpmAndroidNativeX86Variant.constructor,
KpmAndroidNativeArm32Variant.constructor,
KpmAndroidNativeArm64Variant.constructor,
KpmIosArm32Variant.constructor,
KpmIosArm64Variant.constructor,
KpmIosX64Variant.constructor,
KpmIosSimulatorArm64Variant.constructor,
KpmWatchosArm32Variant.constructor,
KpmWatchosArm64Variant.constructor,
KpmWatchosX86Variant.constructor,
KpmWatchosX64Variant.constructor,
KpmWatchosSimulatorArm64Variant.constructor,
KpmTvosArm64Variant.constructor,
KpmTvosX64Variant.constructor,
KpmTvosSimulatorArm64Variant.constructor,
KpmLinuxX64Variant.constructor,
KpmMingwX86Variant.constructor,
KpmMingwX64Variant.constructor,
KpmMacosX64Variant.constructor,
KpmMacosArm64Variant.constructor,
KpmLinuxArm64Variant.constructor,
KpmLinuxArm32HfpVariant.constructor,
KpmLinuxMips32Variant.constructor,
KpmLinuxMipsel32Variant.constructor,
KpmWasm32Variant.constructor
)
internal fun kpmNativeVariantClass(konanTarget: KonanTarget): Class<out KotlinNativeVariantInternal>? = when (konanTarget) {
KonanTarget.ANDROID_X64 -> KotlinAndroidNativeX64Variant::class.java
KonanTarget.ANDROID_X86 -> KotlinAndroidNativeX86Variant::class.java
KonanTarget.ANDROID_ARM32 -> KotlinAndroidNativeArm32Variant::class.java
KonanTarget.ANDROID_ARM64 -> KotlinAndroidNativeArm64Variant::class.java
KonanTarget.IOS_ARM32 -> KotlinIosArm32Variant::class.java
KonanTarget.IOS_ARM64 -> KotlinIosArm64Variant::class.java
KonanTarget.IOS_X64 -> KotlinIosX64Variant::class.java
KonanTarget.IOS_SIMULATOR_ARM64 -> KotlinIosSimulatorArm64Variant::class.java
KonanTarget.WATCHOS_ARM32 -> KotlinWatchosArm32Variant::class.java
KonanTarget.WATCHOS_ARM64 -> KotlinWatchosArm64Variant::class.java
KonanTarget.WATCHOS_X86 -> KotlinWatchosX86Variant::class.java
KonanTarget.WATCHOS_X64 -> KotlinWatchosX64Variant::class.java
KonanTarget.WATCHOS_SIMULATOR_ARM64 -> KotlinWatchosSimulatorArm64Variant::class.java
KonanTarget.TVOS_ARM64 -> KotlinTvosArm64Variant::class.java
KonanTarget.TVOS_X64 -> KotlinTvosX64Variant::class.java
KonanTarget.TVOS_SIMULATOR_ARM64 -> KotlinTvosSimulatorArm64Variant::class.java
KonanTarget.LINUX_X64 -> KotlinLinuxX64Variant::class.java
KonanTarget.MINGW_X86 -> KotlinMingwX86Variant::class.java
KonanTarget.MINGW_X64 -> KotlinMingwX64Variant::class.java
KonanTarget.MACOS_X64 -> KotlinMacosX64Variant::class.java
KonanTarget.MACOS_ARM64 -> KotlinMacosArm64Variant::class.java
KonanTarget.LINUX_ARM64 -> KotlinLinuxArm64Variant::class.java
KonanTarget.LINUX_ARM32_HFP -> KotlinLinuxArm32HfpVariant::class.java
KonanTarget.LINUX_MIPS32 -> KotlinLinuxMips32Variant::class.java
KonanTarget.LINUX_MIPSEL32 -> KotlinLinuxMipsel32Variant::class.java
KonanTarget.WASM32 -> KotlinWasm32Variant::class.java
internal fun kpmNativeVariantClass(konanTarget: KonanTarget): Class<out KpmNativeVariantInternal>? = when (konanTarget) {
KonanTarget.ANDROID_X64 -> KpmAndroidNativeX64Variant::class.java
KonanTarget.ANDROID_X86 -> KpmAndroidNativeX86Variant::class.java
KonanTarget.ANDROID_ARM32 -> KpmAndroidNativeArm32Variant::class.java
KonanTarget.ANDROID_ARM64 -> KpmAndroidNativeArm64Variant::class.java
KonanTarget.IOS_ARM32 -> KpmIosArm32Variant::class.java
KonanTarget.IOS_ARM64 -> KpmIosArm64Variant::class.java
KonanTarget.IOS_X64 -> KpmIosX64Variant::class.java
KonanTarget.IOS_SIMULATOR_ARM64 -> KpmIosSimulatorArm64Variant::class.java
KonanTarget.WATCHOS_ARM32 -> KpmWatchosArm32Variant::class.java
KonanTarget.WATCHOS_ARM64 -> KpmWatchosArm64Variant::class.java
KonanTarget.WATCHOS_X86 -> KpmWatchosX86Variant::class.java
KonanTarget.WATCHOS_X64 -> KpmWatchosX64Variant::class.java
KonanTarget.WATCHOS_SIMULATOR_ARM64 -> KpmWatchosSimulatorArm64Variant::class.java
KonanTarget.TVOS_ARM64 -> KpmTvosArm64Variant::class.java
KonanTarget.TVOS_X64 -> KpmTvosX64Variant::class.java
KonanTarget.TVOS_SIMULATOR_ARM64 -> KpmTvosSimulatorArm64Variant::class.java
KonanTarget.LINUX_X64 -> KpmLinuxX64Variant::class.java
KonanTarget.MINGW_X86 -> KpmMingwX86Variant::class.java
KonanTarget.MINGW_X64 -> KpmMingwX64Variant::class.java
KonanTarget.MACOS_X64 -> KpmMacosX64Variant::class.java
KonanTarget.MACOS_ARM64 -> KpmMacosArm64Variant::class.java
KonanTarget.LINUX_ARM64 -> KpmLinuxArm64Variant::class.java
KonanTarget.LINUX_ARM32_HFP -> KpmLinuxArm32HfpVariant::class.java
KonanTarget.LINUX_MIPS32 -> KpmLinuxMips32Variant::class.java
KonanTarget.LINUX_MIPSEL32 -> KpmLinuxMipsel32Variant::class.java
KonanTarget.WASM32 -> KpmWasm32Variant::class.java
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.topLevelExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier
import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
internal interface KpmGradleProjectModelContainer {
val modules: NamedDomainObjectContainer<KotlinGradleModule>
val metadataCompilationRegistryByModuleId: MutableMap<KotlinModuleIdentifier, MetadataCompilationRegistry>
val modules: NamedDomainObjectContainer<KpmGradleModule>
val metadataCompilationRegistryByModuleId: MutableMap<KpmModuleIdentifier, MetadataCompilationRegistry>
val rootPublication: MavenPublication?
}
@@ -32,15 +32,15 @@ internal val Project.kpmModelContainerOrNull: KpmGradleProjectModelContainer?
internal val Project.hasKpmModel: Boolean
get() = kpmModelContainerOrNull != null
internal val Project.kpmModules: NamedDomainObjectContainer<KotlinGradleModule>
internal val Project.kpmModules: NamedDomainObjectContainer<KpmGradleModule>
get() = kpmModelContainer.modules
internal val Project.metadataCompilationRegistryByModuleId: MutableMap<KotlinModuleIdentifier, MetadataCompilationRegistry>
internal val Project.metadataCompilationRegistryByModuleId: MutableMap<KpmModuleIdentifier, MetadataCompilationRegistry>
get() = kpmModelContainer.metadataCompilationRegistryByModuleId
internal class DefaultKpmGradleProjectModelContainer(
override val modules: NamedDomainObjectContainer<KotlinGradleModule>,
override val metadataCompilationRegistryByModuleId: MutableMap<KotlinModuleIdentifier, MetadataCompilationRegistry>,
override val modules: NamedDomainObjectContainer<KpmGradleModule>,
override val metadataCompilationRegistryByModuleId: MutableMap<KpmModuleIdentifier, MetadataCompilationRegistry>,
) : KpmGradleProjectModelContainer {
override var rootPublication: MavenPublication? = null
@@ -49,10 +49,10 @@ internal class DefaultKpmGradleProjectModelContainer(
return DefaultKpmGradleProjectModelContainer(createKpmModulesContainer(project), mutableMapOf())
}
private fun createKpmModulesContainer(project: Project): NamedDomainObjectContainer<KotlinGradleModule> =
private fun createKpmModulesContainer(project: Project): NamedDomainObjectContainer<KpmGradleModule> =
project.objects.domainObjectContainer(
KotlinGradleModule::class.java,
KpmGradleModule::class.java,
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.utils.filesProvider
import org.jetbrains.kotlin.project.model.KotlinAttributeKey
import org.jetbrains.kotlin.project.model.KotlinModuleDependency
import org.jetbrains.kotlin.project.model.KotlinModuleFragment
import org.jetbrains.kotlin.project.model.KpmModuleDependency
import org.jetbrains.kotlin.tooling.core.MutableExtras
import org.jetbrains.kotlin.tooling.core.mutableExtrasOf
internal open class LegacyMappedVariant(
internal val compilation: KotlinCompilation<*>,
) : KotlinGradleVariant {
) : KpmGradleVariant {
override fun toString(): String = "variant mapped to $compilation"
private val fragmentForDefaultSourceSet =
(compilation.defaultSourceSet as FragmentMappedKotlinSourceSet).underlyingFragment
override val containingModule: KotlinGradleModule get() = fragmentForDefaultSourceSet.containingModule
override val containingModule: KpmGradleModule get() = fragmentForDefaultSourceSet.containingModule
override val platformType: KotlinPlatformType
get() = compilation.platformType
@@ -90,11 +89,11 @@ internal open class LegacyMappedVariant(
override val extras: MutableExtras = mutableExtrasOf()
override fun refines(other: KotlinGradleFragment) {
override fun refines(other: KpmGradleFragment) {
fragmentForDefaultSourceSet.refines(other)
}
override fun refines(other: NamedDomainObjectProvider<KotlinGradleFragment>) {
override fun refines(other: NamedDomainObjectProvider<KpmGradleFragment>) {
fragmentForDefaultSourceSet.refines(other)
}
@@ -106,10 +105,10 @@ internal open class LegacyMappedVariant(
override val fragmentName: String
get() = fragmentForDefaultSourceSet.fragmentName + "Variant"
override val directRefinesDependencies: Iterable<KotlinGradleFragment>
get() = fragmentForDefaultSourceSet.directRefinesDependencies
override val declaredRefinesDependencies: Iterable<KpmGradleFragment>
get() = fragmentForDefaultSourceSet.declaredRefinesDependencies
override val declaredModuleDependencies: Iterable<KotlinModuleDependency>
override val declaredModuleDependencies: Iterable<KpmModuleDependency>
get() = fragmentForDefaultSourceSet.declaredModuleDependencies
/** This configuration includes the dependencies from the refines-parents */
@@ -151,7 +150,7 @@ internal open class LegacyMappedVariant(
internal class LegacyMappedVariantWithRuntime(private val compilationWithRuntime: KotlinCompilationToRunnableFiles<*>) :
LegacyMappedVariant(compilationWithRuntime),
KotlinGradleVariantWithRuntime {
KpmGradleVariantWithRuntime {
override val runtimeDependenciesConfiguration: Configuration
get() = project.configurations.getByName(compilationWithRuntime.runtimeDependencyConfigurationName)
@@ -195,7 +194,7 @@ internal fun mapTargetCompilationsToKpmVariants(target: AbstractKotlinTarget, pu
}
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 ->
val moduleHolder = DefaultSingleMavenPublishedModuleHolder(
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 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
artifact(buildKotlinToolingMetadataTask.map { it.outputFile }) { artifact ->
@@ -67,4 +67,4 @@ private open class SoftwareComponentFactoryHolder @Inject constructor(
return project.objects.newInstance(SoftwareComponentFactoryHolder::class.java)
}
}
}
}
@@ -20,7 +20,7 @@ internal open class TransformKotlinGranularMetadataForFragment
@Inject constructor(
@get:Internal
@field:Transient
val fragment: KotlinGradleFragment,
val fragment: KpmGradleFragment,
//FIXME annotations
private val transformation: FragmentGranularMetadataResolver
) : DefaultTask() {
@@ -16,8 +16,8 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.project.model.KotlinModule
import org.jetbrains.kotlin.project.model.LocalModuleIdentifier
import org.jetbrains.kotlin.project.model.KpmModule
import org.jetbrains.kotlin.project.model.KpmLocalModuleIdentifier
val KotlinProjectExtension.targets: Iterable<KotlinTarget>
get() = when (this) {
@@ -26,8 +26,8 @@ val KotlinProjectExtension.targets: Iterable<KotlinTarget>
else -> error("Unexpected 'kotlin' extension $this")
}
fun KotlinModule.representsProject(project: Project): Boolean =
moduleIdentifier.let { it is LocalModuleIdentifier && it.buildId == project.currentBuildId().name && it.projectId == project.path }
fun KpmModule.representsProject(project: Project): Boolean =
moduleIdentifier.let { it is KpmLocalModuleIdentifier && it.buildId == project.currentBuildId().name && it.projectId == project.path }
// FIXME internal API?
fun Project.currentBuildId(): BuildIdentifier =
@@ -52,4 +52,4 @@ val Project.distsDirectory get() = if (isGradleVersionAtLeast(7, 1)) {
extensions.getByType(BasePluginExtension::class.java).distsDirectory
} else {
convention.getPlugin(BasePluginConvention::class.java).distsDirectory
}
}
@@ -12,11 +12,11 @@ import kotlin.reflect.KClass
internal fun registerDefaultVariantFactories(project: Project) {
project.kpmModules.configureEach { module ->
module.fragments.registerFactory(
KotlinJvmVariant::class.java,
KpmJvmVariant::class.java,
KotlinJvmVariantFactory(module)
)
fun <T : KotlinNativeVariantInternal> registerNativeVariantFactory(
fun <T : KpmNativeVariantInternal> registerNativeVariantFactory(
constructor: KotlinNativeVariantConstructor<T>
) = module.fragments.registerFactory(
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.pm20.util.ComputedCapability
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.utils.dashSeparatedName
import org.jetbrains.kotlin.project.model.KotlinAttributeKey
import org.jetbrains.kotlin.project.model.KotlinPlatformTypeAttribute
abstract class KotlinGradleVariantInternal(
containingModule: KotlinGradleModule,
abstract class KpmGradleVariantInternal(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
final override val compileDependenciesConfiguration: Configuration,
final override val apiElementsConfiguration: Configuration
) : KotlinGradleFragmentInternal(
) : KpmGradleFragmentInternal(
containingModule, fragmentName, dependencyConfigurations
), KotlinGradleVariant {
), KpmGradleVariant {
override val variantAttributes: Map<KotlinAttributeKey, String>
get() = mapOf(KotlinPlatformTypeAttribute to kotlinPlatformTypeAttributeFromPlatform(platformType)) // TODO user attributes
@@ -51,7 +50,7 @@ abstract class KotlinGradleVariantInternal(
}
class DefaultSingleMavenPublishedModuleHolder(
private var module: KotlinGradleModule, override val defaultPublishedModuleSuffix: String?
private var module: KpmGradleModule, override val defaultPublishedModuleSuffix: String?
) : SingleMavenPublishedModuleHolder {
private val project get() = module.project
@@ -80,24 +79,24 @@ class DefaultSingleMavenPublishedModuleHolder(
private fun kotlinPlatformTypeAttributeFromPlatform(platformType: KotlinPlatformType) = platformType.name
// TODO: rewrite with the artifacts API
internal val KotlinGradleVariant.defaultSourceArtifactTaskName: String
internal val KpmGradleVariant.defaultSourceArtifactTaskName: String
get() = disambiguateName("sourcesJar")
abstract class KotlinGradleVariantWithRuntimeInternal(
containingModule: KotlinGradleModule,
abstract class KpmGradleVariantWithRuntimeInternal(
containingModule: KpmGradleModule,
fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
final override val runtimeDependenciesConfiguration: Configuration,
final override val runtimeElementsConfiguration: Configuration
) : KotlinGradleVariantInternal(
) : KpmGradleVariantInternal(
containingModule = containingModule,
fragmentName = fragmentName,
dependencyConfigurations = dependencyConfigurations,
compileDependenciesConfiguration = compileDependencyConfiguration,
apiElementsConfiguration = apiElementsConfiguration
), KotlinGradleVariantWithRuntime {
), KpmGradleVariantWithRuntime {
// TODO deduplicate with KotlinCompilation?
override var runtimeDependencyFiles: FileCollection = project.files(runtimeDependenciesConfiguration)
@@ -106,17 +105,17 @@ abstract class KotlinGradleVariantWithRuntimeInternal(
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)
abstract class KotlinGradlePublishedVariantWithRuntime(
containingModule: KotlinGradleModule, fragmentName: String,
abstract class KpmGradlePublishedVariantWithRuntime(
containingModule: KpmGradleModule, fragmentName: String,
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
compileDependencyConfiguration: Configuration,
apiElementsConfiguration: Configuration,
runtimeDependencyConfiguration: Configuration,
runtimeElementsConfiguration: Configuration
) : KotlinGradleVariantWithRuntimeInternal(
) : KpmGradleVariantWithRuntimeInternal(
containingModule = containingModule,
fragmentName = fragmentName,
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.lowerCamelCaseName
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
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
createResolvableMetadataConfigurationForModule(module)
@@ -52,7 +52,7 @@ internal fun configureMetadataResolutionAndBuild(module: KotlinGradleModule) {
generateAndExportProjectStructureMetadata(module)
}
internal fun configureMetadataExposure(module: KotlinGradleModule) {
internal fun configureMetadataExposure(module: KpmGradleModule) {
val project = module.project
project.configurations.create(metadataElementsConfigurationName(module)).apply {
isCanBeConsumed = false
@@ -83,14 +83,14 @@ internal fun configureMetadataExposure(module: KotlinGradleModule) {
)
}
fun metadataElementsConfigurationName(module: KotlinGradleModule) =
fun metadataElementsConfigurationName(module: KpmGradleModule) =
module.disambiguateName("metadataElements")
fun sourceElementsConfigurationName(module: KotlinGradleModule) =
fun sourceElementsConfigurationName(module: KpmGradleModule) =
module.disambiguateName("sourceElements")
private fun generateAndExportProjectStructureMetadata(
module: KotlinGradleModule
module: KpmGradleModule
) {
val project = module.project
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
project.configurations.create(module.resolvableMetadataConfigurationName).apply {
isCanBeConsumed = false
@@ -121,7 +121,7 @@ private fun createResolvableMetadataConfigurationForModule(module: KotlinGradleM
}
private fun configureMetadataCompilationsAndCreateRegistry(
module: KotlinGradleModule,
module: KpmGradleModule,
metadataCompilationRegistry: MetadataCompilationRegistry
) {
val project = module.project
@@ -143,7 +143,7 @@ private fun configureMetadataCompilationsAndCreateRegistry(
}
private fun configureMetadataJarTask(
module: KotlinGradleModule,
module: KpmGradleModule,
registry: MetadataCompilationRegistry
) {
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)
private fun createCommonMetadataCompilation(
fragment: KotlinGradleFragment,
fragment: KpmGradleFragment,
compileAllTask: TaskProvider<DefaultTask>,
metadataCompilationRegistry: MetadataCompilationRegistry
) {
@@ -194,7 +194,7 @@ private fun createCommonMetadataCompilation(
}
private fun createNativeMetadataCompilation(
fragment: KotlinGradleFragment,
fragment: KpmGradleFragment,
compileAllTask: TaskProvider<DefaultTask>,
metadataCompilationRegistry: MetadataCompilationRegistry
) {
@@ -216,7 +216,7 @@ private fun createNativeMetadataCompilation(
private class MetadataCompilationTasksConfigurator(project: Project) : KotlinCompilationTaskConfigurator(project) {
fun createKotlinCommonCompilationTask(
fragment: KotlinGradleFragment,
fragment: KpmGradleFragment,
compilationData: KotlinCommonFragmentMetadataCompilationData
) {
KotlinCommonSourceSetProcessor(
@@ -235,22 +235,22 @@ private class MetadataCompilationTasksConfigurator(project: Project) : KotlinCom
}
fun createKotlinNativeMetadataCompilationTask(
fragment: KotlinGradleFragment,
fragment: KpmGradleFragment,
compilationData: KotlinNativeFragmentMetadataCompilationData
): TaskProvider<KotlinNativeCompile> = createKotlinNativeCompilationTask(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)) }
}
override fun getCommonSourcesForFragmentCompilation(fragment: KotlinGradleFragment): MultipleSourceRootsProvider {
override fun getCommonSourcesForFragmentCompilation(fragment: KpmGradleFragment): MultipleSourceRootsProvider {
return project.provider { listOf(fragmentSourcesProvider.getFragmentOwnSources(fragment)) }
}
}
private fun resolvedMetadataProviders(fragment: KotlinGradleFragment) =
private fun resolvedMetadataProviders(fragment: KpmGradleFragment) =
fragment.withRefinesClosure.map {
FragmentResolvedMetadataProvider(
fragment.project.tasks.withType<TransformKotlinGranularMetadataForFragment>().named(transformFragmentMetadataTaskName(it))
@@ -259,7 +259,7 @@ private fun resolvedMetadataProviders(fragment: KotlinGradleFragment) =
private fun createExtractMetadataTask(
project: Project,
fragment: KotlinGradleFragment,
fragment: KpmGradleFragment,
transformation: FragmentGranularMetadataResolver
) {
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"))
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
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.KotlinGradleVariantWithRuntime
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleVariant
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleVariantWithRuntime
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName
import org.jetbrains.kotlin.gradle.utils.filesProvider
@@ -20,7 +20,7 @@ interface DependencyFilesHolder {
companion object
}
internal fun DependencyFilesHolder.Companion.ofVariantCompileDependencies(variant: KotlinGradleVariant): DependencyFilesHolder =
internal fun DependencyFilesHolder.Companion.ofVariantCompileDependencies(variant: KpmGradleVariant): DependencyFilesHolder =
object : DependencyFilesHolder {
override val dependencyConfigurationName: String
get() = variant.compileDependenciesConfiguration.name
@@ -29,7 +29,7 @@ internal fun DependencyFilesHolder.Companion.ofVariantCompileDependencies(varian
set(value) { variant.compileDependencyFiles = value }
}
internal fun DependencyFilesHolder.Companion.ofVariantRuntimeDependencies(variant: KotlinGradleVariantWithRuntime): DependencyFilesHolder =
internal fun DependencyFilesHolder.Companion.ofVariantRuntimeDependencies(variant: KpmGradleVariantWithRuntime): DependencyFilesHolder =
object : DependencyFilesHolder {
override val dependencyConfigurationName: String
get() = variant.runtimeDependenciesConfiguration.name
@@ -58,4 +58,4 @@ internal fun Project.newDependencyFilesHolder(dependencyConfigurationName: Strin
SimpleDependencyFilesHolder(
dependencyConfigurationName,
project.filesProvider { project.configurations.getByName(dependencyConfigurationName) }
)
)
@@ -7,10 +7,10 @@
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.project.model.KotlinModule
import org.jetbrains.kotlin.project.model.KotlinModuleFragment
import org.jetbrains.kotlin.project.model.KpmModule
import org.jetbrains.kotlin.project.model.KpmFragment
/**
* Mechanism for disambiguating/scoping names for certain entities (e.g. fragments)
@@ -36,41 +36,41 @@ interface KotlinNameDisambiguation {
/* Default implementation for fragments */
internal fun FragmentNameDisambiguation(module: KotlinModule, fragmentName: String): KotlinNameDisambiguation {
internal fun FragmentNameDisambiguation(module: KpmModule, fragmentName: String): KotlinNameDisambiguation {
return DefaultKotlinFragmentNameDisambiguation(module, fragmentName)
}
internal fun FragmentNameDisambiguationOmittingMain(module: KotlinModule, fragmentName: String): KotlinNameDisambiguation {
internal fun FragmentNameDisambiguationOmittingMain(module: KpmModule, fragmentName: String): KotlinNameDisambiguation {
return DefaultKotlinFragmentNameDisambiguationOmittingMain(module, fragmentName)
}
private class DefaultKotlinFragmentNameDisambiguation(
private val module: KotlinModule,
private val module: KpmModule,
private val fragmentName: String
) : KotlinNameDisambiguation {
override fun disambiguateName(simpleName: String): String {
return KotlinModuleFragment.disambiguateName(module, fragmentName, simpleName)
return KpmFragment.disambiguateName(module, fragmentName, simpleName)
}
}
private class DefaultKotlinFragmentNameDisambiguationOmittingMain(
private val module: KotlinModule,
private val module: KpmModule,
private val fragmentName: String
) : KotlinNameDisambiguation {
override fun disambiguateName(simpleName: String): String {
return KotlinModuleFragment.disambiguateNameOmittingMain(module, fragmentName, simpleName)
return KpmFragment.disambiguateNameOmittingMain(module, fragmentName, simpleName)
}
}
internal fun KotlinModuleFragment.disambiguateName(simpleName: String) =
KotlinModuleFragment.disambiguateName(containingModule, fragmentName, simpleName)
internal fun KpmFragment.disambiguateName(simpleName: String) =
KpmFragment.disambiguateName(containingModule, fragmentName, simpleName)
internal val KotlinModuleFragment.unambiguousNameInProject
internal val KpmFragment.unambiguousNameInProject
get() = disambiguateName("")
internal fun KotlinModuleFragment.Companion.disambiguateName(module: KotlinModule, fragmentName: String, simpleName: String) =
lowerCamelCaseName(fragmentName, module.moduleIdentifier.moduleClassifier ?: KotlinGradleModule.MAIN_MODULE_NAME, simpleName)
internal fun KpmFragment.Companion.disambiguateName(module: KpmModule, fragmentName: String, simpleName: String) =
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)
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util
import org.gradle.api.capabilities.Capability
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(
val groupProvider: Provider<String>,
@@ -22,7 +22,7 @@ internal class ComputedCapability(
override fun getVersion(): String? = versionProvider.get()
companion object {
fun fromModule(module: KotlinGradleModule): ComputedCapability {
fun fromModule(module: KpmGradleModule): ComputedCapability {
val project = module.project
return ComputedCapability(
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)
fromModule(module)
else null
fun capabilityStringFromModule(module: KotlinGradleModule): String? =
fun capabilityStringFromModule(module: KpmGradleModule): String? =
if (module.moduleClassifier != null) fromModule(module).notation() else null
}
fun notation(): String = "$group:$name:$version"
}
}
@@ -5,13 +5,13 @@
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.project.model.KotlinModule
import org.jetbrains.kotlin.project.model.KpmModule
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() }
internal val GradleDependencyGraph.allDependencyModules: Iterable<KotlinModule>
internal val KpmGradleDependencyGraph.allDependencyModules: Iterable<KpmModule>
get() = allDependencyNodes.map { it.module }
@@ -5,7 +5,6 @@
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.artifacts.Configuration
import org.gradle.api.artifacts.ModuleDependency
@@ -33,14 +32,14 @@ import javax.inject.Inject
interface PlatformPublicationToMavenRequest {
val componentName: String
val fromModule: KotlinGradleModule
val fromModule: KpmGradleModule
val publicationHolder: SingleMavenPublishedModuleHolder
val variantPublicationRequests: Iterable<VariantPublicationRequest>
}
data class BasicPlatformPublicationToMavenRequest(
override val componentName: String,
override val fromModule: KotlinGradleModule,
override val fromModule: KpmGradleModule,
override val publicationHolder: SingleMavenPublishedModuleHolder,
override val variantPublicationRequests: Iterable<VariantPublicationRequest>
) : 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,
* so that a variant may expose an arbitrary set of configurations rather just { API, runtime } or { API } */
interface VariantPublicationRequest {
val fromVariant: KotlinGradleVariant
val fromVariant: KpmGradleVariant
val publishConfiguration: Configuration
}
data class BasicVariantPublicationRequest(
override val fromVariant: KotlinGradleVariant,
override val fromVariant: KpmGradleVariant,
override val publishConfiguration: Configuration
) : VariantPublicationRequest
fun VariantPublishingConfigurator.configureNativeVariantPublication(variant: KotlinNativeVariantInternal) {
fun VariantPublishingConfigurator.configureNativeVariantPublication(variant: KpmNativeVariantInternal) {
val publishConfigurations = listOfNotNull(
variant.apiElementsConfiguration,
variant.hostSpecificMetadataElementsConfiguration // host-specific metadata may be absent
@@ -72,13 +71,13 @@ fun VariantPublishingConfigurator.configureNativeVariantPublication(variant: Kot
configureSingleVariantPublishing(variant, variant, publishConfigurations)
}
fun VariantPublishingConfigurator.configureSingleVariantPublication(variant: KotlinGradlePublishedVariantWithRuntime) {
fun VariantPublishingConfigurator.configureSingleVariantPublication(variant: KpmGradlePublishedVariantWithRuntime) {
val publishConfigurations = listOf(variant.apiElementsConfiguration, variant.runtimeElementsConfiguration)
configureSingleVariantPublishing(variant, variant, publishConfigurations)
}
fun VariantPublishingConfigurator.configureSingleVariantPublishing(
variant: KotlinGradleVariant,
variant: KpmGradleVariant,
publishedModuleHolder: SingleMavenPublishedModuleHolder,
publishConfigurations: Iterable<Configuration>
) {
@@ -103,12 +102,12 @@ open class VariantPublishingConfigurator @Inject constructor(
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 {
configurationName == variant.apiElementsConfiguration.name -> "compile"
variant is KotlinGradleVariantWithRuntime && configurationName == variant.runtimeElementsConfiguration.name -> "runtime"
variant is KpmGradleVariantWithRuntime && configurationName == variant.runtimeElementsConfiguration.name -> "runtime"
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 docsVariants = DocumentationVariantConfigurator().createSourcesElementsConfiguration(configurationName, variant)
project.components.withType(AdhocComponentWithVariants::class.java).named(componentName).configure { component ->
@@ -205,7 +204,7 @@ open class VariantPublishingConfigurator @Inject constructor(
protected open fun registerPlatformVariantsInRootModule(
publishedModuleHolder: SingleMavenPublishedModuleHolder,
kotlinModule: KotlinGradleModule,
kotlinModule: KpmGradleModule,
variantRequests: Iterable<VariantPublicationRequest>
) {
val platformModuleDependencyProvider = project.provider {
@@ -238,7 +237,7 @@ open class VariantPublishingConfigurator @Inject constructor(
}
internal data class AdvancedVariantPublicationRequest(
override val fromVariant: KotlinGradleVariant,
override val fromVariant: KpmGradleVariant,
override val publishConfiguration: Configuration,
val overrideConfigurationAttributesForPublication: AttributeContainer?,
val overrideConfigurationArtifactsForPublication: Provider<out Iterable<PublishArtifact>>?,
@@ -271,7 +270,7 @@ open class DocumentationVariantConfigurator {
open fun createSourcesElementsConfiguration(
configurationName: String,
variant: KotlinGradleVariant
variant: KpmGradleVariant
): Configuration {
val sourcesArtifactTask = variant.project.tasks.withType<AbstractArchiveTask>().named(variant.sourceArchiveTaskName)
val artifactClassifier = dashSeparatedName(variant.containingModule.moduleClassifier, "sources")
@@ -283,4 +282,4 @@ open class DocumentationVariantConfigurator {
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.LanguageSettingsBuilder
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
class FragmentMappedKotlinSourceSet(
private val sourceSetName: String,
private val project: Project,
internal val underlyingFragment: KotlinGradleFragment
internal val underlyingFragment: KpmGradleFragment
) : KotlinSourceSet {
val displayName: String
get() = sourceSetName
@@ -75,7 +74,7 @@ class FragmentMappedKotlinSourceSet(
override val dependsOn: Set<KotlinSourceSet>
get() = project.kotlinExtension.sourceSets.filter {
it is FragmentMappedKotlinSourceSet && it.underlyingFragment in underlyingFragment.directRefinesDependencies
it is FragmentMappedKotlinSourceSet && it.underlyingFragment in underlyingFragment.declaredRefinesDependencies
}.toSet()
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.plugin.mpp.KotlinAndroidTarget
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
interface SourceSetMappedFragmentLocator {
@@ -36,7 +36,7 @@ internal class MultiplatformSourceSetMappedFragmentLocator : SourceSetMappedFrag
override fun locateFragmentForSourceSet(project: Project, sourceSetName: String): SourceSetMappedFragmentLocator.FragmentLocation {
val camelCaseParts = sourceSetName.camelCaseParts()
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) {
@@ -55,7 +55,7 @@ internal class MultiplatformSourceSetMappedFragmentLocator : SourceSetMappedFrag
androidSourceSetModuleName(androidTarget.name, sourceSetName)
else null
} ?: candidateModuleNames.lastOrNull { project.kpmModules.findByName(it) != null }
?: KotlinGradleModule.MAIN_MODULE_NAME
?: KpmGradleModule.MAIN_MODULE_NAME
val fragmentName =
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
return when {
"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
}
internal fun Project.createGenerateProjectStructureMetadataTask(module: KotlinGradleModule): TaskProvider<GenerateProjectStructureMetadata> =
internal fun Project.createGenerateProjectStructureMetadataTask(module: KpmGradleModule): TaskProvider<GenerateProjectStructureMetadata> =
project.registerTask(lowerCamelCaseName("generate", module.moduleClassifier, "ProjectStructureMetadata")) { task ->
task.lazyKotlinProjectStructureMetadata = lazy { buildProjectStructureMetadata(module) }
}
@@ -39,7 +39,7 @@ internal class KpmMetadataTargetConfigurator(private val metadataTargetConfigura
private fun configureTargetWithKpm(target: KotlinMetadataTarget) {
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)
mainModule.fragments.forEach { fragment ->
val compilationData = metadataCompilations.getForFragmentOrNull(fragment) ?: return@forEach
@@ -53,7 +53,7 @@ internal class KpmMetadataTargetConfigurator(private val metadataTargetConfigura
val compilation = when {
isNative -> {
val konanTargets =
mainModule.variantsContainingFragment(fragment).map { (it as KotlinNativeVariantInternal).konanTarget }
mainModule.variantsContainingFragment(fragment).map { (it as KpmNativeVariantInternal).konanTarget }
KotlinSharedNativeCompilation(konanTargets, compilationDetails as CompilationDetails<KotlinCommonOptions>)
}
else -> KotlinCommonCompilation(compilationDetails as CompilationDetails<KotlinMultiplatformCommonOptions>)
@@ -158,12 +158,12 @@ private fun <T> getHostSpecificElements(
): Set<T> = fragments.filterTo(mutableSetOf()) { isNativeShared(it) && isHostSpecificKonanTargetsSet(getKonanTargets(it)) }
internal fun getHostSpecificFragments(
module: KotlinGradleModule
): Set<KotlinGradleFragment> = getHostSpecificElements<KotlinGradleFragment>(
module: KpmGradleModule
): Set<KpmGradleFragment> = getHostSpecificElements<KpmGradleFragment>(
module.fragments,
isNativeShared = { it.isNativeShared() },
getKonanTargets = {
val nativeVariants = module.variantsContainingFragment(it).filterIsInstance<KotlinNativeVariantInternal>()
val nativeVariants = module.variantsContainingFragment(it).filterIsInstance<KpmNativeVariantInternal>()
nativeVariants.mapTo(mutableSetOf()) { it.konanTarget }
}
)
@@ -450,7 +450,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
it.dependsOn(compileTaskProvider)
}
}
val shouldAddCompileOutputsToElements = compilation.owner is KotlinGradleVariant || compilation.isMainCompilationData()
val shouldAddCompileOutputsToElements = compilation.owner is KpmGradleVariant || compilation.isMainCompilationData()
if (shouldAddCompileOutputsToElements) {
createRegularKlibArtifact(compilation, compileTaskProvider)
}
@@ -536,7 +536,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
private val KotlinNativeCompilationData<*>.apiElementsConfigurationName: String
get() = when (val dataOwner = owner) {
is KotlinGradleVariant -> dataOwner.apiElementsConfiguration.name
is KpmGradleVariant -> dataOwner.apiElementsConfiguration.name
is KotlinTarget -> dataOwner.apiElementsConfigurationName
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.outputFilesProvider
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.util.concurrent.Callable
import javax.inject.Inject
@@ -104,7 +104,7 @@ internal open class CInteropMetadataDependencyTransformationTask @Inject constru
@Suppress("unused")
class ChooseVisibleSourceSetProjection(
@Input val dependencyModuleIdentifiers: List<KotlinModuleIdentifier>,
@Input val dependencyModuleIdentifiers: List<KpmModuleIdentifier>,
@Nested val projectStructureMetadata: KotlinProjectStructureMetadata,
@Input val visibleSourceSetsProvidingCInterops: Set<String>
) {

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