[kpm] Introduce GradleKpm* naming convention (1/2)
All Gradle specific kpm entities shall be disambiguated by using the `GradleKpm` prefix. For example `MyEntity` shall now be called `GradleKpmMyEntity` and a subclass would be called like `GradleKpmSpecialMyEntity`
This commit is contained in:
committed by
Space
parent
e55f00c3d9
commit
dcd47a89dd
+1
-1
@@ -14,4 +14,4 @@ import org.jetbrains.kotlin.project.model.*
|
||||
*/
|
||||
interface GradleKpmCompilerPlugin : Plugin<Project> {
|
||||
val kpmCompilerPlugin: KpmCompilerPlugin
|
||||
}
|
||||
}
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.publish.maven.MavenPublication
|
||||
|
||||
interface GradleKpmSingleMavenPublishedModuleHolder {
|
||||
fun assignMavenPublication(publication: MavenPublication)
|
||||
fun whenPublicationAssigned(handlePublication: (MavenPublication) -> Unit)
|
||||
val defaultPublishedModuleSuffix: String?
|
||||
val publishedMavenModuleCoordinates: PublishedModuleCoordinatesProvider
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.file.SourceDirectorySet
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationOutput
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.project.model.LanguageSettings
|
||||
|
||||
interface GradleKpmVariantCompilationData<T : KotlinCommonOptions> : KotlinCompilationData<T> {
|
||||
override val owner: GradleKpmVariant
|
||||
|
||||
override val project: Project get() = owner.containingModule.project
|
||||
|
||||
override val compilationPurpose: String
|
||||
get() = owner.containingModule.name
|
||||
|
||||
override val compilationClassifier: String
|
||||
get() = owner.name
|
||||
|
||||
override val output: KotlinCompilationOutput
|
||||
get() = owner.compilationOutputs
|
||||
|
||||
override val compileKotlinTaskName: String
|
||||
|
||||
override val compileAllTaskName: String
|
||||
|
||||
override val kotlinSourceDirectoriesByFragmentName: Map<String, SourceDirectorySet>
|
||||
|
||||
override val compileDependencyFiles: FileCollection
|
||||
get() = owner.compileDependencyFiles
|
||||
|
||||
override val languageSettings: LanguageSettings
|
||||
get() = owner.languageSettings
|
||||
|
||||
override val platformType: KotlinPlatformType
|
||||
get() = owner.platformType
|
||||
|
||||
override val ownModuleName: String
|
||||
}
|
||||
-31
@@ -38,34 +38,3 @@ interface KotlinCompilationData<T : KotlinCommonOptions> {
|
||||
val friendPaths: Iterable<FileCollection>
|
||||
}
|
||||
|
||||
interface KotlinVariantCompilationData<T : KotlinCommonOptions> : KotlinCompilationData<T> {
|
||||
override val owner: KpmGradleVariant
|
||||
|
||||
override val project: Project get() = owner.containingModule.project
|
||||
|
||||
override val compilationPurpose: String
|
||||
get() = owner.containingModule.name
|
||||
|
||||
override val compilationClassifier: String
|
||||
get() = owner.name
|
||||
|
||||
override val output: KotlinCompilationOutput
|
||||
get() = owner.compilationOutputs
|
||||
|
||||
override val compileKotlinTaskName: String
|
||||
|
||||
override val compileAllTaskName: String
|
||||
|
||||
override val kotlinSourceDirectoriesByFragmentName: Map<String, SourceDirectorySet>
|
||||
|
||||
override val compileDependencyFiles: FileCollection
|
||||
get() = owner.compileDependencyFiles
|
||||
|
||||
override val languageSettings: LanguageSettings
|
||||
get() = owner.languageSettings
|
||||
|
||||
override val platformType: KotlinPlatformType
|
||||
get() = owner.platformType
|
||||
|
||||
override val ownModuleName: String
|
||||
}
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
|
||||
interface KotlinDependencyConfigurations {
|
||||
interface GradleKpmDependencyConfigurations {
|
||||
val apiConfiguration: Configuration
|
||||
val implementationConfiguration: Configuration
|
||||
val compileOnlyConfiguration: Configuration
|
||||
|
||||
+3
-3
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
|
||||
interface KotlinFragmentDependencyConfigurations : KotlinDependencyConfigurations {
|
||||
interface GradleKpmFragmentDependencyConfigurations : GradleKpmDependencyConfigurations {
|
||||
/** This configuration includes the dependencies from the refines-parents */
|
||||
val transitiveApiConfiguration: Configuration
|
||||
|
||||
@@ -25,7 +25,7 @@ interface KotlinFragmentDependencyConfigurations : KotlinDependencyConfiguration
|
||||
override val transitiveApiConfiguration: Configuration,
|
||||
override val transitiveImplementationConfiguration: Configuration,
|
||||
override val transitiveRuntimeOnlyConfiguration: Configuration
|
||||
) : KotlinFragmentDependencyConfigurations
|
||||
) : GradleKpmFragmentDependencyConfigurations
|
||||
|
||||
companion object {
|
||||
fun create(
|
||||
@@ -36,7 +36,7 @@ interface KotlinFragmentDependencyConfigurations : KotlinDependencyConfiguration
|
||||
transitiveApiConfiguration: Configuration,
|
||||
transitiveImplementationConfiguration: Configuration,
|
||||
transitiveRuntimeOnlyConfiguration: Configuration
|
||||
): KotlinFragmentDependencyConfigurations = Impl(
|
||||
): GradleKpmFragmentDependencyConfigurations = Impl(
|
||||
apiConfiguration = apiConfiguration,
|
||||
implementationConfiguration = implementationConfiguration,
|
||||
compileOnlyConfiguration = compileOnlyConfiguration,
|
||||
|
||||
+10
-10
@@ -18,10 +18,10 @@ import org.jetbrains.kotlin.tooling.core.MutableExtras
|
||||
import org.jetbrains.kotlin.tooling.core.closure
|
||||
import org.jetbrains.kotlin.tooling.core.withClosure
|
||||
|
||||
interface KpmGradleFragment : KpmFragment, HasKotlinDependencies, KotlinFragmentDependencyConfigurations, Named {
|
||||
interface GradleKpmFragment : KpmFragment, HasKotlinDependencies, GradleKpmFragmentDependencyConfigurations, Named {
|
||||
override val kotlinSourceRoots: SourceDirectorySet
|
||||
|
||||
override val containingModule: KpmGradleModule
|
||||
override val containingModule: GradleKpmModule
|
||||
|
||||
override fun getName(): String = fragmentName
|
||||
|
||||
@@ -32,16 +32,16 @@ interface KpmGradleFragment : KpmFragment, HasKotlinDependencies, KotlinFragment
|
||||
|
||||
val extras: MutableExtras
|
||||
|
||||
fun refines(other: KpmGradleFragment)
|
||||
fun refines(other: GradleKpmFragment)
|
||||
|
||||
fun refines(other: NamedDomainObjectProvider<KpmGradleFragment>)
|
||||
fun refines(other: NamedDomainObjectProvider<GradleKpmFragment>)
|
||||
|
||||
override val declaredRefinesDependencies: Iterable<KpmGradleFragment>
|
||||
override val declaredRefinesDependencies: Iterable<GradleKpmFragment>
|
||||
|
||||
override val refinesClosure: Set<KpmGradleFragment>
|
||||
override val refinesClosure: Set<GradleKpmFragment>
|
||||
get() = this.closure { it.declaredRefinesDependencies }
|
||||
|
||||
override val withRefinesClosure: Set<KpmGradleFragment>
|
||||
override val withRefinesClosure: Set<GradleKpmFragment>
|
||||
get() = this.withClosure { it.declaredRefinesDependencies }
|
||||
|
||||
override fun dependencies(configureClosure: Closure<Any?>) =
|
||||
@@ -69,8 +69,8 @@ interface KpmGradleFragment : KpmFragment, HasKotlinDependencies, KotlinFragment
|
||||
listOf(transitiveApiConfiguration.name, transitiveImplementationConfiguration.name)
|
||||
}
|
||||
|
||||
val KpmGradleFragment.path: String
|
||||
val GradleKpmFragment.path: String
|
||||
get() = "${project.path}/${containingModule.name}/$fragmentName"
|
||||
|
||||
val KpmGradleFragment.containingVariants: Set<KpmGradleVariant>
|
||||
get() = containingModule.variantsContainingFragment(this).map { it as KpmGradleVariant }.toSet()
|
||||
val GradleKpmFragment.containingVariants: Set<GradleKpmVariant>
|
||||
get() = containingModule.variantsContainingFragment(this).map { it as GradleKpmVariant }.toSet()
|
||||
|
||||
+6
-6
@@ -16,14 +16,14 @@ import org.jetbrains.kotlin.project.model.KpmModule
|
||||
import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
|
||||
import org.jetbrains.kotlin.project.model.KpmCompilerPlugin
|
||||
|
||||
interface KpmGradleModule : KpmModule, Named, HasKotlinDependencies {
|
||||
interface GradleKpmModule : KpmModule, Named, HasKotlinDependencies {
|
||||
val project: Project
|
||||
val moduleClassifier: String?
|
||||
|
||||
override val fragments: ExtensiblePolymorphicDomainObjectContainer<KpmGradleFragment>
|
||||
override val fragments: ExtensiblePolymorphicDomainObjectContainer<GradleKpmFragment>
|
||||
|
||||
// TODO DSL & build script model: find a way to create a flexible typed view on fragments?
|
||||
override val variants: NamedDomainObjectSet<KpmGradleVariant>
|
||||
override val variants: NamedDomainObjectSet<GradleKpmVariant>
|
||||
|
||||
override val plugins: Set<KpmCompilerPlugin>
|
||||
|
||||
@@ -47,10 +47,10 @@ interface KpmGradleModule : KpmModule, Named, HasKotlinDependencies {
|
||||
|
||||
// DSL
|
||||
|
||||
val common: KpmGradleFragment
|
||||
get() = fragments.getByName(KpmGradleFragment.COMMON_FRAGMENT_NAME)
|
||||
val common: GradleKpmFragment
|
||||
get() = fragments.getByName(GradleKpmFragment.COMMON_FRAGMENT_NAME)
|
||||
|
||||
fun common(configure: KpmGradleFragment.() -> Unit) =
|
||||
fun common(configure: GradleKpmFragment.() -> Unit) =
|
||||
common.configure()
|
||||
|
||||
override fun dependencies(configure: KotlinDependencyHandler.() -> Unit) =
|
||||
|
||||
+3
-11
@@ -8,12 +8,11 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.file.ConfigurableFileCollection
|
||||
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.KpmVariant
|
||||
|
||||
interface KpmGradleVariant : KpmGradleFragment, KpmVariant {
|
||||
interface GradleKpmVariant : GradleKpmFragment, KpmVariant {
|
||||
val platformType: KotlinPlatformType
|
||||
|
||||
// TODO generalize with KotlinCompilation?
|
||||
@@ -33,7 +32,7 @@ interface KpmGradleVariant : KpmGradleFragment, KpmVariant {
|
||||
val gradleVariantNames: Set<String>
|
||||
}
|
||||
|
||||
interface KpmGradleVariantWithRuntime : KpmGradleVariant {
|
||||
interface GradleKpmVariantWithRuntime : GradleKpmVariant {
|
||||
// TODO deduplicate with KotlinCompilation?
|
||||
val runtimeDependenciesConfiguration: Configuration
|
||||
|
||||
@@ -45,7 +44,7 @@ interface KpmGradleVariantWithRuntime : KpmGradleVariant {
|
||||
val runtimeElementsConfiguration: Configuration
|
||||
}
|
||||
|
||||
interface KpmNativeVariant : KpmGradleVariant {
|
||||
interface GradleKpmNativeVariant : GradleKpmVariant {
|
||||
override val platformType: KotlinPlatformType
|
||||
get() = KotlinPlatformType.native
|
||||
|
||||
@@ -54,13 +53,6 @@ interface KpmNativeVariant : KpmGradleVariant {
|
||||
var enableEndorsedLibraries: Boolean
|
||||
}
|
||||
|
||||
interface SingleMavenPublishedModuleHolder {
|
||||
fun assignMavenPublication(publication: MavenPublication)
|
||||
fun whenPublicationAssigned(handlePublication: (MavenPublication) -> Unit)
|
||||
val defaultPublishedModuleSuffix: String?
|
||||
val publishedMavenModuleCoordinates: PublishedModuleCoordinatesProvider
|
||||
}
|
||||
|
||||
interface PublishedModuleCoordinatesProvider {
|
||||
val group: String
|
||||
val name: String
|
||||
|
||||
@@ -45,7 +45,7 @@ val generateKpmNativeVariants by generator(
|
||||
listOf(generateMppTargetContainerWithPresets, generateAbstractBinaryContainer, generateKpmNativeVariants).forEach {
|
||||
it.systemProperty(
|
||||
"org.jetbrains.kotlin.generators.gradle.dsl.outputSourceRoot",
|
||||
project(":kotlin-gradle-plugin").projectDir.resolve("src/main/kotlin").absolutePath
|
||||
project(":kotlin-gradle-plugin").projectDir.resolve("src/common/kotlin").absolutePath
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+8
-8
@@ -41,7 +41,7 @@ fun kpmNativeVariantsSourceCode() = """
|
||||
${kpmVariantClassFunction().indented(skipFirstLine = true)}
|
||||
""".trimIndent()
|
||||
|
||||
private val fileName = "KpmNativeVariants.kt"
|
||||
private val fileName = "nativeVariants.kt"
|
||||
|
||||
private val packageName = "org.jetbrains.kotlin.gradle.plugin.mpp.pm20"
|
||||
|
||||
@@ -53,13 +53,13 @@ private fun variantClasses() = allKonanTargets()
|
||||
|
||||
private fun variantClass(konanTarget: KonanTarget) = """
|
||||
open class ${konanTarget.variantClassName} @Inject constructor(
|
||||
containingModule: KotlinGradleModule,
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KotlinNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.${konanTarget.className},
|
||||
@@ -69,7 +69,7 @@ private fun variantClass(konanTarget: KonanTarget) = """
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.${konanTarget.className}, ${konanTarget.variantClassName}::class.java, ::${konanTarget.variantClassName}
|
||||
)
|
||||
}
|
||||
@@ -81,7 +81,7 @@ private fun kpmVariantClassFunction(): String {
|
||||
.joinToString("\n") { "KonanTarget.${it.className} -> ${it.variantClassName}::class.java" }
|
||||
|
||||
return """
|
||||
internal fun kpmVariantClass(konanTarget: KonanTarget): Class<out KotlinNativeVariantInternal>? = when (konanTarget) {
|
||||
internal fun kpmNativeVariantClass(konanTarget: KonanTarget): Class<out GradleKpmNativeVariantInternal>? = when (konanTarget) {
|
||||
${konanTargetToVariant.indented(nSpaces = 12, skipFirstLine = true)}
|
||||
else -> null
|
||||
}
|
||||
@@ -98,6 +98,6 @@ private fun allVariantConstructors() = allKonanTargets()
|
||||
private val KonanTarget.variantClassName
|
||||
get() = presetName
|
||||
.capitalizeUS()
|
||||
.let { "Kotlin${it}Variant" }
|
||||
.let { "GradleKpm${it}Variant" }
|
||||
|
||||
private val KonanTarget.className get() = javaClass.simpleName
|
||||
private val KonanTarget.className get() = javaClass.simpleName
|
||||
|
||||
+4
-4
@@ -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.KpmIosX64Variant
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmLinuxX64Variant
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmIosX64Variant
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmLinuxX64Variant
|
||||
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<KpmLinuxX64Variant>("linuxX64")
|
||||
val ios = fragments.create<KpmIosX64Variant>("iosX64")
|
||||
val linux = fragments.create<GradleKpmLinuxX64Variant>("linuxX64")
|
||||
val ios = fragments.create<GradleKpmIosX64Variant>("iosX64")
|
||||
native.refines(common)
|
||||
linux.refines(native)
|
||||
ios.refines(native)
|
||||
|
||||
+3
-3
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.gradle
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
|
||||
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(KpmGradleModule.MAIN_MODULE_NAME)
|
||||
taskNameForKotlinModule(GradleKpmModule.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>(
|
||||
KpmGradleModule.MAIN_MODULE_NAME to {
|
||||
GradleKpmModule.MAIN_MODULE_NAME to {
|
||||
val nativeTarget = projectTargets.single { it.platformType == KotlinPlatformType.native.name }
|
||||
assertEquals(KonanTarget.LINUX_X64.name, nativeTarget.extras.native?.konanTarget)
|
||||
},
|
||||
|
||||
+3
-3
@@ -17,12 +17,12 @@ kotlin {
|
||||
// feel free to add more modules, variants and fragments
|
||||
mainAndTest {
|
||||
jvm
|
||||
val linuxX64 by fragments.creating(KpmLinuxX64Variant::class)
|
||||
val linuxX64 by fragments.creating(GradleKpmLinuxX64Variant::class)
|
||||
}
|
||||
|
||||
val secondaryModule by modules.creating {
|
||||
jvm
|
||||
val linuxArm64 by fragments.creating(KpmLinuxArm64Variant::class)
|
||||
val linuxArm64 by fragments.creating(GradleKpmLinuxArm64Variant::class)
|
||||
|
||||
makePublic()
|
||||
}
|
||||
@@ -34,7 +34,7 @@ kotlin {
|
||||
|
||||
val integrationTest by modules.creating {
|
||||
jvm
|
||||
val linuxX64 by fragments.creating(KpmLinuxX64Variant::class)
|
||||
val linuxX64 by fragments.creating(GradleKpmLinuxX64Variant::class)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
plugins.apply(GradleKpmPluginWithTransientPluginOptions::class.java)
|
||||
plugins.apply(KpmGradlePluginWithTransientPluginOptions::class.java)
|
||||
|
||||
configure<KotlinPm20ProjectExtension> {
|
||||
main {
|
||||
@@ -38,7 +38,7 @@ class KpmPluginWithTransientPluginOptions(
|
||||
override fun forPlatformCompilation(variant: KpmVariant) = pluginData()
|
||||
}
|
||||
|
||||
class GradleKpmPluginWithTransientPluginOptions : GradleKpmCompilerPlugin {
|
||||
class KpmGradlePluginWithTransientPluginOptions : GradleKpmCompilerPlugin {
|
||||
private lateinit var project: Project
|
||||
|
||||
override fun apply(target: Project) {
|
||||
|
||||
+2
-2
@@ -6,13 +6,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.android
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.tooling.core.extrasKeyOf
|
||||
import java.io.File
|
||||
import java.io.Serializable
|
||||
|
||||
internal val androidDslKey = extrasKeyOf<AndroidDsl>()
|
||||
val KpmGradleFragment.androidDsl: AndroidDsl? get() = this.extras[androidDslKey]
|
||||
val GradleKpmFragment.androidDsl: AndroidDsl? get() = this.extras[androidDslKey]
|
||||
|
||||
class AndroidDsl : Serializable {
|
||||
var compileSdk = 0
|
||||
|
||||
+7
-7
@@ -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 KpmGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
|
||||
val androidOutgoingArtifacts = FragmentArtifacts<KpmJvmVariant> {
|
||||
fun GradleKpmModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
|
||||
val androidOutgoingArtifacts = GradleKpmConfigurationArtifactsSetup<GradleKpmJvmVariant> {
|
||||
variants.create("classes") { variant ->
|
||||
variant.attributes.attribute(AndroidArtifacts.ARTIFACT_TYPE, AndroidArtifacts.ArtifactType.CLASSES_JAR.type)
|
||||
variant.artifact(project.provider { fragment.compilationOutputs.classesDirs.singleFile }) {
|
||||
@@ -37,16 +37,16 @@ fun KpmGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
|
||||
}
|
||||
}
|
||||
|
||||
val androidElementsAttributes = FragmentAttributes<KpmJvmVariant> {
|
||||
val androidElementsAttributes = GradleKpmConfigurationAttributesSetup<GradleKpmJvmVariant> {
|
||||
attribute(BuildTypeAttr.ATTRIBUTE, project.objects.named(androidVariant.buildType.name))
|
||||
attribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, project.objects.named(TargetJvmEnvironment.ANDROID))
|
||||
}
|
||||
|
||||
val kotlinVariant = createExternalJvmVariant(
|
||||
"android${androidVariant.buildType.name.replaceFirstChar { it.uppercase() }}", KotlinJvmVariantConfig(
|
||||
"android${androidVariant.buildType.name.replaceFirstChar { it.uppercase() }}", GradleKpmJvmVariantConfig(
|
||||
/* Only swap out configuration that is used. Default setup shall still be applied */
|
||||
compileDependencies = (DefaultKotlinCompileDependenciesDefinition +
|
||||
FragmentAttributes<KpmGradleFragment> {
|
||||
GradleKpmConfigurationAttributesSetup<GradleKpmFragment> {
|
||||
namedAttribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, TargetJvmEnvironment.ANDROID)
|
||||
attribute(KotlinPlatformType.attribute, KotlinPlatformType.androidJvm)
|
||||
})
|
||||
@@ -63,8 +63,8 @@ fun KpmGradleModule.createKotlinAndroidVariant(androidVariant: BaseVariant) {
|
||||
runtimeElements = DefaultKotlinRuntimeElementsDefinition + androidElementsAttributes + androidOutgoingArtifacts,
|
||||
|
||||
/* For now: Just publish 'release' (non-debuggable) variants */
|
||||
publicationConfigurator = if (androidVariant.buildType.isDebuggable) KotlinPublicationConfigurator.NoPublication else
|
||||
KotlinPublicationConfigurator.SingleVariantPublication
|
||||
publicationConfigurator = if (androidVariant.buildType.isDebuggable) GradleKpmPublicationConfigurator.NoPublication else
|
||||
GradleKpmPublicationConfigurator.SingleVariantPublication
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
+4
-4
@@ -5,10 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.android
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragmentInternal
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragmentInternal
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
|
||||
|
||||
val KpmGradleModule.androidCommon: KpmGradleFragmentInternal
|
||||
val GradleKpmModule.androidCommon: GradleKpmFragmentInternal
|
||||
get() = (fragments.findByName("androidCommon") ?: fragments.create("androidCommon") { fragment ->
|
||||
fragment.refines(common)
|
||||
}) as KpmGradleFragmentInternal
|
||||
}) as GradleKpmFragmentInternal
|
||||
|
||||
+2
-2
@@ -5,12 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.android
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
|
||||
val KotlinPm20ProjectExtension.instrumentedTest
|
||||
get() = modules.maybeCreate("instrumentedTest")
|
||||
|
||||
fun KotlinPm20ProjectExtension.instrumentedTest(configure: KpmGradleModule.() -> Unit) {
|
||||
fun KotlinPm20ProjectExtension.instrumentedTest(configure: GradleKpmModule.() -> Unit) {
|
||||
instrumentedTest.apply(configure)
|
||||
}
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPro
|
||||
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.GradleKpmDefaultProjectModelContainer
|
||||
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
|
||||
@@ -113,7 +113,7 @@ open class KotlinProjectExtension @Inject constructor(project: Project) : Kotlin
|
||||
|
||||
internal val kpmModelContainer by lazy {
|
||||
if (project.kotlinPropertiesProvider.experimentalKpmModelMapping) {
|
||||
DefaultKpmGradleProjectModelContainer.create(project)
|
||||
GradleKpmDefaultProjectModelContainer.create(project)
|
||||
} else error("Model mapping is not enabled.")
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -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.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
|
||||
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 == KpmGradleModule.MAIN_MODULE_NAME }.configureEach { main ->
|
||||
main.fragments.matching { it.name == KpmGradleFragment.COMMON_FRAGMENT_NAME }.configureEach { common ->
|
||||
project.kpmModules.matching { it.name == GradleKpmModule.MAIN_MODULE_NAME }.configureEach { main ->
|
||||
main.fragments.matching { it.name == GradleKpmFragment.COMMON_FRAGMENT_NAME }.configureEach { common ->
|
||||
common.dependencies {
|
||||
api(project.kotlinDependency("kotlin-stdlib-common", project.topLevelExtension.coreLibrariesVersion))
|
||||
}
|
||||
|
||||
+5
-5
@@ -22,15 +22,15 @@ val KotlinPm20ProjectExtension.ideaKotlinProjectModelBuilder: IdeaKotlinProjectM
|
||||
get() = this.ideaKotlinProjectModelBuilder
|
||||
|
||||
@ExternalVariantApi
|
||||
fun KpmGradleModule.createExternalJvmVariant(
|
||||
fun GradleKpmModule.createExternalJvmVariant(
|
||||
name: String,
|
||||
config: KotlinJvmVariantConfig
|
||||
): KpmJvmVariant {
|
||||
val variant = KotlinJvmVariantFactory(this, config).create(name)
|
||||
config: GradleKpmJvmVariantConfig
|
||||
): GradleKpmJvmVariant {
|
||||
val variant = GradleKpmJvmVariantFactory(this, config).create(name)
|
||||
fragments.add(variant)
|
||||
return variant
|
||||
}
|
||||
|
||||
@ExternalVariantApi
|
||||
val KpmGradleVariantInternal.compilationData
|
||||
val GradleKpmVariantInternal.compilationData
|
||||
get() = this.compilationData
|
||||
|
||||
+9
-9
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinPlatformDependencyResolver.ArtifactResolution
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinProjectModelBuilder.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.FragmentAttributes
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmConfigurationAttributesSetup
|
||||
|
||||
@DslMarker
|
||||
@ExternalVariantApi
|
||||
@@ -35,7 +35,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
|
||||
private val additionalDependencies = mutableListOf<IdeaKotlinDependencyResolver>()
|
||||
|
||||
@ExternalVariantPlatformDependencyResolutionDsl
|
||||
var platformResolutionAttributes: FragmentAttributes<KpmGradleFragment>? = null
|
||||
var platformResolutionAttributes: GradleKpmConfigurationAttributesSetup<GradleKpmFragment>? = null
|
||||
|
||||
@ExternalVariantPlatformDependencyResolutionDsl
|
||||
class ArtifactViewDslHandle(
|
||||
@@ -43,11 +43,11 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
|
||||
var binaryType: String
|
||||
) {
|
||||
@ExternalVariantPlatformDependencyResolutionDsl
|
||||
var attributes: FragmentAttributes<KpmGradleFragment> = FragmentAttributes { }
|
||||
var attributes: GradleKpmConfigurationAttributesSetup<GradleKpmFragment> = GradleKpmConfigurationAttributesSetup.None
|
||||
|
||||
@ExternalVariantPlatformDependencyResolutionDsl
|
||||
fun attributes(setAttributes: KotlinGradleFragmentConfigurationAttributesContext<KpmGradleFragment>.() -> Unit) {
|
||||
attributes += FragmentAttributes(setAttributes)
|
||||
fun attributes(setAttributes: GradleKpmConfigurationAttributesSetupContext<GradleKpmFragment>.() -> Unit) {
|
||||
attributes += GradleKpmConfigurationAttributesSetup(setAttributes)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,9 +64,9 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
|
||||
|
||||
@ExternalVariantPlatformDependencyResolutionDsl
|
||||
fun withPlatformResolutionAttributes(
|
||||
setAttributes: KotlinGradleFragmentConfigurationAttributesContext<KpmGradleFragment>.() -> Unit
|
||||
setAttributes: GradleKpmConfigurationAttributesSetupContext<GradleKpmFragment>.() -> Unit
|
||||
) {
|
||||
val additionalAttributes = FragmentAttributes(setAttributes)
|
||||
val additionalAttributes = GradleKpmConfigurationAttributesSetup(setAttributes)
|
||||
this.platformResolutionAttributes = platformResolutionAttributes?.plus(additionalAttributes) ?: additionalAttributes
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ class IdeaKotlinPlatformDependencyResolutionDslHandle internal constructor(
|
||||
}
|
||||
|
||||
@ExternalVariantPlatformDependencyResolutionDsl
|
||||
fun additionalDependencies(dependencyProvider: (KpmGradleFragment) -> List<IdeaKotlinDependency>) {
|
||||
fun additionalDependencies(dependencyProvider: (GradleKpmFragment) -> 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<KpmGradleFragment>? {
|
||||
private fun buildPlatformResolutionAttributes(): GradleKpmConfigurationAttributesSetup<GradleKpmFragment>? {
|
||||
val parentAttributes = parent?.buildPlatformResolutionAttributes() ?: return this.platformResolutionAttributes
|
||||
return parentAttributes + (this.platformResolutionAttributes ?: return parentAttributes)
|
||||
}
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
/**
|
||||
* An [IdeaKotlinDependencyEffect] is invoked last in the dependency resolution pipeline.
|
||||
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
* that the dependency resolution result is final.
|
||||
*/
|
||||
fun interface IdeaKotlinDependencyEffect {
|
||||
operator fun invoke(fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>)
|
||||
operator fun invoke(fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency>)
|
||||
}
|
||||
|
||||
fun IdeaKotlinDependencyResolver.withEffect(effect: IdeaKotlinDependencyEffect) = IdeaKotlinDependencyResolver { fragment ->
|
||||
|
||||
+2
-2
@@ -5,12 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.path
|
||||
|
||||
internal object IdeaKotlinDependencyLogger : IdeaKotlinDependencyEffect {
|
||||
override fun invoke(
|
||||
fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
|
||||
fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency>
|
||||
) {
|
||||
val fragmentPathRegex = fragment.project.properties["idea.kotlin.log.dependencies"]?.toString() ?: return
|
||||
if (!fragment.path.matches(Regex(fragmentPathRegex))) return
|
||||
|
||||
+4
-4
@@ -5,13 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
fun interface IdeaKotlinDependencyResolver {
|
||||
fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency>
|
||||
fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency>
|
||||
|
||||
object Empty : IdeaKotlinDependencyResolver {
|
||||
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> = emptySet()
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> = emptySet()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ operator fun IdeaKotlinDependencyResolver.plus(
|
||||
private class CompositeIdeaKotlinDependencyResolver(
|
||||
val children: List<IdeaKotlinDependencyResolver>
|
||||
) : IdeaKotlinDependencyResolver {
|
||||
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> {
|
||||
return children.flatMap { child -> child.resolve(fragment) }.toSet()
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -5,7 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
/**
|
||||
* An [IdeaKotlinDependencyTransformer] will be invoked after all [IdeaKotlinDependencyResolver] finished.
|
||||
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
*/
|
||||
fun interface IdeaKotlinDependencyTransformer {
|
||||
fun transform(
|
||||
fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
|
||||
fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency>
|
||||
): Set<IdeaKotlinDependency>
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ private class CompositeIdeaKotlinDependencyTransformer(
|
||||
val transformers: List<IdeaKotlinDependencyTransformer>
|
||||
) : IdeaKotlinDependencyTransformer {
|
||||
override fun transform(
|
||||
fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
|
||||
fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency>
|
||||
): Set<IdeaKotlinDependency> {
|
||||
return transformers.fold(dependencies) { currentDependencies, transformer -> transformer.transform(fragment, currentDependencies) }
|
||||
}
|
||||
|
||||
+4
-4
@@ -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: KpmGradleFragment): IdeaKotlinFragment {
|
||||
return if (fragment is KpmGradleVariant) buildIdeaKotlinVariant(fragment)
|
||||
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinFragment(fragment: GradleKpmFragment): IdeaKotlinFragment {
|
||||
return if (fragment is GradleKpmVariant) buildIdeaKotlinVariant(fragment)
|
||||
else buildIdeaKotlinFragment(fragment)
|
||||
}
|
||||
|
||||
private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragment: KpmGradleFragment): IdeaKotlinFragment {
|
||||
private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinFragment(fragment: GradleKpmFragment): 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: KpmGradleVariant): IdeaKotlinVariant {
|
||||
private fun IdeaKotlinProjectModelBuildingContext.buildIdeaKotlinVariant(variant: GradleKpmVariant): IdeaKotlinVariant {
|
||||
return IdeaKotlinVariantImpl(
|
||||
fragment = buildIdeaKotlinFragment(variant),
|
||||
platform = IdeaKotlinPlatform(variant),
|
||||
|
||||
+2
-2
@@ -5,9 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
internal fun IdeaKotlinFragmentCoordinates(fragment: KpmGradleFragment): IdeaKotlinFragmentCoordinates {
|
||||
internal fun IdeaKotlinFragmentCoordinates(fragment: GradleKpmFragment): IdeaKotlinFragmentCoordinates {
|
||||
return IdeaKotlinFragmentCoordinatesImpl(
|
||||
module = IdeaKotlinModuleCoordinates(fragment.containingModule),
|
||||
fragmentName = fragment.name
|
||||
|
||||
+9
-9
@@ -7,25 +7,25 @@ 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.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
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragmentGranularMetadataResolverFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule.Companion.moduleName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toKpmModuleDependency
|
||||
|
||||
internal class IdeaKotlinGranularFragmentDependencyResolver(
|
||||
private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory
|
||||
private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory
|
||||
) : IdeaKotlinDependencyResolver {
|
||||
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> {
|
||||
return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
|
||||
.filterIsInstance<ChooseVisibleSourceSets>()
|
||||
.flatMap { resolution -> resolve(fragment, resolution) }
|
||||
.toSet()
|
||||
}
|
||||
|
||||
private fun resolve(fragment: KpmGradleFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKotlinDependency> {
|
||||
private fun resolve(fragment: GradleKpmFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKotlinDependency> {
|
||||
val gradleProjectIdentifier = resolution.dependency.id as? ProjectComponentIdentifier ?: return emptyList()
|
||||
val kotlinModuleIdentifier = resolution.dependency.toModuleDependency().moduleIdentifier
|
||||
val kotlinModuleIdentifier = resolution.dependency.toKpmModuleDependency().moduleIdentifier
|
||||
return resolution.allVisibleSourceSetNames.map { visibleFragmentName ->
|
||||
IdeaKotlinFragmentDependencyImpl(
|
||||
type = if (
|
||||
|
||||
+8
-8
@@ -9,25 +9,25 @@ import org.gradle.api.artifacts.component.ModuleComponentIdentifier
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets
|
||||
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.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.plugin.mpp.pm20.GradleKpmFragmentGranularMetadataResolverFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule.Companion.moduleName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toKpmModuleDependency
|
||||
import org.jetbrains.kotlin.gradle.utils.withTemporaryDirectory
|
||||
|
||||
internal class IdeaKotlinMetadataBinaryDependencyResolver(
|
||||
private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory
|
||||
private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory
|
||||
) : IdeaKotlinDependencyResolver {
|
||||
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> {
|
||||
return fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
|
||||
.filterIsInstance<ChooseVisibleSourceSets>()
|
||||
.flatMap { resolution -> resolve(fragment, resolution) }
|
||||
.toSet()
|
||||
}
|
||||
|
||||
private fun resolve(fragment: KpmGradleFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKotlinDependency> {
|
||||
private fun resolve(fragment: GradleKpmFragment, resolution: ChooseVisibleSourceSets): Iterable<IdeaKotlinDependency> {
|
||||
val gradleModuleIdentifier = resolution.dependency.id as? ModuleComponentIdentifier ?: return emptySet()
|
||||
val kotlinModuleIdentifier = resolution.dependency.toModuleDependency().moduleIdentifier
|
||||
val kotlinModuleIdentifier = resolution.dependency.toKpmModuleDependency().moduleIdentifier
|
||||
|
||||
/* Project to project metadata dependencies shall be resolved as source dependencies, somewhere else */
|
||||
val metadataProvider = when (resolution.metadataProvider) {
|
||||
|
||||
+3
-3
@@ -5,18 +5,18 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.path
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
|
||||
|
||||
internal object IdeaKotlinMissingFileDependencyLogger : IdeaKotlinDependencyEffect {
|
||||
override fun invoke(fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>) {
|
||||
override fun invoke(fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency>) {
|
||||
dependencies.filterIsInstance<IdeaKotlinResolvedBinaryDependency>()
|
||||
.filter { !it.binaryFile.exists() }
|
||||
.ifNotEmpty { fragment.project.logger.warn(buildWarningMessage(fragment, this)) }
|
||||
}
|
||||
|
||||
private fun buildWarningMessage(fragment: KpmGradleFragment, dependencies: List<IdeaKotlinResolvedBinaryDependency>) = buildString {
|
||||
private fun buildWarningMessage(fragment: GradleKpmFragment, dependencies: List<IdeaKotlinResolvedBinaryDependency>) = buildString {
|
||||
append("[WARNING] ${fragment.path}: Missing dependency files")
|
||||
dependencies.forEach { dependency ->
|
||||
appendLine(dependency.binaryFile)
|
||||
|
||||
+2
-2
@@ -5,9 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
|
||||
|
||||
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinModule(module: KpmGradleModule): IdeaKotlinModule {
|
||||
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinModule(module: GradleKpmModule): IdeaKotlinModule {
|
||||
return IdeaKotlinModuleImpl(
|
||||
coordinates = IdeaKotlinModuleCoordinates(module),
|
||||
fragments = module.fragments.toList().map { fragment -> IdeaKotlinFragment(fragment) }
|
||||
|
||||
+3
-3
@@ -5,10 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.currentBuildId
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
||||
|
||||
internal fun IdeaKotlinModuleCoordinates(module: KpmGradleModule): IdeaKotlinModuleCoordinates {
|
||||
internal fun IdeaKotlinModuleCoordinates(module: GradleKpmModule): IdeaKotlinModuleCoordinates {
|
||||
return IdeaKotlinModuleCoordinatesImpl(
|
||||
buildId = module.project.currentBuildId().name,
|
||||
projectPath = module.project.path,
|
||||
|
||||
+4
-4
@@ -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.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmNativeVariantInternal
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmNativeVariantInternal
|
||||
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: KpmGradleFragment): Set<IdeaKotlinDependency> {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> {
|
||||
val konanTargets = fragment.containingVariants
|
||||
.map { it as? KpmNativeVariantInternal ?: return emptySet() }
|
||||
.map { it as? GradleKpmNativeVariantInternal ?: return emptySet() }
|
||||
.map { it.konanTarget }
|
||||
.toSet()
|
||||
|
||||
|
||||
+2
-2
@@ -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.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
internal object IdeaKotlinNativeStdlibDependencyResolver : IdeaKotlinDependencyResolver {
|
||||
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> {
|
||||
return setOf(
|
||||
IdeaKotlinResolvedBinaryDependencyImpl(
|
||||
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE,
|
||||
|
||||
+4
-5
@@ -6,16 +6,15 @@
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
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.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragmentGranularMetadataResolverFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName
|
||||
|
||||
internal class IdeaKotlinOriginalMetadataDependencyResolver(
|
||||
private val fragmentGranularMetadataResolverFactory: FragmentGranularMetadataResolverFactory
|
||||
private val fragmentGranularMetadataResolverFactory: GradleKpmFragmentGranularMetadataResolverFactory
|
||||
) : IdeaKotlinDependencyResolver {
|
||||
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> {
|
||||
val dependencyIdentifiers = fragmentGranularMetadataResolverFactory.getOrCreate(fragment).resolutions
|
||||
.filterIsInstance<KeepOriginalDependency>()
|
||||
.mapNotNull { resolution -> resolution.dependency.id as? ModuleComponentIdentifier }
|
||||
|
||||
+4
-4
@@ -14,11 +14,11 @@ import org.jetbrains.kotlin.konan.target.HostManager
|
||||
|
||||
@Suppress("unused")
|
||||
/* Receiver acts as scope, or key to that function */
|
||||
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinPlatform(variant: KpmGradleVariant): IdeaKotlinPlatform {
|
||||
internal fun IdeaKotlinProjectModelBuildingContext.IdeaKotlinPlatform(variant: GradleKpmVariant): IdeaKotlinPlatform {
|
||||
when (variant) {
|
||||
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 GradleKpmJvmVariant -> return IdeaKotlinPlatform.jvm(variant.compilationData.kotlinOptions.jvmTarget ?: JvmTarget.DEFAULT.name)
|
||||
is GradleKpmNativeVariantInternal -> return IdeaKotlinPlatform.native(variant.konanTarget.name)
|
||||
is GradleKpmLegacyMappedVariant -> 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)
|
||||
is KotlinNativeCompilation -> return IdeaKotlinPlatform.native(compilation.konanTarget.name)
|
||||
|
||||
+12
-12
@@ -14,13 +14,13 @@ import org.gradle.api.artifacts.component.ProjectComponentIdentifier
|
||||
import org.gradle.internal.resolve.ModuleVersionResolveException
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinPlatformDependencyResolver.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.FragmentAttributes
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmConfigurationAttributesSetup
|
||||
|
||||
/**
|
||||
* 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 [KpmGradleFragment.transitiveApiConfiguration] and [KpmGradleFragment.transitiveImplementationConfiguratione]'s
|
||||
* It will then use the [GradleKpmFragment.transitiveApiConfiguration] and [GradleKpmFragment.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 [KpmGradleVariant] using its [KpmGradleVariant.compileDependenciesConfiguration],
|
||||
* Resolve the artifacts from a [GradleKpmVariant] using its [GradleKpmVariant.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<KpmGradleFragment> = FragmentAttributes { }
|
||||
internal val artifactViewAttributes: GradleKpmConfigurationAttributesSetup<GradleKpmFragment> = GradleKpmConfigurationAttributesSetup.None
|
||||
) : ArtifactResolution()
|
||||
|
||||
/**
|
||||
* Capable of resolving artifacts from a plain [KpmGradleFragment] which does not have to implement [KpmGradleVariant].
|
||||
* Capable of resolving artifacts from a plain [GradleKpmFragment] which does not have to implement [GradleKpmVariant].
|
||||
* 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<KpmGradleFragment>,
|
||||
internal val artifactViewAttributes: FragmentAttributes<KpmGradleFragment> = FragmentAttributes { },
|
||||
internal val platformResolutionAttributes: GradleKpmConfigurationAttributesSetup<GradleKpmFragment>,
|
||||
internal val artifactViewAttributes: GradleKpmConfigurationAttributesSetup<GradleKpmFragment> = GradleKpmConfigurationAttributesSetup { },
|
||||
) : ArtifactResolution()
|
||||
}
|
||||
|
||||
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinBinaryDependency> {
|
||||
override fun resolve(fragment: GradleKpmFragment): 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: KpmGradleFragment): ArtifactView? {
|
||||
private fun ArtifactResolution.createArtifactView(fragment: GradleKpmFragment): ArtifactView? {
|
||||
return when (this) {
|
||||
is ArtifactResolution.Variant -> createVariantArtifactView(fragment)
|
||||
is ArtifactResolution.PlatformFragment -> createPlatformFragmentArtifactView(fragment)
|
||||
}
|
||||
}
|
||||
|
||||
private fun ArtifactResolution.Variant.createVariantArtifactView(fragment: KpmGradleFragment): ArtifactView? {
|
||||
if (fragment !is KpmGradleVariant) return null
|
||||
private fun ArtifactResolution.Variant.createVariantArtifactView(fragment: GradleKpmFragment): ArtifactView? {
|
||||
if (fragment !is GradleKpmVariant) 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: KpmGr
|
||||
}
|
||||
}
|
||||
|
||||
private fun ArtifactResolution.PlatformFragment.createPlatformFragmentArtifactView(fragment: KpmGradleFragment): ArtifactView {
|
||||
private fun ArtifactResolution.PlatformFragment.createPlatformFragmentArtifactView(fragment: GradleKpmFragment): ArtifactView {
|
||||
val fragmentCompileDependencies = fragment.project.configurations.detachedConfiguration()
|
||||
|
||||
fragmentCompileDependencies.dependencies.addAll(
|
||||
|
||||
+2
-2
@@ -7,7 +7,7 @@ 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.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.containingVariants
|
||||
import org.jetbrains.kotlin.project.model.KpmVariant
|
||||
@@ -94,7 +94,7 @@ interface IdeaKotlinProjectModelBuilder {
|
||||
* Used for scoping [IdeaKotlinDependencyResolver], [IdeaKotlinDependencyTransformer] and [IdeaKotlinDependencyEffect]
|
||||
*/
|
||||
fun interface FragmentConstraint {
|
||||
operator fun invoke(fragment: KpmGradleFragment): Boolean
|
||||
operator fun invoke(fragment: GradleKpmFragment): Boolean
|
||||
|
||||
companion object {
|
||||
val unconstrained = FragmentConstraint { true }
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.kpm.external.ExternalVariantApi
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.FragmentGranularMetadataResolverFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragmentGranularMetadataResolverFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
import org.jetbrains.kotlin.tooling.core.UnsafeApi
|
||||
|
||||
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.tooling.core.UnsafeApi
|
||||
internal fun IdeaKotlinProjectModelBuilder.Companion.default(
|
||||
extension: KotlinPm20ProjectExtension
|
||||
) = IdeaKotlinProjectModelBuilderImpl(extension).apply {
|
||||
val fragmentMetadataResolverFactory = FragmentGranularMetadataResolverFactory()
|
||||
val fragmentMetadataResolverFactory = GradleKpmFragmentGranularMetadataResolverFactory()
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeaKotlinRefinesDependencyResolver,
|
||||
|
||||
+3
-3
@@ -5,13 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
internal object IdeaKotlinRefinesDependencyResolver : IdeaKotlinDependencyResolver {
|
||||
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> = fragment.refinesClosure
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> = fragment.refinesClosure
|
||||
.map { refinesDependencyFragment -> createRefinesDependency(refinesDependencyFragment) }.toSet()
|
||||
|
||||
private fun createRefinesDependency(fragment: KpmGradleFragment): IdeaKotlinDependency {
|
||||
private fun createRefinesDependency(fragment: GradleKpmFragment): IdeaKotlinDependency {
|
||||
return IdeaKotlinFragmentDependencyImpl(
|
||||
type = IdeaKotlinFragmentDependency.Type.Refines,
|
||||
coordinates = IdeaKotlinFragmentCoordinates(fragment)
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
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: KpmGradleFragment,
|
||||
fragment: GradleKpmFragment,
|
||||
dependencies: Set<IdeaKotlinDependency>
|
||||
): Set<IdeaKotlinDependency> {
|
||||
val platforms = fragment.containingVariants.map { it.platformType }.toSet()
|
||||
|
||||
+4
-4
@@ -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.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleVariant
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmVariant
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.resolvableMetadataConfigurationName
|
||||
|
||||
internal class IdeaKotlinSourcesAndDocumentationResolver : IdeaKotlinDependencyResolver {
|
||||
override fun resolve(fragment: KpmGradleFragment): Set<IdeaKotlinDependency> {
|
||||
if (fragment is KpmGradleVariant) {
|
||||
override fun resolve(fragment: GradleKpmFragment): Set<IdeaKotlinDependency> {
|
||||
if (fragment is GradleKpmVariant) {
|
||||
return resolve(fragment.project, fragment.compileDependenciesConfiguration)
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -5,11 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmGradleFragment
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
||||
|
||||
internal object IdeaKotlinUnusedSourcesAndDocumentationFilter : IdeaKotlinDependencyTransformer {
|
||||
override fun transform(
|
||||
fragment: KpmGradleFragment, dependencies: Set<IdeaKotlinDependency>
|
||||
fragment: GradleKpmFragment, dependencies: Set<IdeaKotlinDependency>
|
||||
): Set<IdeaKotlinDependency> {
|
||||
val sourcesAndDocumentationDependencies = dependencies
|
||||
.filterIsInstance<IdeaKotlinResolvedBinaryDependency>()
|
||||
|
||||
+17
-17
@@ -43,7 +43,7 @@ import java.util.concurrent.Callable
|
||||
interface CompilationDetails<T : KotlinCommonOptions> {
|
||||
val target: KotlinTarget
|
||||
|
||||
val compileDependencyFilesHolder: DependencyFilesHolder
|
||||
val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder
|
||||
|
||||
val kotlinDependenciesHolder: HasKotlinDependencies
|
||||
|
||||
@@ -66,7 +66,7 @@ interface CompilationDetails<T : KotlinCommonOptions> {
|
||||
}
|
||||
|
||||
interface CompilationDetailsWithRuntime<T : KotlinCommonOptions> : CompilationDetails<T> {
|
||||
val runtimeDependencyFilesHolder: DependencyFilesHolder
|
||||
val runtimeDependencyFilesHolder: GradleKpmDependencyFilesHolder
|
||||
}
|
||||
|
||||
internal val CompilationDetails<*>.associateCompilationsClosure: Iterable<CompilationDetails<*>>
|
||||
@@ -98,7 +98,7 @@ open class DefaultCompilationDetails<T : KotlinCommonOptions>(
|
||||
)
|
||||
)
|
||||
|
||||
override val compileDependencyFilesHolder: DependencyFilesHolder = project.newDependencyFilesHolder(
|
||||
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder(
|
||||
lowerCamelCaseName(
|
||||
target.disambiguationClassifier,
|
||||
compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }.orEmpty(),
|
||||
@@ -328,7 +328,7 @@ open class DefaultCompilationDetailsWithRuntime<T : KotlinCommonOptions>(
|
||||
compilationPurpose: String,
|
||||
createKotlinOptions: DefaultCompilationDetails<*>.() -> T
|
||||
) : DefaultCompilationDetails<T>(target, compilationPurpose, createKotlinOptions), CompilationDetailsWithRuntime<T> {
|
||||
override val runtimeDependencyFilesHolder: DependencyFilesHolder = project.newDependencyFilesHolder(
|
||||
override val runtimeDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder(
|
||||
lowerCamelCaseName(
|
||||
target.disambiguationClassifier,
|
||||
compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }.orEmpty(),
|
||||
@@ -346,7 +346,7 @@ open class NativeCompilationDetails(
|
||||
compilationPurpose,
|
||||
createKotlinOptions
|
||||
) {
|
||||
override val compileDependencyFilesHolder: DependencyFilesHolder = project.newDependencyFilesHolder(
|
||||
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder = project.newDependencyFilesHolder(
|
||||
lowerCamelCaseName(
|
||||
target.disambiguationClassifier,
|
||||
compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }.orEmpty(),
|
||||
@@ -402,8 +402,8 @@ internal open class MetadataMappedCompilationDetails<T : KotlinCommonOptions>(
|
||||
override val target: KotlinMetadataTarget,
|
||||
final override val compilationData: AbstractKotlinFragmentMetadataCompilationData<T>
|
||||
) : CompilationDetails<T> {
|
||||
override val compileDependencyFilesHolder: DependencyFilesHolder =
|
||||
DependencyFilesHolder.ofMetadataCompilationDependencies(compilationData)
|
||||
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder =
|
||||
GradleKpmDependencyFilesHolder.ofMetadataCompilationDependencies(compilationData)
|
||||
|
||||
override val kotlinDependenciesHolder: HasKotlinDependencies
|
||||
get() = compilationData.fragment
|
||||
@@ -432,7 +432,7 @@ internal open class MetadataMappedCompilationDetails<T : KotlinCommonOptions>(
|
||||
}
|
||||
|
||||
internal open class VariantMappedCompilationDetails<T : KotlinCommonOptions>(
|
||||
open val variant: KpmGradleVariantInternal,
|
||||
open val variant: GradleKpmVariantInternal,
|
||||
override val target: KotlinTarget
|
||||
) : CompilationDetails<T> {
|
||||
|
||||
@@ -458,8 +458,8 @@ internal open class VariantMappedCompilationDetails<T : KotlinCommonOptions>(
|
||||
|
||||
override val associateCompilations: Set<CompilationDetails<*>> get() = emptySet()
|
||||
|
||||
override val compileDependencyFilesHolder: DependencyFilesHolder
|
||||
get() = DependencyFilesHolder.ofVariantCompileDependencies(variant)
|
||||
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder
|
||||
get() = GradleKpmDependencyFilesHolder.ofVariantCompileDependencies(variant)
|
||||
|
||||
override val kotlinDependenciesHolder: HasKotlinDependencies
|
||||
get() = variant
|
||||
@@ -469,12 +469,12 @@ internal open class VariantMappedCompilationDetails<T : KotlinCommonOptions>(
|
||||
}
|
||||
|
||||
internal open class VariantMappedCompilationDetailsWithRuntime<T : KotlinCommonOptions>(
|
||||
override val variant: KpmGradleVariantWithRuntimeInternal,
|
||||
override val variant: GradleKpmVariantWithRuntimeInternal,
|
||||
target: KotlinTarget
|
||||
) : VariantMappedCompilationDetails<T>(variant, target),
|
||||
CompilationDetailsWithRuntime<T> {
|
||||
override val runtimeDependencyFilesHolder: DependencyFilesHolder
|
||||
get() = DependencyFilesHolder.ofVariantRuntimeDependencies(variant)
|
||||
override val runtimeDependencyFilesHolder: GradleKpmDependencyFilesHolder
|
||||
get() = GradleKpmDependencyFilesHolder.ofVariantRuntimeDependencies(variant)
|
||||
}
|
||||
|
||||
internal class WithJavaCompilationDetails<T : KotlinCommonOptions>(
|
||||
@@ -490,14 +490,14 @@ internal class WithJavaCompilationDetails<T : KotlinCommonOptions>(
|
||||
|
||||
override val output: KotlinCompilationOutput by lazy { KotlinWithJavaCompilationOutput(compilation) }
|
||||
|
||||
override val compileDependencyFilesHolder: DependencyFilesHolder
|
||||
get() = object : DependencyFilesHolder {
|
||||
override val compileDependencyFilesHolder: GradleKpmDependencyFilesHolder
|
||||
get() = object : GradleKpmDependencyFilesHolder {
|
||||
override val dependencyConfigurationName: String by javaSourceSet::compileClasspathConfigurationName
|
||||
override var dependencyFiles: FileCollection by javaSourceSet::compileClasspath
|
||||
}
|
||||
|
||||
override val runtimeDependencyFilesHolder: DependencyFilesHolder
|
||||
get() = object : DependencyFilesHolder {
|
||||
override val runtimeDependencyFilesHolder: GradleKpmDependencyFilesHolder
|
||||
get() = object : GradleKpmDependencyFilesHolder {
|
||||
override val dependencyConfigurationName: String by javaSourceSet::runtimeClasspathConfigurationName
|
||||
override var dependencyFiles: FileCollection by javaSourceSet::runtimeClasspath
|
||||
}
|
||||
|
||||
+2
-2
@@ -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.KpmGradleModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
|
||||
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 KpmGradleModule -> project.dependencies.create(dependencyNotation.project).apply {
|
||||
is GradleKpmModule -> project.dependencies.create(dependencyNotation.project).apply {
|
||||
(this as ModuleDependency).capabilities {
|
||||
if (dependencyNotation.moduleClassifier != null) {
|
||||
it.requireCapability(ComputedCapability.fromModule(dependencyNotation))
|
||||
|
||||
+24
-22
@@ -19,6 +19,8 @@ import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.representsProject
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
|
||||
@@ -32,7 +34,7 @@ class ProjectStructureMetadataModuleBuilder {
|
||||
component: ResolvedComponentResult,
|
||||
metadata: KotlinProjectStructureMetadata
|
||||
): KpmModule {
|
||||
val moduleData = KpmBasicModule(component.toSingleModuleIdentifier()).apply {
|
||||
val moduleData = KpmBasicModule(component.toSingleKpmModuleIdentifier()).apply {
|
||||
metadata.sourceSetNamesByVariantName.keys.forEach { variantName ->
|
||||
fragments.add(KpmBasicVariant(this@apply, variantName))
|
||||
}
|
||||
@@ -69,7 +71,7 @@ class ProjectStructureMetadataModuleBuilder {
|
||||
}
|
||||
}
|
||||
}
|
||||
return KpmExternalImportedModule(
|
||||
return GradleKpmExternalImportedModule(
|
||||
moduleData,
|
||||
metadata,
|
||||
moduleData.fragments.filterTo(mutableSetOf()) { it.fragmentName in metadata.hostSpecificSourceSets }
|
||||
@@ -77,7 +79,7 @@ class ProjectStructureMetadataModuleBuilder {
|
||||
}
|
||||
|
||||
fun getModule(component: ResolvedComponentResult, projectStructureMetadata: KotlinProjectStructureMetadata): KpmModule {
|
||||
val moduleId = component.toSingleModuleIdentifier()
|
||||
val moduleId = component.toSingleKpmModuleIdentifier()
|
||||
return modulesCache.getOrPut(moduleId) {
|
||||
buildModuleFromProjectStructureMetadata(
|
||||
component,
|
||||
@@ -188,7 +190,7 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
|
||||
|
||||
// FIXME: Kotlin/Native implementation-effective-api dependencies are missing here. Introduce dependency scopes
|
||||
requestedDependencies(project, sourceSet, listOf(KotlinDependencyScope.API_SCOPE)).forEach {
|
||||
val moduleDependency = it.toModuleDependency(project)
|
||||
val moduleDependency = it.toKpmModuleDependency(project)
|
||||
fragment.declaredModuleDependencies.add(moduleDependency)
|
||||
}
|
||||
}
|
||||
@@ -236,7 +238,7 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
|
||||
}
|
||||
}
|
||||
|
||||
internal fun Dependency.toModuleDependency(
|
||||
internal fun Dependency.toKpmModuleDependency(
|
||||
project: Project
|
||||
): KpmModuleDependency {
|
||||
return KpmModuleDependency(
|
||||
@@ -261,30 +263,30 @@ internal fun Dependency.toModuleDependency(
|
||||
private fun KpmBasicModule.fragmentByName(name: String) =
|
||||
fragments.single { it.fragmentName == name }
|
||||
|
||||
class CachingModuleVariantResolver(private val actualResolver: ModuleVariantResolver) : ModuleVariantResolver {
|
||||
private val resultCacheByRequestingVariant: MutableMap<org.jetbrains.kotlin.project.model.KpmVariant, MutableMap<KpmModule, VariantResolution>> = mutableMapOf()
|
||||
class KpmCachingModuleVariantResolver(private val actualResolver: KpmModuleVariantResolver) : KpmModuleVariantResolver {
|
||||
private val resultCacheByRequestingVariant: MutableMap<KpmVariant, MutableMap<KpmModule, KpmVariantResolution>> = mutableMapOf()
|
||||
|
||||
override fun getChosenVariant(requestingVariant: org.jetbrains.kotlin.project.model.KpmVariant, dependencyModule: KpmModule): VariantResolution {
|
||||
override fun getChosenVariant(requestingVariant: KpmVariant, dependencyModule: KpmModule): KpmVariantResolution {
|
||||
val resultCache = resultCacheByRequestingVariant.getOrPut(requestingVariant) { mutableMapOf() }
|
||||
return resultCache.getOrPut(dependencyModule) { actualResolver.getChosenVariant(requestingVariant, dependencyModule) }
|
||||
}
|
||||
}
|
||||
|
||||
class GradleModuleVariantResolver : ModuleVariantResolver {
|
||||
override fun getChosenVariant(requestingVariant: org.jetbrains.kotlin.project.model.KpmVariant, dependencyModule: KpmModule): VariantResolution {
|
||||
class KpmGradleModuleVariantResolver : KpmModuleVariantResolver {
|
||||
override fun getChosenVariant(requestingVariant: KpmVariant, dependencyModule: KpmModule): KpmVariantResolution {
|
||||
// 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 KpmExternalPlainModule) {
|
||||
return VariantResolution.fromMatchingVariants(
|
||||
if (dependencyModule is GradleKpmExternalPlainModule) {
|
||||
return KpmVariantResolution.fromMatchingVariants(
|
||||
requestingVariant,
|
||||
dependencyModule,
|
||||
listOf(dependencyModule.singleVariant)
|
||||
)
|
||||
}
|
||||
|
||||
if (requestingVariant !is KpmGradleVariant) {
|
||||
return VariantResolution.Unknown(requestingVariant, dependencyModule)
|
||||
if (requestingVariant !is GradleKpmVariant) {
|
||||
return KpmVariantResolution.Unknown(requestingVariant, dependencyModule)
|
||||
}
|
||||
|
||||
val module = requestingVariant.containingModule
|
||||
@@ -300,9 +302,9 @@ 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 KpmGradleModule -> {
|
||||
is GradleKpmModule -> {
|
||||
dependencyModule.variants.singleOrNull { resolvedGradleVariantName in it.gradleVariantNames }?.name
|
||||
?: return VariantResolution.Unknown(requestingVariant, dependencyModule)
|
||||
?: return KpmVariantResolution.Unknown(requestingVariant, dependencyModule)
|
||||
}
|
||||
else -> resolvedGradleVariantName?.let(::kotlinVariantNameFromPublishedVariantName)
|
||||
}
|
||||
@@ -310,15 +312,15 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
|
||||
val resultVariant = dependencyModule.variants.singleOrNull { it.fragmentName == kotlinVariantName }
|
||||
|
||||
return if (resultVariant == null)
|
||||
VariantResolution.NoVariantMatch(requestingVariant, dependencyModule)
|
||||
KpmVariantResolution.KpmNoVariantMatch(requestingVariant, dependencyModule)
|
||||
else
|
||||
VariantResolution.VariantMatch(requestingVariant, dependencyModule, resultVariant)
|
||||
KpmVariantResolution.KpmVariantMatch(requestingVariant, dependencyModule, resultVariant)
|
||||
}
|
||||
|
||||
private fun getCompileDependenciesConfigurationForVariant(project: Project, requestingVariant: org.jetbrains.kotlin.project.model.KpmVariant): Configuration =
|
||||
private fun getCompileDependenciesConfigurationForVariant(project: Project, requestingVariant: KpmVariant): Configuration =
|
||||
when {
|
||||
project.hasKpmModel -> {
|
||||
(requestingVariant as KpmGradleVariant).compileDependenciesConfiguration
|
||||
(requestingVariant as GradleKpmVariant).compileDependenciesConfiguration
|
||||
}
|
||||
else -> {
|
||||
val targets =
|
||||
@@ -342,10 +344,10 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun getForCurrentBuild(project: Project): ModuleVariantResolver {
|
||||
fun getForCurrentBuild(project: Project): KpmModuleVariantResolver {
|
||||
val extraPropertyName = "org.jetbrains.kotlin.dependencyResolution.variantResolver.${project.getKotlinPluginVersion()}"
|
||||
return project.getOrPutRootProjectProperty(extraPropertyName) {
|
||||
CachingModuleVariantResolver(GradleModuleVariantResolver())
|
||||
KpmCachingModuleVariantResolver(KpmGradleModuleVariantResolver())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -80,10 +80,10 @@ class KotlinMultiplatformPlugin : Plugin<Project> {
|
||||
setupKpmModulesPublication(project)
|
||||
registerDefaultVariantFactories(project)
|
||||
with(project.kpmModules) {
|
||||
create(KpmGradleModule.MAIN_MODULE_NAME) {
|
||||
create(GradleKpmModule.MAIN_MODULE_NAME) {
|
||||
it.makePublic()
|
||||
}
|
||||
create(KpmGradleModule.TEST_MODULE_NAME)
|
||||
create(GradleKpmModule.TEST_MODULE_NAME)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -282,7 +282,7 @@ internal fun applyUserDefinedAttributes(target: AbstractKotlinTarget) {
|
||||
private fun applyUserDefinedAttributesWithKpm(
|
||||
target: AbstractKotlinTarget,
|
||||
) {
|
||||
fun copyAttributesToVariant(variant: KpmGradleVariant, from: AttributeContainer) {
|
||||
fun copyAttributesToVariant(variant: GradleKpmVariant, 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(KpmGradleModule.MAIN_MODULE_NAME).variants.withType(LegacyMappedVariant::class.java).all { variant ->
|
||||
project.kpmModules.getByName(GradleKpmModule.MAIN_MODULE_NAME).variants.withType(GradleKpmLegacyMappedVariant::class.java).all { variant ->
|
||||
val compilation = variant.compilation
|
||||
copyAttributesToVariant(variant, compilation.attributes)
|
||||
}
|
||||
|
||||
+2
-2
@@ -14,7 +14,7 @@ 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.KpmGradleModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope
|
||||
@@ -190,7 +190,7 @@ internal fun buildKotlinProjectStructureMetadata(project: Project): KotlinProjec
|
||||
)
|
||||
}
|
||||
|
||||
internal fun buildProjectStructureMetadata(module: KpmGradleModule): KotlinProjectStructureMetadata {
|
||||
internal fun buildProjectStructureMetadata(module: GradleKpmModule): KotlinProjectStructureMetadata {
|
||||
val kotlinVariantToGradleVariantNames = module.variants.associate { it.name to it.gradleVariantNames }
|
||||
|
||||
fun <T> expandVariantKeys(map: Map<String, T>) =
|
||||
|
||||
+1
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||
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.plugin.mpp.pm20.util.currentBuildId
|
||||
import org.jetbrains.kotlin.gradle.utils.getValue
|
||||
import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
|
||||
import org.jetbrains.kotlin.project.model.KpmLocalModuleIdentifier
|
||||
|
||||
+2
-2
@@ -10,7 +10,7 @@ import org.gradle.api.artifacts.Configuration
|
||||
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.gradle.plugin.mpp.pm20.toSingleKpmModuleIdentifier
|
||||
import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
|
||||
|
||||
internal fun MppDependencyProjectStructureMetadataExtractor.Factory.create(
|
||||
@@ -25,7 +25,7 @@ internal fun MppDependencyProjectStructureMetadataExtractor.Factory.create(
|
||||
FIXME this loses information about auxiliary module deps
|
||||
TODO check how this code works with multi-capability resolutions,
|
||||
*/
|
||||
moduleIdentifier = resolvedComponentResult.toSingleModuleIdentifier(),
|
||||
moduleIdentifier = resolvedComponentResult.toSingleKpmModuleIdentifier(),
|
||||
configuration = configuration,
|
||||
resolveViaAvailableAt = resolveViaAvailableAt,
|
||||
resolvedComponentResult = resolvedComponentResult,
|
||||
|
||||
+6
-6
@@ -14,8 +14,8 @@ import org.gradle.api.artifacts.result.ResolvedDependencyResult
|
||||
import org.gradle.api.artifacts.result.ResolvedVariantResult
|
||||
import org.gradle.api.attributes.Usage
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toModuleIdentifiers
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleModuleIdentifier
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toKpmModuleIdentifiers
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleKpmModuleIdentifier
|
||||
import org.jetbrains.kotlin.gradle.plugin.usageByName
|
||||
import org.jetbrains.kotlin.gradle.utils.getOrPut
|
||||
import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
|
||||
@@ -112,13 +112,13 @@ internal class ResolvedMppVariantsProvider private constructor(private val proje
|
||||
if (isMpp) {
|
||||
result.add(component)
|
||||
component.dependents.forEach { dependent ->
|
||||
dependent.requested.toModuleIdentifiers().forEach { moduleId ->
|
||||
dependent.requested.toKpmModuleIdentifiers().forEach { moduleId ->
|
||||
val moduleEntry = getEntryForModule(moduleId)
|
||||
moduleEntry.resolvedVariantsByConfiguration[configuration] = listOf(dependent.resolvedVariant)
|
||||
|
||||
moduleEntry.dependenciesByConfiguration[configuration] = component.dependencies
|
||||
.filterIsInstance<ResolvedDependencyResult>()
|
||||
.map { dependency -> dependency.selected.toSingleModuleIdentifier() }
|
||||
.map { dependency -> dependency.selected.toSingleKpmModuleIdentifier() }
|
||||
|
||||
if (component.id is ProjectComponentIdentifier) {
|
||||
// Then the platform variant chosen for this module is definitely inside the module itself:
|
||||
@@ -165,11 +165,11 @@ internal class ResolvedMppVariantsProvider private constructor(private val proje
|
||||
artifactResolutionMode: ArtifactResolutionMode
|
||||
) {
|
||||
val mppModuleIds = mppComponentIds.flatMapTo(mutableSetOf()) { componentId ->
|
||||
componentId.toModuleIdentifiers()
|
||||
componentId.toKpmModuleIdentifiers()
|
||||
}
|
||||
|
||||
mppComponentIds.forEach { componentId ->
|
||||
componentId.toModuleIdentifiers().forEach { moduleId ->
|
||||
componentId.toKpmModuleIdentifiers().forEach { moduleId ->
|
||||
val moduleEntry = getEntryForModule(moduleId)
|
||||
val artifact = artifacts[componentId]
|
||||
when {
|
||||
|
||||
+2
-2
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationToRunnableFiles
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleModuleIdentifier
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.toSingleKpmModuleIdentifier
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
|
||||
import java.io.File
|
||||
|
||||
@@ -57,7 +57,7 @@ internal class SourceSetVisibilityProvider(
|
||||
val compilations = CompilationSourceSetUtil.compilationsBySourceSets(project).getValue(visibleFrom)
|
||||
|
||||
val component = resolvedRootMppDependency ?: resolvedMetadataDependency
|
||||
val mppModuleIdentifier = component.toSingleModuleIdentifier()
|
||||
val mppModuleIdentifier = component.toSingleKpmModuleIdentifier()
|
||||
|
||||
val firstConfigurationByVariant = mutableMapOf<String, Configuration>()
|
||||
|
||||
|
||||
+7
-7
@@ -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<KpmGradleVariant> {
|
||||
val GradleKpmPlatformAttributes = GradleKpmConfigurationAttributesSetup<GradleKpmVariant> {
|
||||
if (isGradleVersionAtLeast(7, 0) && fragment.platformType == KotlinPlatformType.jvm) {
|
||||
namedAttribute(TARGET_JVM_ENVIRONMENT_ATTRIBUTE, TargetJvmEnvironment.STANDARD_JVM)
|
||||
}
|
||||
@@ -28,26 +28,26 @@ val KotlinFragmentPlatformAttributes = FragmentAttributes<KpmGradleVariant> {
|
||||
attribute(KotlinPlatformType.attribute, fragment.platformType)
|
||||
}
|
||||
|
||||
val KotlinFragmentConsumerApiUsageAttribute = FragmentAttributes<KpmGradleVariant> {
|
||||
val GradleKpmConsumerApiUsageAttribute = GradleKpmConfigurationAttributesSetup<GradleKpmVariant> {
|
||||
attribute(USAGE_ATTRIBUTE, consumerApiUsage(project, fragment.platformType))
|
||||
}
|
||||
|
||||
val KotlinFragmentProducerApiUsageAttribute = FragmentAttributes<KpmGradleVariant> {
|
||||
val GradleKpmProducerApiUsageAttribute = GradleKpmConfigurationAttributesSetup<GradleKpmVariant> {
|
||||
attribute(USAGE_ATTRIBUTE, producerApiUsage(fragment.project, fragment.platformType))
|
||||
}
|
||||
|
||||
val KotlinFragmentConsumerRuntimeUsageAttribute = FragmentAttributes<KpmGradleVariant> {
|
||||
val GradleKpmConsumerRuntimeUsageAttribute = GradleKpmConfigurationAttributesSetup<GradleKpmVariant> {
|
||||
attribute(USAGE_ATTRIBUTE, consumerRuntimeUsage(fragment.project, fragment.platformType))
|
||||
}
|
||||
|
||||
val KotlinFragmentProducerRuntimeUsageAttribute = FragmentAttributes<KpmGradleVariant> {
|
||||
val GradleKpmProducerRuntimeUsageAttribute = GradleKpmConfigurationAttributesSetup<GradleKpmVariant> {
|
||||
attribute(USAGE_ATTRIBUTE, producerRuntimeUsage(fragment.project, fragment.platformType))
|
||||
}
|
||||
|
||||
val KotlinFragmentMetadataUsageAttribute = FragmentAttributes<KpmGradleFragment> {
|
||||
val GradleKpmMetadataUsageAttribute = GradleKpmConfigurationAttributesSetup<GradleKpmFragment> {
|
||||
attribute(USAGE_ATTRIBUTE, fragment.project.usageByName(KotlinUsages.KOTLIN_METADATA))
|
||||
}
|
||||
|
||||
val KotlinFragmentKonanTargetAttribute = FragmentAttributes<KpmNativeVariantInternal> {
|
||||
val GradleKpmKonanTargetAttribute = GradleKpmConfigurationAttributesSetup<GradleKpmNativeVariantInternal> {
|
||||
attributes.attribute(KotlinNativeTarget.konanTargetAttribute, fragment.konanTarget.name)
|
||||
}
|
||||
|
||||
+22
-23
@@ -8,79 +8,78 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
import org.gradle.api.attributes.Bundling
|
||||
import org.gradle.api.attributes.Category
|
||||
|
||||
|
||||
val DefaultKotlinCompileDependenciesDefinition = KotlinGradleFragmentConfigurationDefinition(
|
||||
provider = ConfigurationProvider {
|
||||
val DefaultKotlinCompileDependenciesDefinition = GradleKpmConfigurationSetup(
|
||||
provider = GradleKpmConfigurationProvider {
|
||||
project.configurations.maybeCreate(disambiguateName("compileDependencies")).apply {
|
||||
isCanBeConsumed = false
|
||||
isCanBeResolved = true
|
||||
}
|
||||
},
|
||||
relations = FragmentConfigurationRelation {
|
||||
relations = GradleKpmConfigurationRelationSetup {
|
||||
extendsFrom(dependencies.transitiveApiConfiguration)
|
||||
extendsFrom(dependencies.transitiveImplementationConfiguration)
|
||||
},
|
||||
attributes = KotlinFragmentPlatformAttributes + KotlinFragmentConsumerApiUsageAttribute
|
||||
attributes = GradleKpmPlatformAttributes + GradleKpmConsumerApiUsageAttribute
|
||||
)
|
||||
|
||||
val DefaultKotlinRuntimeDependenciesDefinition = ConfigurationDefinition(
|
||||
provider = ConfigurationProvider {
|
||||
val DefaultKotlinRuntimeDependenciesDefinition = GradleKpmConfigurationSetup(
|
||||
provider = GradleKpmConfigurationProvider {
|
||||
project.configurations.maybeCreate(disambiguateName("runtimeDependencies")).apply {
|
||||
isCanBeConsumed = false
|
||||
isCanBeResolved = true
|
||||
}
|
||||
},
|
||||
attributes = KotlinFragmentPlatformAttributes + KotlinFragmentConsumerRuntimeUsageAttribute,
|
||||
relations = FragmentConfigurationRelation {
|
||||
attributes = GradleKpmPlatformAttributes + GradleKpmConsumerRuntimeUsageAttribute,
|
||||
relations = GradleKpmConfigurationRelationSetup {
|
||||
extendsFrom(dependencies.transitiveApiConfiguration)
|
||||
extendsFrom(dependencies.transitiveImplementationConfiguration)
|
||||
extendsFrom(dependencies.transitiveRuntimeOnlyConfiguration)
|
||||
}
|
||||
)
|
||||
|
||||
val DefaultKotlinApiElementsDefinition = ConfigurationDefinition(
|
||||
provider = ConfigurationProvider {
|
||||
val DefaultKotlinApiElementsDefinition = GradleKpmConfigurationSetup(
|
||||
provider = GradleKpmConfigurationProvider {
|
||||
project.configurations.maybeCreate(disambiguateName("apiElements")).apply {
|
||||
isCanBeResolved = false
|
||||
isCanBeConsumed = false
|
||||
module.ifMadePublic { isCanBeConsumed = true }
|
||||
}
|
||||
},
|
||||
relations = FragmentConfigurationRelation { extendsFrom(dependencies.transitiveApiConfiguration) },
|
||||
capabilities = KotlinFragmentModuleCapability,
|
||||
attributes = KotlinFragmentPlatformAttributes + KotlinFragmentProducerApiUsageAttribute + FragmentAttributes {
|
||||
relations = GradleKpmConfigurationRelationSetup { extendsFrom(dependencies.transitiveApiConfiguration) },
|
||||
capabilities = GradleKpmModuleCapability,
|
||||
attributes = GradleKpmPlatformAttributes + GradleKpmProducerApiUsageAttribute + GradleKpmConfigurationAttributesSetup {
|
||||
attribute(Category.CATEGORY_ATTRIBUTE, fragment.project.objects.named(Category::class.java, Category.LIBRARY))
|
||||
attribute(Bundling.BUNDLING_ATTRIBUTE, fragment.project.objects.named(Bundling::class.java, Bundling.EXTERNAL))
|
||||
},
|
||||
)
|
||||
|
||||
val DefaultKotlinRuntimeElementsDefinition = ConfigurationDefinition(
|
||||
provider = ConfigurationProvider {
|
||||
val DefaultKotlinRuntimeElementsDefinition = GradleKpmConfigurationSetup(
|
||||
provider = GradleKpmConfigurationProvider {
|
||||
project.configurations.maybeCreate(disambiguateName("runtimeElements")).apply {
|
||||
isCanBeResolved = false
|
||||
isCanBeConsumed = false
|
||||
module.ifMadePublic { isCanBeConsumed = true }
|
||||
}
|
||||
},
|
||||
relations = FragmentConfigurationRelation {
|
||||
relations = GradleKpmConfigurationRelationSetup {
|
||||
extendsFrom(dependencies.transitiveApiConfiguration)
|
||||
extendsFrom(dependencies.transitiveImplementationConfiguration)
|
||||
extendsFrom(dependencies.transitiveRuntimeOnlyConfiguration)
|
||||
},
|
||||
attributes = KotlinFragmentPlatformAttributes + KotlinFragmentProducerRuntimeUsageAttribute + FragmentAttributes {
|
||||
attributes = GradleKpmPlatformAttributes + GradleKpmProducerRuntimeUsageAttribute + GradleKpmConfigurationAttributesSetup {
|
||||
attribute(Category.CATEGORY_ATTRIBUTE, fragment.project.objects.named(Category::class.java, Category.LIBRARY))
|
||||
attribute(Bundling.BUNDLING_ATTRIBUTE, fragment.project.objects.named(Bundling::class.java, Bundling.EXTERNAL))
|
||||
},
|
||||
capabilities = KotlinFragmentModuleCapability
|
||||
capabilities = GradleKpmModuleCapability
|
||||
)
|
||||
|
||||
val DefaultKotlinHostSpecificMetadataElementsDefinition = ConfigurationDefinition(
|
||||
provider = ConfigurationProvider {
|
||||
val DefaultKotlinHostSpecificMetadataElementsDefinition = GradleKpmConfigurationSetup(
|
||||
provider = GradleKpmConfigurationProvider {
|
||||
project.configurations.maybeCreate(disambiguateName("hostSpecificMetadataElements")).apply {
|
||||
isCanBeResolved = false
|
||||
isCanBeConsumed = false
|
||||
}
|
||||
},
|
||||
attributes = KotlinFragmentPlatformAttributes + KotlinFragmentKonanTargetAttribute + KotlinFragmentMetadataUsageAttribute,
|
||||
artifacts = KotlinFragmentHostSpecificMetadataArtifact
|
||||
attributes = GradleKpmPlatformAttributes + GradleKpmKonanTargetAttribute + GradleKpmMetadataUsageAttribute,
|
||||
artifacts = GradleKpmHostSpecificMetadataArtifact
|
||||
)
|
||||
|
||||
+19
-20
@@ -15,12 +15,12 @@ import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
|
||||
import org.jetbrains.kotlin.project.model.*
|
||||
|
||||
internal fun resolvableMetadataConfiguration(
|
||||
module: KpmGradleModule
|
||||
module: GradleKpmModule
|
||||
) = module.project.configurations.getByName(module.resolvableMetadataConfigurationName)
|
||||
|
||||
internal fun configurationToResolveMetadataDependencies(project: Project, requestingModule: KpmModule): Configuration =
|
||||
when {
|
||||
project.hasKpmModel -> resolvableMetadataConfiguration(requestingModule as KpmGradleModule)
|
||||
project.hasKpmModel -> resolvableMetadataConfiguration(requestingModule as GradleKpmModule)
|
||||
else -> resolvableMetadataConfiguration(
|
||||
project,
|
||||
project.kotlinExtension.sourceSets, // take dependencies from all source sets; TODO introduce consistency scopes?
|
||||
@@ -29,34 +29,34 @@ internal fun configurationToResolveMetadataDependencies(project: Project, reques
|
||||
}
|
||||
|
||||
|
||||
class KpmGradleDependencyGraphResolver(
|
||||
class GradleKpmDependencyGraphResolver(
|
||||
private val moduleResolver: KpmModuleDependencyResolver
|
||||
) : KpmDependencyGraphResolver {
|
||||
|
||||
private fun configurationToResolve(requestingModule: KpmGradleModule): Configuration =
|
||||
private fun configurationToResolve(requestingModule: GradleKpmModule): Configuration =
|
||||
configurationToResolveMetadataDependencies(requestingModule.project, requestingModule)
|
||||
|
||||
override fun resolveDependencyGraph(requestingModule: KpmModule): KpmDependencyGraphResolution {
|
||||
if (requestingModule !is KpmGradleModule)
|
||||
if (requestingModule !is GradleKpmModule)
|
||||
return KpmDependencyGraphResolution.Unknown(requestingModule)
|
||||
return resolveAsGraph(requestingModule)
|
||||
}
|
||||
|
||||
private fun resolveAsGraph(requestingModule: KpmGradleModule): KpmGradleDependencyGraph {
|
||||
val nodeByModuleId = mutableMapOf<KpmModuleIdentifier, GradleDependencyGraphNode>()
|
||||
private fun resolveAsGraph(requestingModule: GradleKpmModule): GradleKpmDependencyGraph {
|
||||
val nodeByModuleId = mutableMapOf<KpmModuleIdentifier, GradleKpmDependencyGraphNode>()
|
||||
|
||||
fun getKotlinModuleFromComponentResult(component: ResolvedComponentResult): KpmModule =
|
||||
moduleResolver.resolveDependency(requestingModule, component.toModuleDependency())
|
||||
moduleResolver.resolveDependency(requestingModule, component.toKpmModuleDependency())
|
||||
?: buildSyntheticPlainModule(
|
||||
component,
|
||||
component.variants.singleOrNull()?.displayName ?: "default",
|
||||
)
|
||||
|
||||
fun nodeFromModule(componentResult: ResolvedComponentResult, kpmModule: KpmModule): GradleDependencyGraphNode {
|
||||
fun nodeFromModule(componentResult: ResolvedComponentResult, kpmModule: KpmModule): GradleKpmDependencyGraphNode {
|
||||
val id = kpmModule.moduleIdentifier
|
||||
return nodeByModuleId.getOrPut(id) {
|
||||
val metadataSourceComponent =
|
||||
(kpmModule as? KpmExternalImportedModule)
|
||||
(kpmModule as? GradleKpmExternalImportedModule)
|
||||
?.takeIf { it.hasLegacyMetadataModule }
|
||||
?.let { (componentResult.dependencies.singleOrNull() as? ResolvedDependencyResult)?.selected }
|
||||
?: componentResult
|
||||
@@ -68,8 +68,8 @@ class KpmGradleDependencyGraphResolver(
|
||||
.filterIsInstance<ResolvedDependencyResult>()
|
||||
// This filter statement is used to only visit the dependencies of the variant(s) of the requested Kotlin module and not
|
||||
// other variants. This prevents infinite recursion when visiting multiple Kotlin modules within one Gradle components
|
||||
.filter { dependency -> dependency.requested.toModuleIdentifiers().any { it in dependenciesRequestedByModule } }
|
||||
.flatMap { dependency -> dependency.requested.toModuleIdentifiers().map { id -> id to dependency.selected } }
|
||||
.filter { dependency -> dependency.requested.toKpmModuleIdentifiers().any { it in dependenciesRequestedByModule } }
|
||||
.flatMap { dependency -> dependency.requested.toKpmModuleIdentifiers().map { id -> id to dependency.selected } }
|
||||
.toMap()
|
||||
|
||||
val fragmentDependencies = kpmModule.fragments.associateWith { it.declaredModuleDependencies }
|
||||
@@ -81,7 +81,7 @@ class KpmGradleDependencyGraphResolver(
|
||||
}
|
||||
}
|
||||
|
||||
GradleDependencyGraphNode(
|
||||
GradleKpmDependencyGraphNode(
|
||||
kpmModule,
|
||||
componentResult,
|
||||
metadataSourceComponent,
|
||||
@@ -90,24 +90,23 @@ class KpmGradleDependencyGraphResolver(
|
||||
}
|
||||
}
|
||||
|
||||
return KpmGradleDependencyGraph(
|
||||
return GradleKpmDependencyGraph(
|
||||
requestingModule,
|
||||
nodeFromModule(configurationToResolve(requestingModule).incoming.resolutionResult.root, requestingModule)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class GradleDependencyGraphNode(
|
||||
class GradleKpmDependencyGraphNode(
|
||||
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<KpmFragment, Iterable<GradleDependencyGraphNode>>
|
||||
override val dependenciesByFragment: Map<KpmFragment, Iterable<GradleKpmDependencyGraphNode>>
|
||||
) : KpmDependencyGraphNode(module, dependenciesByFragment)
|
||||
|
||||
class KpmGradleDependencyGraph(
|
||||
override val requestingModule: KpmGradleModule,
|
||||
override val root: GradleDependencyGraphNode
|
||||
class GradleKpmDependencyGraph(
|
||||
override val requestingModule: GradleKpmModule,
|
||||
override val root: GradleKpmDependencyGraphNode
|
||||
) : KpmDependencyGraphResolution.KpmDependencyGraph(requestingModule, root)
|
||||
|
||||
|
||||
+24
-69
@@ -16,60 +16,15 @@ 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 KpmCachingModuleDependencyResolver(private val actualResolver: KpmModuleDependencyResolver) : KpmModuleDependencyResolver {
|
||||
private val cacheByRequestingModule = WeakHashMap<KpmModule, MutableMap<KpmModuleDependency, KpmModule?>>()
|
||||
|
||||
private fun cacheForRequestingModule(requestingModule: KpmModule) =
|
||||
cacheByRequestingModule.getOrPut(requestingModule) { mutableMapOf() }
|
||||
|
||||
override fun resolveDependency(requestingModule: KpmModule, moduleDependency: KpmModuleDependency): KpmModule? =
|
||||
cacheForRequestingModule(requestingModule).getOrPut(moduleDependency) {
|
||||
actualResolver.resolveDependency(requestingModule, moduleDependency)
|
||||
}
|
||||
}
|
||||
|
||||
open class GradleComponentResultCachingResolver {
|
||||
private val cachedResultsByRequestingModule = mutableMapOf<KpmGradleModule, Map<KpmModuleIdentifier, ResolvedComponentResult>>()
|
||||
|
||||
protected open fun configurationToResolve(requestingModule: KpmGradleModule): Configuration =
|
||||
configurationToResolveMetadataDependencies(requestingModule.project, requestingModule)
|
||||
|
||||
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: KpmGradleModule): Map<KpmModuleIdentifier, ResolvedComponentResult> =
|
||||
cachedResultsByRequestingModule.getOrPut(module) { resolveDependencies(module) }
|
||||
|
||||
fun resolveModuleDependencyAsComponentResult(
|
||||
requestingModule: KpmGradleModule,
|
||||
moduleDependency: KpmModuleDependency
|
||||
): ResolvedComponentResult? =
|
||||
getResultsForModule(requestingModule)[moduleDependency.moduleIdentifier]
|
||||
|
||||
companion object {
|
||||
fun getForCurrentBuild(project: Project): GradleComponentResultCachingResolver {
|
||||
val extraPropertyName = "org.jetbrains.kotlin.dependencyResolution.gradleComponentResolver.${project.getKotlinPluginVersion()}"
|
||||
return project.getOrPutRootProjectProperty(extraPropertyName) {
|
||||
GradleComponentResultCachingResolver()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class KpmGradleModuleDependencyResolver(
|
||||
private val gradleComponentResultResolver: GradleComponentResultCachingResolver,
|
||||
class GradleKpmModuleDependencyResolver(
|
||||
private val gradleComponentResultResolver: GradleKpmComponentResultCachingResolver,
|
||||
private val projectStructureMetadataModuleBuilder: ProjectStructureMetadataModuleBuilder,
|
||||
private val projectModuleBuilder: GradleProjectModuleBuilder
|
||||
) : KpmModuleDependencyResolver {
|
||||
|
||||
override fun resolveDependency(requestingModule: KpmModule, moduleDependency: KpmModuleDependency): KpmModule? {
|
||||
require(requestingModule is KpmGradleModule)
|
||||
require(requestingModule is GradleKpmModule)
|
||||
val project = requestingModule.project
|
||||
|
||||
val component = gradleComponentResultResolver.resolveModuleDependencyAsComponentResult(requestingModule, moduleDependency)
|
||||
@@ -101,11 +56,11 @@ class KpmGradleModuleDependencyResolver(
|
||||
fun getForCurrentBuild(project: Project): KpmModuleDependencyResolver {
|
||||
val extraPropertyName = "org.jetbrains.kotlin.dependencyResolution.moduleResolver.${project.getKotlinPluginVersion()}"
|
||||
return project.getOrPutRootProjectProperty(extraPropertyName) {
|
||||
val componentResultResolver = GradleComponentResultCachingResolver.getForCurrentBuild(project)
|
||||
val componentResultResolver = GradleKpmComponentResultCachingResolver.getForCurrentBuild(project)
|
||||
val metadataModuleBuilder = ProjectStructureMetadataModuleBuilder()
|
||||
val projectModuleBuilder = GradleProjectModuleBuilder(true)
|
||||
KpmCachingModuleDependencyResolver(
|
||||
KpmGradleModuleDependencyResolver(componentResultResolver, metadataModuleBuilder, projectModuleBuilder)
|
||||
GradleKpmCachingModuleDependencyResolver(
|
||||
GradleKpmModuleDependencyResolver(componentResultResolver, metadataModuleBuilder, projectModuleBuilder)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -117,21 +72,21 @@ class KpmGradleModuleDependencyResolver(
|
||||
internal fun buildSyntheticPlainModule(
|
||||
resolvedComponentResult: ResolvedComponentResult,
|
||||
singleVariantName: String,
|
||||
): KpmExternalPlainModule {
|
||||
val moduleDependency = resolvedComponentResult.toModuleDependency()
|
||||
return KpmExternalPlainModule(KpmBasicModule(moduleDependency.moduleIdentifier).apply {
|
||||
): GradleKpmExternalPlainModule {
|
||||
val moduleDependency = resolvedComponentResult.toKpmModuleDependency()
|
||||
return GradleKpmExternalPlainModule(KpmBasicModule(moduleDependency.moduleIdentifier).apply {
|
||||
KpmBasicVariant(this@apply, singleVariantName, DefaultLanguageSettingsBuilder()).apply {
|
||||
fragments.add(this)
|
||||
this.declaredModuleDependencies.addAll(
|
||||
resolvedComponentResult.dependencies
|
||||
.filterIsInstance<ResolvedDependencyResult>()
|
||||
.map { it.selected.toModuleDependency() }
|
||||
.map { it.selected.toKpmModuleDependency() }
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
internal class KpmExternalPlainModule(private val moduleData: KpmBasicModule) : KpmModule by moduleData {
|
||||
internal class GradleKpmExternalPlainModule(private val moduleData: KpmBasicModule) : KpmModule by moduleData {
|
||||
override fun toString(): String = "external plain $moduleData"
|
||||
|
||||
val singleVariant: KpmVariant
|
||||
@@ -139,7 +94,7 @@ internal class KpmExternalPlainModule(private val moduleData: KpmBasicModule) :
|
||||
?: error("synthetic $moduleData was expected to have a single variant, got: ${moduleData.variants}")
|
||||
}
|
||||
|
||||
internal class KpmExternalImportedModule(
|
||||
internal class GradleKpmExternalImportedModule(
|
||||
private val moduleData: KpmBasicModule,
|
||||
val projectStructureMetadata: KotlinProjectStructureMetadata,
|
||||
val hostSpecificFragments: Set<KpmFragment>
|
||||
@@ -149,28 +104,28 @@ internal class KpmExternalImportedModule(
|
||||
override fun toString(): String = "imported $moduleData"
|
||||
}
|
||||
|
||||
private fun ModuleComponentIdentifier.toSingleModuleIdentifier(classifier: String? = null): KpmMavenModuleIdentifier =
|
||||
private fun ModuleComponentIdentifier.toSingleKpmModuleIdentifier(classifier: String? = null): KpmMavenModuleIdentifier =
|
||||
KpmMavenModuleIdentifier(moduleIdentifier.group, moduleIdentifier.name, classifier)
|
||||
|
||||
internal fun ComponentIdentifier.matchesModule(module: KpmModule): Boolean =
|
||||
matchesModuleIdentifier(module.moduleIdentifier)
|
||||
|
||||
internal fun ResolvedComponentResult.toModuleIdentifiers(): List<KpmModuleIdentifier> {
|
||||
internal fun ResolvedComponentResult.toKpmModuleIdentifiers(): List<KpmModuleIdentifier> {
|
||||
val classifiers = moduleClassifiersFromCapabilities(variants.flatMap { it.capabilities })
|
||||
return classifiers.map { moduleClassifier -> toModuleIdentifier(moduleClassifier) }
|
||||
return classifiers.map { moduleClassifier -> toKpmModuleIdentifier(moduleClassifier) }
|
||||
}
|
||||
|
||||
// FIXME this mapping doesn't have enough information to choose auxiliary modules
|
||||
internal fun ResolvedComponentResult.toSingleModuleIdentifier(): KpmModuleIdentifier {
|
||||
internal fun ResolvedComponentResult.toSingleKpmModuleIdentifier(): KpmModuleIdentifier {
|
||||
val classifiers = moduleClassifiersFromCapabilities(variants.flatMap { it.capabilities })
|
||||
val moduleClassifier = classifiers.single() // FIXME handle multiple capabilities
|
||||
return toModuleIdentifier(moduleClassifier)
|
||||
return toKpmModuleIdentifier(moduleClassifier)
|
||||
}
|
||||
|
||||
private fun ResolvedComponentResult.toModuleIdentifier(moduleClassifier: String?): KpmModuleIdentifier {
|
||||
private fun ResolvedComponentResult.toKpmModuleIdentifier(moduleClassifier: String?): KpmModuleIdentifier {
|
||||
return when (val id = id) {
|
||||
is ProjectComponentIdentifier -> KpmLocalModuleIdentifier(id.build.name, id.projectPath, moduleClassifier)
|
||||
is ModuleComponentIdentifier -> id.toSingleModuleIdentifier()
|
||||
is ModuleComponentIdentifier -> id.toSingleKpmModuleIdentifier()
|
||||
else -> KpmMavenModuleIdentifier(moduleVersion?.group.orEmpty(), moduleVersion?.name.orEmpty(), moduleClassifier)
|
||||
}
|
||||
}
|
||||
@@ -180,7 +135,7 @@ 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<KpmModuleIdentifier> {
|
||||
internal fun ComponentSelector.toKpmModuleIdentifiers(): Iterable<KpmModuleIdentifier> {
|
||||
val moduleClassifiers = moduleClassifiersFromCapabilities(requestedCapabilities)
|
||||
return when (this) {
|
||||
is ProjectComponentSelector -> moduleClassifiers.map { KpmLocalModuleIdentifier(buildName, projectPath, it) }
|
||||
@@ -189,9 +144,9 @@ internal fun ComponentSelector.toModuleIdentifiers(): Iterable<KpmModuleIdentifi
|
||||
}
|
||||
}
|
||||
|
||||
internal fun ResolvedComponentResult.toModuleDependency(): KpmModuleDependency = KpmModuleDependency(toSingleModuleIdentifier())
|
||||
internal fun ComponentSelector.toModuleDependency(): KpmModuleDependency {
|
||||
val moduleId = toModuleIdentifiers().single() // FIXME handle multiple
|
||||
internal fun ResolvedComponentResult.toKpmModuleDependency(): KpmModuleDependency = KpmModuleDependency(toSingleKpmModuleIdentifier())
|
||||
internal fun ComponentSelector.toKpmModuleDependency(): KpmModuleDependency {
|
||||
val moduleId = toKpmModuleIdentifiers().single() // FIXME handle multiple
|
||||
return KpmModuleDependency(moduleId)
|
||||
}
|
||||
|
||||
@@ -206,7 +161,7 @@ internal fun ComponentIdentifier.matchesModuleIdentifier(id: KpmModuleIdentifier
|
||||
}
|
||||
is KpmMavenModuleIdentifier -> {
|
||||
val componentId = this as? ModuleComponentIdentifier
|
||||
componentId?.toSingleModuleIdentifier() == id
|
||||
componentId?.toSingleKpmModuleIdentifier() == id
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
|
||||
+22
-22
@@ -14,9 +14,9 @@ import org.jetbrains.kotlin.utils.addToStdlib.flattenTo
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
internal class FragmentGranularMetadataResolver(
|
||||
private val requestingFragment: KpmGradleFragment,
|
||||
private val refinesParentResolvers: Lazy<Iterable<FragmentGranularMetadataResolver>>
|
||||
internal class GradleKpmFragmentGranularMetadataResolver(
|
||||
private val requestingFragment: GradleKpmFragment,
|
||||
private val refinesParentResolvers: Lazy<Iterable<GradleKpmFragmentGranularMetadataResolver>>
|
||||
) {
|
||||
val resolutions: Iterable<MetadataDependencyResolution> by lazy {
|
||||
doResolveMetadataDependencies()
|
||||
@@ -26,33 +26,33 @@ internal class FragmentGranularMetadataResolver(
|
||||
get() = requestingFragment.containingModule.project
|
||||
|
||||
private val parentResultsByModuleIdentifier: Map<KpmModuleIdentifier, List<MetadataDependencyResolution>> by lazy {
|
||||
refinesParentResolvers.value.flatMap { it.resolutions }.groupBy { it.dependency.toSingleModuleIdentifier() }
|
||||
refinesParentResolvers.value.flatMap { it.resolutions }.groupBy { it.dependency.toSingleKpmModuleIdentifier() }
|
||||
}
|
||||
|
||||
private val moduleResolver = KpmGradleModuleDependencyResolver.getForCurrentBuild(project)
|
||||
private val variantResolver = GradleModuleVariantResolver.getForCurrentBuild(project)
|
||||
private val fragmentResolver = DefaultModuleFragmentsResolver(variantResolver)
|
||||
private val dependencyGraphResolver = KpmGradleDependencyGraphResolver(moduleResolver)
|
||||
private val moduleResolver = GradleKpmModuleDependencyResolver.getForCurrentBuild(project)
|
||||
private val variantResolver = KpmGradleModuleVariantResolver.getForCurrentBuild(project)
|
||||
private val fragmentResolver = KpmDefaultFragmentsResolver(variantResolver)
|
||||
private val dependencyGraphResolver = GradleKpmDependencyGraphResolver(moduleResolver)
|
||||
|
||||
private fun doResolveMetadataDependencies(): Iterable<MetadataDependencyResolution> {
|
||||
val configurationToResolve = configurationToResolveMetadataDependencies(project, requestingFragment.containingModule)
|
||||
val resolvedComponentsByModuleId =
|
||||
configurationToResolve.incoming.resolutionResult.allComponents.associateBy { it.toSingleModuleIdentifier() }
|
||||
configurationToResolve.incoming.resolutionResult.allComponents.associateBy { it.toSingleKpmModuleIdentifier() }
|
||||
val resolvedDependenciesByModuleId =
|
||||
configurationToResolve.incoming.resolutionResult.allDependencies.filterIsInstance<ResolvedDependencyResult>()
|
||||
.flatMap { dependency -> dependency.requested.toModuleIdentifiers().map { id -> id to dependency } }.toMap()
|
||||
.flatMap { dependency -> dependency.requested.toKpmModuleIdentifiers().map { id -> id to dependency } }.toMap()
|
||||
|
||||
val dependencyGraph = dependencyGraphResolver.resolveDependencyGraph(requestingFragment.containingModule)
|
||||
|
||||
if (dependencyGraph is KpmDependencyGraphResolution.Unknown)
|
||||
error("unexpected failure in dependency graph resolution for $requestingFragment in $project")
|
||||
|
||||
dependencyGraph as KpmGradleDependencyGraph // refactor the type hierarchy to avoid this downcast? FIXME?
|
||||
dependencyGraph as GradleKpmDependencyGraph // refactor the type hierarchy to avoid this downcast? FIXME?
|
||||
val fragmentsToInclude = requestingFragment.withRefinesClosure
|
||||
val requestedDependencies = dependencyGraph.root.dependenciesByFragment.filterKeys { it in fragmentsToInclude }.values.flatten()
|
||||
|
||||
val visited = mutableSetOf<GradleDependencyGraphNode>()
|
||||
val fragmentResolutionQueue = ArrayDeque<GradleDependencyGraphNode>(requestedDependencies)
|
||||
val visited = mutableSetOf<GradleKpmDependencyGraphNode>()
|
||||
val fragmentResolutionQueue = ArrayDeque<GradleKpmDependencyGraphNode>(requestedDependencies)
|
||||
|
||||
val results = mutableSetOf<MetadataDependencyResolution>()
|
||||
|
||||
@@ -63,7 +63,7 @@ internal class FragmentGranularMetadataResolver(
|
||||
val dependencyModule = dependencyNode.module
|
||||
|
||||
val fragmentVisibility = fragmentResolver.getChosenFragments(requestingFragment, dependencyModule)
|
||||
val chosenFragments = fragmentVisibility as? FragmentResolution.ChosenFragments
|
||||
val chosenFragments = fragmentVisibility as? KpmFragmentResolution.ChosenFragments
|
||||
val visibleFragments = chosenFragments?.visibleFragments?.toList().orEmpty()
|
||||
|
||||
val visibleTransitiveDependencies =
|
||||
@@ -74,7 +74,7 @@ internal class FragmentGranularMetadataResolver(
|
||||
val resolvedComponentResult = dependencyNode.selectedComponent
|
||||
val isResolvedAsProject = resolvedComponentResult.toProjectOrNull(project)
|
||||
val result = when (dependencyModule) {
|
||||
is KpmExternalPlainModule -> {
|
||||
is GradleKpmExternalPlainModule -> {
|
||||
MetadataDependencyResolution.KeepOriginalDependency(resolvedComponentResult, isResolvedAsProject)
|
||||
}
|
||||
else -> run {
|
||||
@@ -83,7 +83,7 @@ internal class FragmentGranularMetadataResolver(
|
||||
|
||||
val visibleFragmentNames = visibleFragments.map { it.fragmentName }.toSet()
|
||||
val visibleFragmentNamesExcludingVisibleByParents =
|
||||
visibleFragmentNames.minus(fragmentsNamesVisibleByParents(metadataSourceComponent.toSingleModuleIdentifier()))
|
||||
visibleFragmentNames.minus(fragmentsNamesVisibleByParents(metadataSourceComponent.toSingleKpmModuleIdentifier()))
|
||||
|
||||
/*
|
||||
We can safely assume that a metadata extractor can be created, because the project structure metadata already
|
||||
@@ -96,7 +96,7 @@ internal class FragmentGranularMetadataResolver(
|
||||
"the presence of a proper Kotlin Module"
|
||||
)
|
||||
|
||||
val projectStructureMetadata = (dependencyModule as? KpmExternalImportedModule)?.projectStructureMetadata
|
||||
val projectStructureMetadata = (dependencyModule as? GradleKpmExternalImportedModule)?.projectStructureMetadata
|
||||
?: checkNotNull(projectStructureMetadataExtractor.getProjectStructureMetadata())
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ internal class FragmentGranularMetadataResolver(
|
||||
projectStructureMetadata = projectStructureMetadata,
|
||||
primaryArtifactFile = projectStructureMetadataExtractor.primaryArtifactFile,
|
||||
hostSpecificArtifactsBySourceSet = if (
|
||||
dependencyModule is KpmExternalImportedModule && chosenFragments != null
|
||||
dependencyModule is GradleKpmExternalImportedModule && chosenFragments != null
|
||||
) resolveHostSpecificMetadataArtifacts(dependencyModule, chosenFragments) else emptyMap(),
|
||||
).asMetadataProvider()
|
||||
}
|
||||
@@ -147,21 +147,21 @@ internal class FragmentGranularMetadataResolver(
|
||||
}
|
||||
|
||||
private fun resolveHostSpecificMetadataArtifacts(
|
||||
dependencyModule: KpmExternalImportedModule,
|
||||
chosenFragments: FragmentResolution.ChosenFragments,
|
||||
dependencyModule: GradleKpmExternalImportedModule,
|
||||
chosenFragments: KpmFragmentResolution.ChosenFragments,
|
||||
): Map<String, File> {
|
||||
val visibleFragments = chosenFragments.visibleFragments
|
||||
val variantResolutions = chosenFragments.variantResolutions
|
||||
val hostSpecificFragments = dependencyModule.hostSpecificFragments
|
||||
return visibleFragments.intersect(hostSpecificFragments).mapNotNull { hostSpecificFragment ->
|
||||
val relevantVariantResolution = variantResolutions
|
||||
.filterIsInstance<VariantResolution.VariantMatch>()
|
||||
.filterIsInstance<KpmVariantResolution.KpmVariantMatch>()
|
||||
// find some of our variants that resolved a dependency's variant containing the fragment
|
||||
.find { hostSpecificFragment in it.chosenVariant.withRefinesClosure }
|
||||
// resolve the dependencies of that variant getting the host-specific metadata artifact
|
||||
relevantVariantResolution?.let { resolution ->
|
||||
val configurationResolvingPlatformVariant =
|
||||
(resolution.requestingVariant as KpmGradleVariant).compileDependenciesConfiguration
|
||||
(resolution.requestingVariant as GradleKpmVariant).compileDependenciesConfiguration
|
||||
val hostSpecificArtifact = ResolvedMppVariantsProvider.get(project)
|
||||
.getHostSpecificMetadataArtifactByRootModule(
|
||||
dependencyModule.moduleIdentifier,
|
||||
|
||||
+4
-4
@@ -5,11 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
internal class FragmentGranularMetadataResolverFactory {
|
||||
private val resolvers = mutableMapOf<KpmGradleFragment, FragmentGranularMetadataResolver>()
|
||||
internal class GradleKpmFragmentGranularMetadataResolverFactory {
|
||||
private val resolvers = mutableMapOf<GradleKpmFragment, GradleKpmFragmentGranularMetadataResolver>()
|
||||
|
||||
fun getOrCreate(fragment: KpmGradleFragment): FragmentGranularMetadataResolver = resolvers.getOrPut(fragment) {
|
||||
FragmentGranularMetadataResolver(fragment, lazy {
|
||||
fun getOrCreate(fragment: GradleKpmFragment): GradleKpmFragmentGranularMetadataResolver = resolvers.getOrPut(fragment) {
|
||||
GradleKpmFragmentGranularMetadataResolver(fragment, lazy {
|
||||
fragment.refinesClosure.map { refinesFragment ->
|
||||
getOrCreate(refinesFragment)
|
||||
}
|
||||
|
||||
+8
-8
@@ -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<KpmGradleFragment, SourceRootsProvider>
|
||||
typealias SourceRootsProvidersByFragment = Map<GradleKpmFragment, 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 {
|
||||
open class GradleKpmFragmentSourcesProvider {
|
||||
protected open fun getSourcesFromFragmentsAsMap(
|
||||
fragments: Iterable<KpmGradleFragment>
|
||||
fragments: Iterable<GradleKpmFragment>
|
||||
): SourceRootsProvidersByFragment =
|
||||
fragments.associateWith { it.project.provider { it.kotlinSourceRoots } }
|
||||
|
||||
open fun getFragmentOwnSources(fragment: KpmGradleFragment): SourceRootsProvider =
|
||||
open fun getFragmentOwnSources(fragment: GradleKpmFragment): SourceRootsProvider =
|
||||
getSourcesFromFragmentsAsMap(listOf(fragment)).values.single()
|
||||
|
||||
open fun getAllFragmentSourcesAsMap(module: KpmGradleModule): SourceRootsProvidersByFragment =
|
||||
open fun getAllFragmentSourcesAsMap(module: GradleKpmModule): SourceRootsProvidersByFragment =
|
||||
getSourcesFromFragmentsAsMap(module.fragments)
|
||||
|
||||
open fun getSourcesFromRefinesClosureAsMap(fragment: KpmGradleFragment): SourceRootsProvidersByFragment =
|
||||
open fun getSourcesFromRefinesClosureAsMap(fragment: GradleKpmFragment): SourceRootsProvidersByFragment =
|
||||
getSourcesFromFragmentsAsMap(fragment.withRefinesClosure)
|
||||
|
||||
open fun getSourcesFromRefinesClosure(fragment: KpmGradleFragment): MultipleSourceRootsProvider =
|
||||
open fun getSourcesFromRefinesClosure(fragment: GradleKpmFragment): MultipleSourceRootsProvider =
|
||||
fragment.project.provider { getSourcesFromRefinesClosureAsMap(fragment).values }
|
||||
|
||||
open fun getCommonSourcesFromRefinesClosure(fragment: KpmGradleFragment): MultipleSourceRootsProvider {
|
||||
open fun getCommonSourcesFromRefinesClosure(fragment: GradleKpmFragment): MultipleSourceRootsProvider {
|
||||
val containingModule = fragment.containingModule
|
||||
val project = containingModule.project
|
||||
getSourcesFromRefinesClosureAsMap(fragment)
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.jetbrains.kotlin.project.model.KpmModule
|
||||
import org.jetbrains.kotlin.project.model.KpmModuleDependency
|
||||
import org.jetbrains.kotlin.project.model.KpmModuleDependencyResolver
|
||||
import java.util.*
|
||||
|
||||
class GradleKpmCachingModuleDependencyResolver(private val actualResolver: KpmModuleDependencyResolver) : KpmModuleDependencyResolver {
|
||||
private val cacheByRequestingModule = WeakHashMap<KpmModule, MutableMap<KpmModuleDependency, KpmModule?>>()
|
||||
|
||||
private fun cacheForRequestingModule(requestingModule: KpmModule) =
|
||||
cacheByRequestingModule.getOrPut(requestingModule) { mutableMapOf() }
|
||||
|
||||
override fun resolveDependency(requestingModule: KpmModule, moduleDependency: KpmModuleDependency): KpmModule? =
|
||||
cacheForRequestingModule(requestingModule).getOrPut(moduleDependency) {
|
||||
actualResolver.resolveDependency(requestingModule, moduleDependency)
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -18,17 +18,17 @@ import org.jetbrains.kotlin.project.model.*
|
||||
import java.io.File
|
||||
|
||||
internal fun Project.compilerPluginProviderForMetadata(
|
||||
fragment: KpmGradleFragment,
|
||||
fragment: GradleKpmFragment,
|
||||
compilationData: KotlinCommonFragmentMetadataCompilationData
|
||||
) = compilerPluginDataProvider(compilationData, fragment::metadataCompilationPluginData)
|
||||
|
||||
internal fun Project.compilerPluginProviderForNativeMetadata(
|
||||
fragment: KpmGradleFragment,
|
||||
fragment: GradleKpmFragment,
|
||||
compilationData: KotlinNativeFragmentMetadataCompilationData
|
||||
) = compilerPluginDataProvider(compilationData, fragment::nativeMetadataCompilationPluginData)
|
||||
|
||||
internal fun Project.compilerPluginProviderForPlatformCompilation(
|
||||
variant: KpmGradleVariant,
|
||||
variant: GradleKpmVariant,
|
||||
compilationData: KotlinCompilationData<*>
|
||||
) = compilerPluginDataProvider(compilationData, variant::platformCompilationPluginData)
|
||||
|
||||
@@ -46,7 +46,7 @@ private fun Project.compilerPluginDataProvider(
|
||||
}.apply { disallowUnsafeRead() }
|
||||
}
|
||||
|
||||
internal class CompilerPluginOptionsBuilder(
|
||||
private class CompilerPluginOptionsBuilder(
|
||||
private val project: Project,
|
||||
private val configurationName: String
|
||||
) {
|
||||
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.artifacts.result.ResolvedComponentResult
|
||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
||||
import org.jetbrains.kotlin.gradle.utils.getOrPutRootProjectProperty
|
||||
import org.jetbrains.kotlin.project.model.KpmModuleDependency
|
||||
import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
|
||||
|
||||
open class GradleKpmComponentResultCachingResolver {
|
||||
private val cachedResultsByRequestingModule = mutableMapOf<GradleKpmModule, Map<KpmModuleIdentifier, ResolvedComponentResult>>()
|
||||
|
||||
protected open fun configurationToResolve(requestingModule: GradleKpmModule): Configuration =
|
||||
configurationToResolveMetadataDependencies(requestingModule.project, requestingModule)
|
||||
|
||||
protected open fun resolveDependencies(module: GradleKpmModule): Map<KpmModuleIdentifier, ResolvedComponentResult> {
|
||||
val allComponents = configurationToResolve(module).incoming.resolutionResult.allComponents
|
||||
// FIXME handle multi-component results
|
||||
return allComponents.flatMap { component -> component.toKpmModuleIdentifiers().map { it to component } }.toMap()
|
||||
}
|
||||
|
||||
private fun getResultsForModule(module: GradleKpmModule): Map<KpmModuleIdentifier, ResolvedComponentResult> =
|
||||
cachedResultsByRequestingModule.getOrPut(module) { resolveDependencies(module) }
|
||||
|
||||
fun resolveModuleDependencyAsComponentResult(
|
||||
requestingModule: GradleKpmModule,
|
||||
moduleDependency: KpmModuleDependency
|
||||
): ResolvedComponentResult? =
|
||||
getResultsForModule(requestingModule)[moduleDependency.moduleIdentifier]
|
||||
|
||||
companion object {
|
||||
fun getForCurrentBuild(project: Project): GradleKpmComponentResultCachingResolver {
|
||||
val extraPropertyName = "org.jetbrains.kotlin.dependencyResolution.gradleComponentResolver.${project.getKotlinPluginVersion()}"
|
||||
return project.getOrPutRootProjectProperty(extraPropertyName) {
|
||||
GradleKpmComponentResultCachingResolver()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.publish.maven.MavenPublication
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.MavenPublicationCoordinatesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability
|
||||
|
||||
class GradleKpmDefaultSingleMavenPublishedModuleHolder(
|
||||
private var module: GradleKpmModule, override val defaultPublishedModuleSuffix: String?
|
||||
) : GradleKpmSingleMavenPublishedModuleHolder {
|
||||
private val project get() = module.project
|
||||
|
||||
private var assignedMavenPublication: MavenPublication? = null
|
||||
|
||||
private val publicationAssignedHandlers = mutableListOf<(MavenPublication) -> Unit>()
|
||||
|
||||
override fun assignMavenPublication(publication: MavenPublication) {
|
||||
if (assignedMavenPublication != null) error("already assigned publication $publication")
|
||||
assignedMavenPublication = publication
|
||||
publicationAssignedHandlers.forEach { it(publication) }
|
||||
}
|
||||
|
||||
override fun whenPublicationAssigned(handlePublication: (MavenPublication) -> Unit) {
|
||||
assignedMavenPublication?.let(handlePublication) ?: publicationAssignedHandlers.add(handlePublication)
|
||||
}
|
||||
|
||||
override val publishedMavenModuleCoordinates: PublishedModuleCoordinatesProvider = MavenPublicationCoordinatesProvider(
|
||||
project,
|
||||
{ assignedMavenPublication },
|
||||
defaultPublishedModuleSuffix,
|
||||
capabilities = listOfNotNull(ComputedCapability.capabilityStringFromModule(module))
|
||||
)
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeCompileOptions
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
|
||||
internal class GradleKpmNativeVariantCompilationData(
|
||||
val variant: GradleKpmNativeVariantInternal
|
||||
) : GradleKpmVariantCompilationDataInternal<KotlinCommonOptions>, KotlinNativeCompilationData<KotlinCommonOptions> {
|
||||
override val konanTarget: KonanTarget
|
||||
get() = variant.konanTarget
|
||||
|
||||
override val enableEndorsedLibs: Boolean
|
||||
get() = variant.enableEndorsedLibraries
|
||||
|
||||
override val project: Project
|
||||
get() = variant.containingModule.project
|
||||
|
||||
override val owner: GradleKpmNativeVariant
|
||||
get() = variant
|
||||
|
||||
override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions { variant.languageSettings }
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
|
||||
class GradleKpmNativeVariantConstructor<T : GradleKpmNativeVariantInternal>(
|
||||
val konanTarget: KonanTarget,
|
||||
val variantClass: Class<T>,
|
||||
private val constructor: (
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) -> T
|
||||
) {
|
||||
operator fun invoke(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
): T = constructor(
|
||||
containingModule, fragmentName,
|
||||
dependencyConfigurations,
|
||||
compileDependencyConfiguration,
|
||||
apiElementsConfiguration,
|
||||
hostSpecificMetadataElementsConfiguration
|
||||
)
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName
|
||||
import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
|
||||
|
||||
abstract class GradleKpmPublishedVariantWithRuntime(
|
||||
containingModule: GradleKpmModule, fragmentName: String,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
runtimeDependencyConfiguration: Configuration,
|
||||
runtimeElementsConfiguration: Configuration
|
||||
) : GradleKpmVariantWithRuntimeInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
dependencyConfigurations = dependencyConfigurations,
|
||||
compileDependencyConfiguration = compileDependencyConfiguration,
|
||||
apiElementsConfiguration = apiElementsConfiguration,
|
||||
runtimeDependenciesConfiguration = runtimeDependencyConfiguration,
|
||||
runtimeElementsConfiguration = runtimeElementsConfiguration
|
||||
), GradleKpmSingleMavenPublishedModuleHolder by GradleKpmDefaultSingleMavenPublishedModuleHolder(
|
||||
containingModule, defaultModuleSuffix(containingModule, fragmentName)
|
||||
) {
|
||||
override val gradleVariantNames: Set<String>
|
||||
get() = listOf(apiElementsConfiguration.name, runtimeElementsConfiguration.name).flatMapTo(mutableSetOf()) {
|
||||
listOf(it, publishedConfigurationName(it))
|
||||
}
|
||||
}
|
||||
|
||||
private fun defaultModuleSuffix(module: GradleKpmModule, variantName: String): String =
|
||||
dashSeparatedName(variantName, module.moduleClassifier)
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.file.ConfigurableFileCollection
|
||||
import org.gradle.api.file.FileCollection
|
||||
|
||||
abstract class GradleKpmVariantWithRuntimeInternal(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
final override val runtimeDependenciesConfiguration: Configuration,
|
||||
final override val runtimeElementsConfiguration: Configuration
|
||||
) : GradleKpmVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
dependencyConfigurations = dependencyConfigurations,
|
||||
compileDependenciesConfiguration = compileDependencyConfiguration,
|
||||
apiElementsConfiguration = apiElementsConfiguration
|
||||
), GradleKpmVariantWithRuntime {
|
||||
// TODO deduplicate with KotlinCompilation?
|
||||
|
||||
override var runtimeDependencyFiles: FileCollection = project.files(runtimeDependenciesConfiguration)
|
||||
|
||||
override val runtimeFiles: ConfigurableFileCollection =
|
||||
project.files(listOf({ compilationOutputs.allOutputs }, { runtimeDependencyFiles }))
|
||||
}
|
||||
+24
-24
@@ -44,13 +44,13 @@ abstract class KotlinPm20GradlePlugin @Inject constructor(
|
||||
|
||||
private fun createDefaultModules(project: Project) {
|
||||
project.pm20Extension.apply {
|
||||
modules.create(KpmGradleModule.MAIN_MODULE_NAME)
|
||||
modules.create(KpmGradleModule.TEST_MODULE_NAME)
|
||||
modules.create(GradleKpmModule.MAIN_MODULE_NAME)
|
||||
modules.create(GradleKpmModule.TEST_MODULE_NAME)
|
||||
main { makePublic() }
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupPublicationForModule(module: KpmGradleModule) {
|
||||
private fun setupPublicationForModule(module: GradleKpmModule) {
|
||||
val project = module.project
|
||||
|
||||
val metadataElements = project.configurations.getByName(metadataElementsConfigurationName(module))
|
||||
@@ -87,62 +87,62 @@ abstract class KotlinPm20GradlePlugin @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun rootPublicationComponentName(module: KpmGradleModule) =
|
||||
fun rootPublicationComponentName(module: GradleKpmModule) =
|
||||
module.disambiguateName("root")
|
||||
|
||||
open class KotlinPm20ProjectExtension(project: Project) : KotlinTopLevelExtension(project) {
|
||||
|
||||
internal val kpmModelContainer = DefaultKpmGradleProjectModelContainer.create(project)
|
||||
internal val kpmModelContainer = GradleKpmDefaultProjectModelContainer.create(project)
|
||||
|
||||
internal val ideaKotlinProjectModelBuilder by lazy { IdeaKotlinProjectModelBuilder.default(this) }
|
||||
|
||||
val modules: NamedDomainObjectContainer<KpmGradleModule>
|
||||
val modules: NamedDomainObjectContainer<GradleKpmModule>
|
||||
get() = project.kpmModules
|
||||
|
||||
@Suppress("unused") // DSL function
|
||||
fun mainAndTest(configure: KpmGradleModule.() -> Unit) {
|
||||
fun mainAndTest(configure: GradleKpmModule.() -> Unit) {
|
||||
main(configure)
|
||||
test(configure)
|
||||
}
|
||||
|
||||
val main: KpmGradleModule
|
||||
get() = modules.getByName(KpmGradleModule.MAIN_MODULE_NAME)
|
||||
val main: GradleKpmModule
|
||||
get() = modules.getByName(GradleKpmModule.MAIN_MODULE_NAME)
|
||||
|
||||
val test: KpmGradleModule
|
||||
get() = modules.getByName(KpmGradleModule.TEST_MODULE_NAME)
|
||||
val test: GradleKpmModule
|
||||
get() = modules.getByName(GradleKpmModule.TEST_MODULE_NAME)
|
||||
|
||||
fun main(configure: KpmGradleModule.() -> Unit = { }) = main.apply(configure)
|
||||
fun test(configure: KpmGradleModule.() -> Unit = { }) = test.apply(configure)
|
||||
fun main(configure: GradleKpmModule.() -> Unit = { }) = main.apply(configure)
|
||||
fun test(configure: GradleKpmModule.() -> Unit = { }) = test.apply(configure)
|
||||
|
||||
@PublishedApi
|
||||
@JvmName("isAllowCommonizer")
|
||||
internal fun isAllowCommonizerForIde(@Suppress("UNUSED_PARAMETER") project: Project): Boolean = false
|
||||
}
|
||||
|
||||
val KpmGradleModule.jvm: KpmJvmVariant
|
||||
get() = fragments.maybeCreate("jvm", KpmJvmVariant::class.java)
|
||||
val GradleKpmModule.jvm: GradleKpmJvmVariant
|
||||
get() = fragments.maybeCreate("jvm", GradleKpmJvmVariant::class.java)
|
||||
|
||||
fun KpmGradleModule.jvm(configure: KpmJvmVariant.() -> Unit): KpmJvmVariant = jvm.apply(configure)
|
||||
fun GradleKpmModule.jvm(configure: GradleKpmJvmVariant.() -> Unit): GradleKpmJvmVariant = jvm.apply(configure)
|
||||
|
||||
fun KotlinPm20ProjectExtension.jvm(configure: KotlinFragmentSlice<KpmJvmVariant>.() -> Unit) {
|
||||
val getOrCreateVariant: KpmGradleModule.() -> KpmJvmVariant = { jvm }
|
||||
fun KotlinPm20ProjectExtension.jvm(configure: KotlinFragmentSlice<GradleKpmJvmVariant>.() -> Unit) {
|
||||
val getOrCreateVariant: GradleKpmModule.() -> GradleKpmJvmVariant = { jvm }
|
||||
mainAndTest { getOrCreateVariant(this) }
|
||||
val slice = KotlinFragmentSlice(this, getOrCreateVariant)
|
||||
configure(slice)
|
||||
}
|
||||
|
||||
open class KotlinFragmentSlice<T : KpmGradleFragment>(
|
||||
open class KotlinFragmentSlice<T : GradleKpmFragment>(
|
||||
val pm20ProjectExtension: KotlinPm20ProjectExtension,
|
||||
val getOrCreateFragment: (KpmGradleModule) -> T
|
||||
val getOrCreateFragment: (GradleKpmModule) -> T
|
||||
) {
|
||||
fun inMain(configure: T.() -> Unit) {
|
||||
pm20ProjectExtension.modules.getByName(KpmGradleModule.MAIN_MODULE_NAME).apply {
|
||||
pm20ProjectExtension.modules.getByName(GradleKpmModule.MAIN_MODULE_NAME).apply {
|
||||
getOrCreateFragment(this).configure()
|
||||
}
|
||||
}
|
||||
|
||||
fun inTest(configure: T.() -> Unit) {
|
||||
pm20ProjectExtension.modules.getByName(KpmGradleModule.TEST_MODULE_NAME).apply {
|
||||
pm20ProjectExtension.modules.getByName(GradleKpmModule.TEST_MODULE_NAME).apply {
|
||||
getOrCreateFragment(this).configure()
|
||||
}
|
||||
}
|
||||
@@ -161,11 +161,11 @@ open class KotlinFragmentSlice<T : KpmGradleFragment>(
|
||||
pm20ProjectExtension.modules.getByName(moduleName).apply { getOrCreateFragment(this).configure() }
|
||||
}
|
||||
|
||||
fun inModule(module: NamedDomainObjectProvider<KpmGradleModule>, configure: T.() -> Unit) {
|
||||
fun inModule(module: NamedDomainObjectProvider<GradleKpmModule>, configure: T.() -> Unit) {
|
||||
module.get().apply { inModule(this, configure) }
|
||||
}
|
||||
|
||||
fun inModule(module: KpmGradleModule, configure: T.() -> Unit) {
|
||||
fun inModule(module: GradleKpmModule, configure: T.() -> Unit) {
|
||||
getOrCreateFragment(module).configure()
|
||||
}
|
||||
}
|
||||
|
||||
+19
-19
@@ -9,35 +9,35 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation
|
||||
|
||||
typealias KotlinCommonFragmentFactory = KotlinGradleFragmentFactory<KpmGradleFragmentInternal>
|
||||
typealias GradleKpmCommonFragmentFactory = GradleKpmFragmentFactory<GradleKpmFragmentInternal>
|
||||
|
||||
fun KotlinCommonFragmentFactory(module: KpmGradleModule): KotlinCommonFragmentFactory =
|
||||
KotlinCommonFragmentFactory(KotlinCommonFragmentInstantiator(module))
|
||||
fun GradleKpmCommonFragmentFactory(module: GradleKpmModule): GradleKpmCommonFragmentFactory =
|
||||
GradleKpmCommonFragmentFactory(GradleKpmCommonFragmentInstantiator(module))
|
||||
|
||||
fun KotlinCommonFragmentFactory(
|
||||
commonFragmentInstantiator: KotlinCommonFragmentInstantiator,
|
||||
commonFragmentConfigurator: KotlinCommonFragmentConfigurator = KotlinCommonFragmentConfigurator()
|
||||
): KotlinGradleFragmentFactory<KpmGradleFragmentInternal> = KotlinGradleFragmentFactory(
|
||||
fun GradleKpmCommonFragmentFactory(
|
||||
commonFragmentInstantiator: GradleKpmCommonFragmentInstantiator,
|
||||
commonFragmentConfigurator: GradleKpmCommonFragmentConfigurator = GradleKpmCommonFragmentConfigurator()
|
||||
): GradleKpmFragmentFactory<GradleKpmFragmentInternal> = GradleKpmFragmentFactory(
|
||||
fragmentInstantiator = commonFragmentInstantiator,
|
||||
fragmentConfigurator = commonFragmentConfigurator
|
||||
)
|
||||
|
||||
class KotlinCommonFragmentInstantiator(
|
||||
private val module: KpmGradleModule,
|
||||
private val dependencyConfigurationsFactory: KotlinFragmentDependencyConfigurationsFactory =
|
||||
DefaultKotlinFragmentDependencyConfigurationsFactory
|
||||
) : KotlinGradleFragmentFactory.FragmentInstantiator<KpmGradleFragmentInternal> {
|
||||
override fun create(name: String): KpmGradleFragmentInternal {
|
||||
class GradleKpmCommonFragmentInstantiator(
|
||||
private val module: GradleKpmModule,
|
||||
private val dependencyConfigurationsFactory: GradleKpmFragmentDependencyConfigurationsFactory =
|
||||
GradleKpmDefaultFragmentDependencyConfigurationsFactory
|
||||
) : GradleKpmFragmentFactory.FragmentInstantiator<GradleKpmFragmentInternal> {
|
||||
override fun create(name: String): GradleKpmFragmentInternal {
|
||||
val names = FragmentNameDisambiguation(module, name)
|
||||
return KpmGradleFragmentInternal(module, name, dependencyConfigurationsFactory.create(module, names))
|
||||
return GradleKpmFragmentInternal(module, name, dependencyConfigurationsFactory.create(module, names))
|
||||
}
|
||||
}
|
||||
|
||||
class KotlinCommonFragmentConfigurator(
|
||||
private val sourceDirectoriesSetup: KotlinSourceDirectoriesConfigurator<KpmGradleFragmentInternal> =
|
||||
DefaultKotlinSourceDirectoriesConfigurator
|
||||
) : KotlinGradleFragmentFactory.FragmentConfigurator<KpmGradleFragmentInternal> {
|
||||
override fun configure(fragment: KpmGradleFragmentInternal) {
|
||||
class GradleKpmCommonFragmentConfigurator(
|
||||
private val sourceDirectoriesSetup: GradleKpmSourceDirectoriesConfigurator<GradleKpmFragmentInternal> =
|
||||
GradleKpmDefaultSourceDirectoriesConfigurator
|
||||
) : GradleKpmFragmentFactory.FragmentConfigurator<GradleKpmFragmentInternal> {
|
||||
override fun configure(fragment: GradleKpmFragmentInternal) {
|
||||
sourceDirectoriesSetup.configure(fragment)
|
||||
}
|
||||
}
|
||||
|
||||
+7
-9
@@ -7,24 +7,22 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
|
||||
interface KotlinCompileTaskConfigurator<in T : KpmGradleVariant> {
|
||||
interface GradleKpmCompileTaskConfigurator<in T : GradleKpmVariant> {
|
||||
fun registerCompileTasks(variant: T): TaskProvider<*>
|
||||
}
|
||||
|
||||
object KotlinJvmCompileTaskConfigurator : KotlinCompileTaskConfigurator<KpmJvmVariant> {
|
||||
override fun registerCompileTasks(variant: KpmJvmVariant): TaskProvider<*> {
|
||||
object GradleKpmJvmCompileTaskConfigurator : GradleKpmCompileTaskConfigurator<GradleKpmJvmVariant> {
|
||||
override fun registerCompileTasks(variant: GradleKpmJvmVariant): TaskProvider<*> {
|
||||
val compilationData = variant.compilationData
|
||||
LifecycleTasksManager(variant.project).registerClassesTask(compilationData)
|
||||
return KotlinCompilationTaskConfigurator(variant.project).createKotlinJvmCompilationTask(variant, compilationData)
|
||||
return GradleKpmCompilationTaskConfigurator(variant.project).createKotlinJvmCompilationTask(variant, compilationData)
|
||||
}
|
||||
}
|
||||
|
||||
object KotlinNativeCompileTaskConfigurator : KotlinCompileTaskConfigurator<KpmNativeVariantInternal> {
|
||||
override fun registerCompileTasks(variant: KpmNativeVariantInternal): TaskProvider<*> {
|
||||
object GradleKpmNativeCompileTaskConfigurator : GradleKpmCompileTaskConfigurator<GradleKpmNativeVariantInternal> {
|
||||
override fun registerCompileTasks(variant: GradleKpmNativeVariantInternal): TaskProvider<*> {
|
||||
val compilationData = variant.compilationData
|
||||
LifecycleTasksManager(variant.project).registerClassesTask(compilationData)
|
||||
return KotlinCompilationTaskConfigurator(variant.project).createKotlinNativeCompilationTask(variant, compilationData)
|
||||
return GradleKpmCompilationTaskConfigurator(variant.project).createKotlinNativeCompilationTask(variant, compilationData)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+14
-14
@@ -10,15 +10,15 @@ import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.file.SourceDirectorySet
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.GradleModuleVariantResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KpmGradleModuleVariantResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.allDependencyModules
|
||||
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.KpmVariantResolution
|
||||
|
||||
interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : KotlinVariantCompilationData<T> {
|
||||
interface GradleKpmVariantCompilationDataInternal<T : KotlinCommonOptions> : GradleKpmVariantCompilationData<T> {
|
||||
override val compileKotlinTaskName: String
|
||||
get() = lowerCamelCaseName("compile", compilationPurpose.takeIf { it != "main" }, "Kotlin", compilationClassifier)
|
||||
|
||||
@@ -26,7 +26,7 @@ interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : Kotlin
|
||||
get() = owner.disambiguateName("classes")
|
||||
|
||||
override val kotlinSourceDirectoriesByFragmentName: Map<String, SourceDirectorySet>
|
||||
get() = owner.withRefinesClosure.filterIsInstance<KpmGradleVariant>().associate { it.disambiguateName("") to it.kotlinSourceRoots }
|
||||
get() = owner.withRefinesClosure.filterIsInstance<GradleKpmVariant>().associate { it.disambiguateName("") to it.kotlinSourceRoots }
|
||||
|
||||
override val friendPaths: Iterable<FileCollection>
|
||||
get() {
|
||||
@@ -54,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(KpmGradleModule.MAIN_MODULE_NAME).variants.findByName(owner.name)?.ownModuleName() ?: ownModuleName
|
||||
.getByName(GradleKpmModule.MAIN_MODULE_NAME).variants.findByName(owner.name)?.ownModuleName() ?: ownModuleName
|
||||
|
||||
override val ownModuleName: String
|
||||
get() = owner.ownModuleName()
|
||||
|
||||
private fun resolveFriendVariants(): Iterable<KpmGradleVariant> {
|
||||
val moduleResolver = KpmGradleModuleDependencyResolver.getForCurrentBuild(project)
|
||||
val variantResolver = GradleModuleVariantResolver.getForCurrentBuild(project)
|
||||
val dependencyGraphResolver = KpmGradleDependencyGraphResolver(moduleResolver)
|
||||
private fun resolveFriendVariants(): Iterable<GradleKpmVariant> {
|
||||
val moduleResolver = GradleKpmModuleDependencyResolver.getForCurrentBuild(project)
|
||||
val variantResolver = KpmGradleModuleVariantResolver.getForCurrentBuild(project)
|
||||
val dependencyGraphResolver = GradleKpmDependencyGraphResolver(moduleResolver)
|
||||
|
||||
val friendModules =
|
||||
((dependencyGraphResolver.resolveDependencyGraph(owner.containingModule) as? KpmGradleDependencyGraph)
|
||||
((dependencyGraphResolver.resolveDependencyGraph(owner.containingModule) as? GradleKpmDependencyGraph)
|
||||
?: error("Failed to resolve dependencies of ${owner.containingModule}"))
|
||||
.allDependencyModules
|
||||
.filterIsInstance<KpmGradleModule>()
|
||||
.filterIsInstance<GradleKpmModule>()
|
||||
.filter { dependencyModule ->
|
||||
// the module comes from the same Gradle project // todo: extend to other friends once supported
|
||||
dependencyModule.project == owner.containingModule.project
|
||||
@@ -77,12 +77,12 @@ interface KotlinVariantCompilationDataInternal<T : KotlinCommonOptions> : Kotlin
|
||||
return friendModules
|
||||
.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? KpmGradleVariant }
|
||||
.filterIsInstance<KpmVariantResolution.KpmVariantMatch>()
|
||||
.mapNotNull { variantMatch -> variantMatch.chosenVariant as? GradleKpmVariant }
|
||||
}
|
||||
}
|
||||
|
||||
fun KotlinCompilationData<*>.isMainCompilationData(): Boolean = when (this) {
|
||||
is KotlinCompilation<*> -> isMain()
|
||||
else -> compilationPurpose == KpmGradleModule.MAIN_MODULE_NAME
|
||||
else -> compilationPurpose == GradleKpmModule.MAIN_MODULE_NAME
|
||||
}
|
||||
|
||||
+7
-7
@@ -15,19 +15,19 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||
|
||||
open class KotlinCompilationTaskConfigurator(
|
||||
open class GradleKpmCompilationTaskConfigurator(
|
||||
protected val project: Project
|
||||
) {
|
||||
open val fragmentSourcesProvider: FragmentSourcesProvider = FragmentSourcesProvider()
|
||||
open val fragmentSourcesProvider: GradleKpmFragmentSourcesProvider = GradleKpmFragmentSourcesProvider()
|
||||
|
||||
open fun getSourcesForFragmentCompilation(fragment: KpmGradleFragment): MultipleSourceRootsProvider =
|
||||
open fun getSourcesForFragmentCompilation(fragment: GradleKpmFragment): MultipleSourceRootsProvider =
|
||||
fragmentSourcesProvider.getSourcesFromRefinesClosure(fragment)
|
||||
|
||||
open fun getCommonSourcesForFragmentCompilation(fragment: KpmGradleFragment): MultipleSourceRootsProvider =
|
||||
open fun getCommonSourcesForFragmentCompilation(fragment: GradleKpmFragment): MultipleSourceRootsProvider =
|
||||
fragmentSourcesProvider.getCommonSourcesFromRefinesClosure(fragment)
|
||||
|
||||
fun createKotlinJvmCompilationTask(
|
||||
variant: KpmGradleVariant,
|
||||
variant: GradleKpmVariant,
|
||||
compilationData: KotlinCompilationData<*>
|
||||
): TaskProvider<out KotlinCompile> {
|
||||
Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilationData).run()
|
||||
@@ -46,7 +46,7 @@ open class KotlinCompilationTaskConfigurator(
|
||||
}
|
||||
|
||||
protected fun createKotlinNativeCompilationTask(
|
||||
fragment: KpmGradleFragment,
|
||||
fragment: GradleKpmFragment,
|
||||
compilationData: KotlinNativeCompilationData<*>,
|
||||
configure: KotlinNativeCompile.() -> Unit
|
||||
): TaskProvider<KotlinNativeCompile> {
|
||||
@@ -65,7 +65,7 @@ open class KotlinCompilationTaskConfigurator(
|
||||
}
|
||||
|
||||
fun createKotlinNativeCompilationTask(
|
||||
variant: KpmGradleVariant,
|
||||
variant: GradleKpmVariant,
|
||||
compilationData: KotlinNativeCompilationData<*>
|
||||
): TaskProvider<KotlinNativeCompile> = createKotlinNativeCompilationTask(variant, compilationData) {
|
||||
kotlinPluginData = project.compilerPluginProviderForPlatformCompilation(variant, compilationData)
|
||||
|
||||
+2
-2
@@ -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<KpmGradleVariant> {
|
||||
val GradleKpmCompilationOutputsJarArtifact = GradleKpmConfigurationArtifactsSetup<GradleKpmVariant> {
|
||||
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<KpmGradleVar
|
||||
fragment.project.artifacts.add(Dependency.ARCHIVES_CONFIGURATION, jar)
|
||||
}
|
||||
|
||||
internal val KpmGradleVariant.outputsJarTaskName: String
|
||||
internal val GradleKpmVariant.outputsJarTaskName: String
|
||||
get() = FragmentNameDisambiguationOmittingMain(containingModule, name).disambiguateName("jar")
|
||||
|
||||
+6
-6
@@ -5,15 +5,15 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.KotlinNameDisambiguation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.GradleKpmNameDisambiguation
|
||||
|
||||
interface KotlinFragmentDependencyConfigurationsFactory {
|
||||
fun create(module: KpmGradleModule, names: KotlinNameDisambiguation): KotlinFragmentDependencyConfigurations
|
||||
interface GradleKpmFragmentDependencyConfigurationsFactory {
|
||||
fun create(module: GradleKpmModule, names: GradleKpmNameDisambiguation): GradleKpmFragmentDependencyConfigurations
|
||||
}
|
||||
|
||||
object DefaultKotlinFragmentDependencyConfigurationsFactory : KotlinFragmentDependencyConfigurationsFactory {
|
||||
object GradleKpmDefaultFragmentDependencyConfigurationsFactory : GradleKpmFragmentDependencyConfigurationsFactory {
|
||||
|
||||
override fun create(module: KpmGradleModule, names: KotlinNameDisambiguation): KotlinFragmentDependencyConfigurations {
|
||||
override fun create(module: GradleKpmModule, names: GradleKpmNameDisambiguation): GradleKpmFragmentDependencyConfigurations {
|
||||
val configurations = module.project.configurations
|
||||
val apiConfiguration = configurations.maybeCreate(names.disambiguateName("api"))
|
||||
val implementationConfiguration = configurations.maybeCreate(names.disambiguateName("implementation"))
|
||||
@@ -40,7 +40,7 @@ object DefaultKotlinFragmentDependencyConfigurationsFactory : KotlinFragmentDepe
|
||||
transitiveImplementationConfiguration.extendsFrom(implementationConfiguration)
|
||||
transitiveRuntimeOnlyConfiguration.extendsFrom(runtimeOnlyConfiguration)
|
||||
|
||||
return KotlinFragmentDependencyConfigurations.create(
|
||||
return GradleKpmFragmentDependencyConfigurations.create(
|
||||
apiConfiguration = apiConfiguration,
|
||||
implementationConfiguration = implementationConfiguration,
|
||||
compileOnlyConfiguration = compileOnlyConfiguration,
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
|
||||
* Will add this jar artifact to the given configuration
|
||||
*/
|
||||
|
||||
val KotlinFragmentHostSpecificMetadataArtifact = FragmentArtifacts<KpmNativeVariantInternal> artifacts@{
|
||||
val GradleKpmHostSpecificMetadataArtifact = GradleKpmConfigurationArtifactsSetup<GradleKpmNativeVariantInternal> artifacts@{
|
||||
val hostSpecificMetadataElements = fragment.hostSpecificMetadataElementsConfiguration ?: return@artifacts
|
||||
|
||||
val hostSpecificMetadataJar = project.registerTask<Jar>(fragment.disambiguateName("hostSpecificMetadataJar")) { jar ->
|
||||
|
||||
+4
-4
@@ -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<KpmGradleFragment> {
|
||||
capability(fragment.containingModule.moduleCapability ?: return@FragmentCapabilities)
|
||||
val GradleKpmModuleCapability = GradleKpmConfigurationCapabilitiesSetup<GradleKpmFragment> {
|
||||
capability(fragment.containingModule.moduleCapability ?: return@GradleKpmConfigurationCapabilitiesSetup)
|
||||
}
|
||||
|
||||
internal fun setModuleCapability(configuration: Configuration, module: KpmGradleModule) {
|
||||
internal fun setModuleCapability(configuration: Configuration, module: GradleKpmModule) {
|
||||
configuration.outgoing.capability(module.moduleCapability ?: return)
|
||||
}
|
||||
|
||||
internal val KpmGradleModule.moduleCapability: Capability?
|
||||
internal val GradleKpmModule.moduleCapability: Capability?
|
||||
get() = if (moduleClassifier != null) ComputedCapability.fromModule(this) else null
|
||||
|
||||
+28
-27
@@ -11,18 +11,16 @@ import org.gradle.api.artifacts.ConfigurablePublishArtifact
|
||||
import org.gradle.api.artifacts.ConfigurationPublications
|
||||
import org.gradle.api.artifacts.ConfigurationVariant
|
||||
|
||||
/* Internal abbreviation */
|
||||
internal typealias FragmentArtifacts<T> = KotlinGradleFragmentConfigurationArtifacts<T>
|
||||
|
||||
interface KotlinGradleFragmentConfigurationArtifacts<in T : KpmGradleFragment> {
|
||||
fun addArtifacts(outgoing: ConfigurationPublications, fragment: T)
|
||||
interface GradleKpmConfigurationArtifactsSetup<in T : GradleKpmFragment> {
|
||||
fun setupArtifacts(outgoing: ConfigurationPublications, fragment: T)
|
||||
|
||||
object None : KotlinGradleFragmentConfigurationArtifacts<KpmGradleFragment> {
|
||||
override fun addArtifacts(outgoing: ConfigurationPublications, fragment: KpmGradleFragment) = Unit
|
||||
object None : GradleKpmConfigurationArtifactsSetup<GradleKpmFragment> {
|
||||
override fun setupArtifacts(outgoing: ConfigurationPublications, fragment: GradleKpmFragment) = Unit
|
||||
}
|
||||
}
|
||||
|
||||
class KotlinGradleFragmentConfigurationArtifactsContext<T : KpmGradleFragment> internal constructor(
|
||||
class GradleKpmConfigurationArtifactsSetupContext<T : GradleKpmFragment> internal constructor(
|
||||
internal val outgoing: ConfigurationPublications,
|
||||
val fragment: T
|
||||
) {
|
||||
@@ -40,40 +38,43 @@ class KotlinGradleFragmentConfigurationArtifactsContext<T : KpmGradleFragment> i
|
||||
}
|
||||
|
||||
@Suppress("FunctionName")
|
||||
fun <T : KpmGradleFragment> FragmentArtifacts(
|
||||
addArtifacts: KotlinGradleFragmentConfigurationArtifactsContext<T>.() -> Unit
|
||||
): KotlinGradleFragmentConfigurationArtifacts<T> {
|
||||
return object : KotlinGradleFragmentConfigurationArtifacts<T> {
|
||||
override fun addArtifacts(outgoing: ConfigurationPublications, fragment: T) {
|
||||
val context = KotlinGradleFragmentConfigurationArtifactsContext(outgoing, fragment)
|
||||
fun <T : GradleKpmFragment> GradleKpmConfigurationArtifactsSetup(
|
||||
addArtifacts: GradleKpmConfigurationArtifactsSetupContext<T>.() -> Unit
|
||||
): GradleKpmConfigurationArtifactsSetup<T> {
|
||||
return object : GradleKpmConfigurationArtifactsSetup<T> {
|
||||
override fun setupArtifacts(outgoing: ConfigurationPublications, fragment: T) {
|
||||
val context = GradleKpmConfigurationArtifactsSetupContext(outgoing, fragment)
|
||||
context.addArtifacts()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
operator fun <T : KpmGradleFragment> FragmentArtifacts<T>.plus(other: FragmentArtifacts<T>): FragmentArtifacts<T> {
|
||||
if (this === KotlinGradleFragmentConfigurationArtifacts.None) return other
|
||||
if (other === KotlinGradleFragmentConfigurationArtifacts.None) return this
|
||||
operator fun <T : GradleKpmFragment> GradleKpmConfigurationArtifactsSetup<T>.plus(
|
||||
other: GradleKpmConfigurationArtifactsSetup<T>
|
||||
): GradleKpmConfigurationArtifactsSetup<T> {
|
||||
if (this === GradleKpmConfigurationArtifactsSetup.None) return other
|
||||
if (other === GradleKpmConfigurationArtifactsSetup.None) return this
|
||||
|
||||
if (this is CompositeFragmentArtifacts && other is CompositeFragmentArtifacts) {
|
||||
return CompositeFragmentArtifacts(this.children + other.children)
|
||||
if (this is CompositeFragmentConfigurationArtifactsSetup && other is CompositeFragmentConfigurationArtifactsSetup) {
|
||||
return CompositeFragmentConfigurationArtifactsSetup(this.children + other.children)
|
||||
}
|
||||
|
||||
if (this is CompositeFragmentArtifacts) {
|
||||
return CompositeFragmentArtifacts(this.children + other)
|
||||
if (this is CompositeFragmentConfigurationArtifactsSetup) {
|
||||
return CompositeFragmentConfigurationArtifactsSetup(this.children + other)
|
||||
}
|
||||
|
||||
if (other is CompositeFragmentArtifacts) {
|
||||
return CompositeFragmentArtifacts(listOf(this) + other.children)
|
||||
if (other is CompositeFragmentConfigurationArtifactsSetup) {
|
||||
return CompositeFragmentConfigurationArtifactsSetup(listOf(this) + other.children)
|
||||
}
|
||||
|
||||
return CompositeFragmentArtifacts(listOf(this, other))
|
||||
return CompositeFragmentConfigurationArtifactsSetup(listOf(this, other))
|
||||
}
|
||||
|
||||
internal class CompositeFragmentArtifacts<in T : KpmGradleFragment>(val children: List<FragmentArtifacts<T>>) :
|
||||
FragmentArtifacts<T> {
|
||||
internal class CompositeFragmentConfigurationArtifactsSetup<in T : GradleKpmFragment>(
|
||||
val children: List<GradleKpmConfigurationArtifactsSetup<T>>
|
||||
) : GradleKpmConfigurationArtifactsSetup<T> {
|
||||
|
||||
override fun addArtifacts(outgoing: ConfigurationPublications, fragment: T) {
|
||||
children.forEach { child -> child.addArtifacts(outgoing, fragment) }
|
||||
override fun setupArtifacts(outgoing: ConfigurationPublications, fragment: T) {
|
||||
children.forEach { child -> child.setupArtifacts(outgoing, fragment) }
|
||||
}
|
||||
}
|
||||
|
||||
+29
-30
@@ -11,18 +11,17 @@ import org.gradle.api.attributes.Attribute
|
||||
import org.gradle.api.attributes.AttributeContainer
|
||||
|
||||
/* Internal abbreviation */
|
||||
internal typealias FragmentAttributes<T> = KotlinGradleFragmentConfigurationAttributes<T>
|
||||
|
||||
interface KotlinGradleFragmentConfigurationAttributes<in T : KpmGradleFragment> {
|
||||
interface GradleKpmConfigurationAttributesSetup<in T : GradleKpmFragment> {
|
||||
|
||||
fun setAttributes(attributes: AttributeContainer, fragment: T)
|
||||
fun setupAttributes(attributes: AttributeContainer, fragment: T)
|
||||
|
||||
object None : FragmentAttributes<KpmGradleFragment> {
|
||||
override fun setAttributes(attributes: AttributeContainer, fragment: KpmGradleFragment) = Unit
|
||||
object None : GradleKpmConfigurationAttributesSetup<GradleKpmFragment> {
|
||||
override fun setupAttributes(attributes: AttributeContainer, fragment: GradleKpmFragment) = Unit
|
||||
}
|
||||
}
|
||||
|
||||
class KotlinGradleFragmentConfigurationAttributesContext<T : KpmGradleFragment> internal constructor(
|
||||
class GradleKpmConfigurationAttributesSetupContext<T : GradleKpmFragment> internal constructor(
|
||||
internal val attributes: AttributeContainer,
|
||||
val fragment: T,
|
||||
) : AttributeContainer by attributes {
|
||||
@@ -32,51 +31,51 @@ class KotlinGradleFragmentConfigurationAttributesContext<T : KpmGradleFragment>
|
||||
|
||||
inline fun <reified T : Named> namedAttribute(key: Attribute<T>, name: String) = apply { attribute(key, named(name)) }
|
||||
|
||||
override fun <K : Any> attribute(key: Attribute<K>, value: K): KotlinGradleFragmentConfigurationAttributesContext<T> = apply {
|
||||
override fun <K : Any> attribute(key: Attribute<K>, value: K): GradleKpmConfigurationAttributesSetupContext<T> = apply {
|
||||
attributes.attribute(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("FunctionName")
|
||||
fun <T : KpmGradleFragment> FragmentAttributes(
|
||||
setAttributes: KotlinGradleFragmentConfigurationAttributesContext<T>.() -> Unit
|
||||
): KotlinGradleFragmentConfigurationAttributes<T> {
|
||||
return object : KotlinGradleFragmentConfigurationAttributes<T> {
|
||||
override fun setAttributes(attributes: AttributeContainer, fragment: T) {
|
||||
val context = KotlinGradleFragmentConfigurationAttributesContext(attributes, fragment)
|
||||
fun <T : GradleKpmFragment> GradleKpmConfigurationAttributesSetup(
|
||||
setAttributes: GradleKpmConfigurationAttributesSetupContext<T>.() -> Unit
|
||||
): GradleKpmConfigurationAttributesSetup<T> {
|
||||
return object : GradleKpmConfigurationAttributesSetup<T> {
|
||||
override fun setupAttributes(attributes: AttributeContainer, fragment: T) {
|
||||
val context = GradleKpmConfigurationAttributesSetupContext(attributes, fragment)
|
||||
context.setAttributes()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun <T : KpmGradleFragment> AttributeContainer.apply(
|
||||
attributes: KotlinGradleFragmentConfigurationAttributes<T>, fragment: T
|
||||
fun <T : GradleKpmFragment> AttributeContainer.apply(
|
||||
attributes: GradleKpmConfigurationAttributesSetup<T>, fragment: T
|
||||
) {
|
||||
attributes.setAttributes(this, fragment)
|
||||
attributes.setupAttributes(this, fragment)
|
||||
}
|
||||
|
||||
operator fun <T : KpmGradleFragment> FragmentAttributes<T>.plus(other: FragmentAttributes<T>): FragmentAttributes<T> {
|
||||
if (this === KotlinGradleFragmentConfigurationAttributes.None) return other
|
||||
if (other === KotlinGradleFragmentConfigurationAttributes.None) return this
|
||||
operator fun <T : GradleKpmFragment> GradleKpmConfigurationAttributesSetup<T>.plus(other: GradleKpmConfigurationAttributesSetup<T>): GradleKpmConfigurationAttributesSetup<T> {
|
||||
if (this === GradleKpmConfigurationAttributesSetup.None) return other
|
||||
if (other === GradleKpmConfigurationAttributesSetup.None) return this
|
||||
|
||||
if (this is CompositeFragmentAttributes && other is CompositeFragmentAttributes) {
|
||||
return CompositeFragmentAttributes(this.children + other.children)
|
||||
if (this is GradleKpmCompositeConfigurationAttributesSetup && other is GradleKpmCompositeConfigurationAttributesSetup) {
|
||||
return GradleKpmCompositeConfigurationAttributesSetup(this.children + other.children)
|
||||
}
|
||||
|
||||
if (this is CompositeFragmentAttributes) {
|
||||
return CompositeFragmentAttributes(this.children + other)
|
||||
if (this is GradleKpmCompositeConfigurationAttributesSetup) {
|
||||
return GradleKpmCompositeConfigurationAttributesSetup(this.children + other)
|
||||
}
|
||||
|
||||
if (other is CompositeFragmentAttributes) {
|
||||
return CompositeFragmentAttributes(listOf(this) + other.children)
|
||||
if (other is GradleKpmCompositeConfigurationAttributesSetup) {
|
||||
return GradleKpmCompositeConfigurationAttributesSetup(listOf(this) + other.children)
|
||||
}
|
||||
|
||||
return CompositeFragmentAttributes(listOf(this, other))
|
||||
return GradleKpmCompositeConfigurationAttributesSetup(listOf(this, other))
|
||||
}
|
||||
|
||||
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) }
|
||||
internal class GradleKpmCompositeConfigurationAttributesSetup<in T : GradleKpmFragment>(val children: List<GradleKpmConfigurationAttributesSetup<T>>) :
|
||||
GradleKpmConfigurationAttributesSetup<T> {
|
||||
override fun setupAttributes(attributes: AttributeContainer, fragment: T) {
|
||||
children.forEach { child -> child.setupAttributes(attributes, fragment) }
|
||||
}
|
||||
}
|
||||
|
||||
+24
-30
@@ -8,78 +8,72 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.artifacts.ConfigurationPublications
|
||||
import org.gradle.api.capabilities.Capability
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentConfigurationCapabilities.CapabilitiesContainer
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmConfigurationCapabilitiesSetup.CapabilitiesContainer
|
||||
|
||||
/* Internal abbreviation */
|
||||
internal typealias FragmentCapabilities<T> = KotlinGradleFragmentConfigurationCapabilities<T>
|
||||
|
||||
interface KotlinGradleFragmentConfigurationCapabilities<in T : KpmGradleFragment> {
|
||||
interface GradleKpmConfigurationCapabilitiesSetup<in T : GradleKpmFragment> {
|
||||
interface CapabilitiesContainer {
|
||||
fun capability(notation: Any)
|
||||
}
|
||||
|
||||
fun setCapabilities(container: CapabilitiesContainer, fragment: T)
|
||||
|
||||
object None : KotlinGradleFragmentConfigurationCapabilities<KpmGradleFragment> {
|
||||
override fun setCapabilities(container: CapabilitiesContainer, fragment: KpmGradleFragment) = Unit
|
||||
object None : GradleKpmConfigurationCapabilitiesSetup<GradleKpmFragment> {
|
||||
override fun setCapabilities(container: CapabilitiesContainer, fragment: GradleKpmFragment) = Unit
|
||||
}
|
||||
}
|
||||
|
||||
fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationCapabilities<T>.setCapabilities(
|
||||
fun <T : GradleKpmFragment> GradleKpmConfigurationCapabilitiesSetup<T>.setCapabilities(
|
||||
publications: ConfigurationPublications, fragment: T
|
||||
) = setCapabilities(CapabilitiesContainer(publications), fragment)
|
||||
|
||||
fun CapabilitiesContainer(configuration: ConfigurationPublications): CapabilitiesContainer =
|
||||
CapabilitiesContainerImpl(configuration)
|
||||
|
||||
fun CapabilitiesContainer(configuration: Configuration): CapabilitiesContainer =
|
||||
CapabilitiesContainerImpl(configuration.outgoing)
|
||||
|
||||
private class CapabilitiesContainerImpl(
|
||||
private val publications: ConfigurationPublications
|
||||
) : CapabilitiesContainer {
|
||||
override fun capability(notation: Any) = publications.capability(notation)
|
||||
}
|
||||
|
||||
class KotlinGradleFragmentConfigurationCapabilitiesContext<T : KpmGradleFragment> internal constructor(
|
||||
class GradleKpmConfigurationCapabilitiesSetupContext<T : GradleKpmFragment> internal constructor(
|
||||
internal val container: CapabilitiesContainer, val fragment: T
|
||||
) : CapabilitiesContainer by container {
|
||||
val project: Project get() = fragment.project
|
||||
}
|
||||
|
||||
fun <T : KpmGradleFragment> FragmentCapabilities(
|
||||
setCapabilities: KotlinGradleFragmentConfigurationCapabilitiesContext<T>.() -> Unit
|
||||
): KotlinGradleFragmentConfigurationCapabilities<T> = object : KotlinGradleFragmentConfigurationCapabilities<T> {
|
||||
fun <T : GradleKpmFragment> GradleKpmConfigurationCapabilitiesSetup(
|
||||
setCapabilities: GradleKpmConfigurationCapabilitiesSetupContext<T>.() -> Unit
|
||||
): GradleKpmConfigurationCapabilitiesSetup<T> = object : GradleKpmConfigurationCapabilitiesSetup<T> {
|
||||
override fun setCapabilities(container: CapabilitiesContainer, fragment: T) {
|
||||
val context = KotlinGradleFragmentConfigurationCapabilitiesContext(container, fragment)
|
||||
val context = GradleKpmConfigurationCapabilitiesSetupContext(container, fragment)
|
||||
context.setCapabilities()
|
||||
}
|
||||
}
|
||||
|
||||
operator fun <T : KpmGradleFragment> FragmentCapabilities<T>.plus(other: FragmentCapabilities<T>): FragmentCapabilities<T> {
|
||||
if (this === KotlinGradleFragmentConfigurationCapabilities.None) return other
|
||||
if (other === KotlinGradleFragmentConfigurationCapabilities.None) return this
|
||||
operator fun <T : GradleKpmFragment> GradleKpmConfigurationCapabilitiesSetup<T>.plus(
|
||||
other: GradleKpmConfigurationCapabilitiesSetup<T>
|
||||
): GradleKpmConfigurationCapabilitiesSetup<T> {
|
||||
if (this === GradleKpmConfigurationCapabilitiesSetup.None) return other
|
||||
if (other === GradleKpmConfigurationCapabilitiesSetup.None) return this
|
||||
|
||||
if (this is CompositeFragmentCapabilities && other is CompositeFragmentCapabilities) {
|
||||
return CompositeFragmentCapabilities(this.children + other.children)
|
||||
if (this is CompositeKpmCapabilitiesSetup && other is CompositeKpmCapabilitiesSetup) {
|
||||
return CompositeKpmCapabilitiesSetup(this.children + other.children)
|
||||
}
|
||||
|
||||
if (this is CompositeFragmentCapabilities) {
|
||||
return CompositeFragmentCapabilities(this.children + other)
|
||||
if (this is CompositeKpmCapabilitiesSetup) {
|
||||
return CompositeKpmCapabilitiesSetup(this.children + other)
|
||||
}
|
||||
|
||||
if (other is CompositeFragmentCapabilities) {
|
||||
return CompositeFragmentCapabilities(listOf(this) + other.children)
|
||||
if (other is CompositeKpmCapabilitiesSetup) {
|
||||
return CompositeKpmCapabilitiesSetup(listOf(this) + other.children)
|
||||
}
|
||||
|
||||
return CompositeFragmentCapabilities(listOf(this, other))
|
||||
return CompositeKpmCapabilitiesSetup(listOf(this, other))
|
||||
}
|
||||
|
||||
internal class CompositeFragmentCapabilities<in T : KpmGradleFragment>(val children: List<FragmentCapabilities<T>>) :
|
||||
FragmentCapabilities<T> {
|
||||
internal class CompositeKpmCapabilitiesSetup<in T : GradleKpmFragment>(val children: List<GradleKpmConfigurationCapabilitiesSetup<T>>) :
|
||||
GradleKpmConfigurationCapabilitiesSetup<T> {
|
||||
override fun setCapabilities(container: CapabilitiesContainer, fragment: T) {
|
||||
children.forEach { child -> child.setCapabilities(container, fragment) }
|
||||
}
|
||||
|
||||
+26
-29
@@ -7,48 +7,45 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.KotlinNameDisambiguation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.GradleKpmNameDisambiguation
|
||||
|
||||
/* Internal abbreviation */
|
||||
internal typealias ConfigurationDefinition<T> = KotlinGradleFragmentConfigurationDefinition<T>
|
||||
|
||||
data class KotlinGradleFragmentConfigurationDefinition<in T : KpmGradleFragment>(
|
||||
val provider: KotlinGradleFragmentConfigurationProvider,
|
||||
val attributes: KotlinGradleFragmentConfigurationAttributes<T> = KotlinGradleFragmentConfigurationAttributes.None,
|
||||
val artifacts: KotlinGradleFragmentConfigurationArtifacts<T> = KotlinGradleFragmentConfigurationArtifacts.None,
|
||||
val relations: KotlinGradleFragmentConfigurationRelation = KotlinGradleFragmentConfigurationRelation.None,
|
||||
data class GradleKpmConfigurationSetup<in T : GradleKpmFragment>(
|
||||
val provider: GradleKpmConfigurationProvider,
|
||||
val attributes: GradleKpmConfigurationAttributesSetup<T> = GradleKpmConfigurationAttributesSetup.None,
|
||||
val artifacts: GradleKpmConfigurationArtifactsSetup<T> = GradleKpmConfigurationArtifactsSetup.None,
|
||||
val relations: GradleKpmConfigurationRelationSetup = GradleKpmConfigurationRelationSetup.None,
|
||||
@property:AdvancedKotlinGradlePluginApi
|
||||
val capabilities: KotlinGradleFragmentConfigurationCapabilities<T> = KotlinGradleFragmentConfigurationCapabilities.None,
|
||||
val capabilities: GradleKpmConfigurationCapabilitiesSetup<T> = GradleKpmConfigurationCapabilitiesSetup.None,
|
||||
)
|
||||
|
||||
/* Internal abbreviation */
|
||||
internal typealias ConfigurationContext = KotlinGradleFragmentConfigurationContext
|
||||
|
||||
interface KotlinGradleFragmentConfigurationContext : KotlinNameDisambiguation {
|
||||
interface GradleKpmFragmentConfigureContext : GradleKpmNameDisambiguation {
|
||||
val project: Project get() = module.project
|
||||
val module: KpmGradleModule
|
||||
val dependencies: KotlinFragmentDependencyConfigurations
|
||||
val module: GradleKpmModule
|
||||
val dependencies: GradleKpmFragmentDependencyConfigurations
|
||||
}
|
||||
|
||||
internal class KotlinGradleFragmentConfigurationContextImpl(
|
||||
override val module: KpmGradleModule,
|
||||
override val dependencies: KotlinFragmentDependencyConfigurations,
|
||||
names: KotlinNameDisambiguation
|
||||
) : KotlinGradleFragmentConfigurationContext, KotlinNameDisambiguation by names
|
||||
internal class GradleKpmFragmentConfigureContextImpl(
|
||||
override val module: GradleKpmModule,
|
||||
override val dependencies: GradleKpmFragmentDependencyConfigurations,
|
||||
names: GradleKpmNameDisambiguation
|
||||
) : GradleKpmFragmentConfigureContext, GradleKpmNameDisambiguation by names
|
||||
|
||||
fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.withConfigurationProvider(
|
||||
provider: KotlinGradleFragmentConfigurationContext.() -> Configuration
|
||||
) = copy(provider = ConfigurationProvider(provider))
|
||||
fun <T : GradleKpmFragment> GradleKpmConfigurationSetup<T>.withConfigurationProvider(
|
||||
provider: GradleKpmFragmentConfigureContext.() -> Configuration
|
||||
) = copy(provider = GradleKpmConfigurationProvider(provider))
|
||||
|
||||
operator fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentAttributes<T>):
|
||||
KotlinGradleFragmentConfigurationDefinition<T> = copy(attributes = attributes + other)
|
||||
operator fun <T : GradleKpmFragment> GradleKpmConfigurationSetup<T>.plus(other: GradleKpmConfigurationAttributesSetup<T>):
|
||||
GradleKpmConfigurationSetup<T> = copy(attributes = attributes + other)
|
||||
|
||||
operator fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentArtifacts<T>):
|
||||
KotlinGradleFragmentConfigurationDefinition<T> = copy(artifacts = artifacts + other)
|
||||
operator fun <T : GradleKpmFragment> GradleKpmConfigurationSetup<T>.plus(other: GradleKpmConfigurationArtifactsSetup<T>):
|
||||
GradleKpmConfigurationSetup<T> = copy(artifacts = artifacts + other)
|
||||
|
||||
operator fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentConfigurationRelation):
|
||||
KotlinGradleFragmentConfigurationDefinition<T> = copy(relations = relations + other)
|
||||
operator fun <T : GradleKpmFragment> GradleKpmConfigurationSetup<T>.plus(other: GradleKpmConfigurationRelationSetup):
|
||||
GradleKpmConfigurationSetup<T> = copy(relations = relations + other)
|
||||
|
||||
@AdvancedKotlinGradlePluginApi
|
||||
operator fun <T : KpmGradleFragment> KotlinGradleFragmentConfigurationDefinition<T>.plus(other: FragmentCapabilities<T>):
|
||||
KotlinGradleFragmentConfigurationDefinition<T> = copy(capabilities = capabilities + other)
|
||||
operator fun <T : GradleKpmFragment> GradleKpmConfigurationSetup<T>.plus(other: GradleKpmConfigurationCapabilitiesSetup<T>):
|
||||
GradleKpmConfigurationSetup<T> = copy(capabilities = capabilities + other)
|
||||
|
||||
+5
-5
@@ -9,11 +9,11 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
|
||||
interface KotlinGradleFragmentConfigurationProvider {
|
||||
fun getConfiguration(context: KotlinGradleFragmentConfigurationContext): Configuration
|
||||
interface GradleKpmConfigurationProvider {
|
||||
fun getConfiguration(context: GradleKpmFragmentConfigureContext): Configuration
|
||||
}
|
||||
|
||||
fun ConfigurationProvider(provider: KotlinGradleFragmentConfigurationContext.() -> Configuration):
|
||||
KotlinGradleFragmentConfigurationProvider = object : KotlinGradleFragmentConfigurationProvider {
|
||||
override fun getConfiguration(context: KotlinGradleFragmentConfigurationContext): Configuration = context.provider()
|
||||
fun GradleKpmConfigurationProvider(provider: GradleKpmFragmentConfigureContext.() -> Configuration):
|
||||
GradleKpmConfigurationProvider = object : GradleKpmConfigurationProvider {
|
||||
override fun getConfiguration(context: GradleKpmFragmentConfigureContext): Configuration = context.provider()
|
||||
}
|
||||
|
||||
+26
-29
@@ -8,60 +8,57 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.artifacts.ConfigurationPublications
|
||||
import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
|
||||
|
||||
/* Internal abbreviation */
|
||||
internal typealias FragmentConfigurationRelation = KotlinGradleFragmentConfigurationRelation
|
||||
|
||||
interface KotlinGradleFragmentConfigurationRelation {
|
||||
fun setExtendsFrom(configuration: Configuration, context: KotlinGradleFragmentConfigurationContext)
|
||||
interface GradleKpmConfigurationRelationSetup {
|
||||
fun setupExtendsFromRelations(configuration: Configuration, context: GradleKpmFragmentConfigureContext)
|
||||
|
||||
object None : KotlinGradleFragmentConfigurationRelation {
|
||||
override fun setExtendsFrom(configuration: Configuration, context: KotlinGradleFragmentConfigurationContext) = Unit
|
||||
object None : GradleKpmConfigurationRelationSetup {
|
||||
override fun setupExtendsFromRelations(configuration: Configuration, context: GradleKpmFragmentConfigureContext) = Unit
|
||||
}
|
||||
}
|
||||
|
||||
operator fun FragmentConfigurationRelation.plus(other: FragmentConfigurationRelation): FragmentConfigurationRelation {
|
||||
if (this === KotlinGradleFragmentConfigurationRelation.None) return other
|
||||
if (other === KotlinGradleFragmentConfigurationRelation.None) return this
|
||||
operator fun GradleKpmConfigurationRelationSetup.plus(other: GradleKpmConfigurationRelationSetup): GradleKpmConfigurationRelationSetup {
|
||||
if (this === GradleKpmConfigurationRelationSetup.None) return other
|
||||
if (other === GradleKpmConfigurationRelationSetup.None) return this
|
||||
|
||||
if (this is CompositeFragmentConfigurationRelation && other is CompositeFragmentConfigurationRelation) {
|
||||
return CompositeFragmentConfigurationRelation(this.children + other.children)
|
||||
if (this is CompositeKpmConfigurationRelationSetup && other is CompositeKpmConfigurationRelationSetup) {
|
||||
return CompositeKpmConfigurationRelationSetup(this.children + other.children)
|
||||
}
|
||||
|
||||
if (this is CompositeFragmentConfigurationRelation) {
|
||||
return CompositeFragmentConfigurationRelation(this.children + other)
|
||||
if (this is CompositeKpmConfigurationRelationSetup) {
|
||||
return CompositeKpmConfigurationRelationSetup(this.children + other)
|
||||
}
|
||||
|
||||
if (other is CompositeFragmentConfigurationRelation) {
|
||||
return CompositeFragmentConfigurationRelation(listOf(this) + other.children)
|
||||
if (other is CompositeKpmConfigurationRelationSetup) {
|
||||
return CompositeKpmConfigurationRelationSetup(listOf(this) + other.children)
|
||||
}
|
||||
|
||||
return CompositeFragmentConfigurationRelation(listOf(this, other))
|
||||
return CompositeKpmConfigurationRelationSetup(listOf(this, other))
|
||||
}
|
||||
|
||||
internal class CompositeFragmentConfigurationRelation(val children: List<FragmentConfigurationRelation>) :
|
||||
FragmentConfigurationRelation {
|
||||
internal class CompositeKpmConfigurationRelationSetup(val children: List<GradleKpmConfigurationRelationSetup>) :
|
||||
GradleKpmConfigurationRelationSetup {
|
||||
|
||||
override fun setExtendsFrom(configuration: Configuration, context: KotlinGradleFragmentConfigurationContext) {
|
||||
children.forEach { child -> child.setExtendsFrom(configuration, context) }
|
||||
override fun setupExtendsFromRelations(configuration: Configuration, context: GradleKpmFragmentConfigureContext) {
|
||||
children.forEach { child -> child.setupExtendsFromRelations(configuration, context) }
|
||||
}
|
||||
}
|
||||
|
||||
class KotlinGradleFragmentConfigurationRelationContext internal constructor(
|
||||
class GradleKpmFragmentConfigureRelationContext internal constructor(
|
||||
val configuration: Configuration,
|
||||
context: KotlinGradleFragmentConfigurationContext
|
||||
) : KotlinGradleFragmentConfigurationContext by context {
|
||||
context: GradleKpmFragmentConfigureContext
|
||||
) : GradleKpmFragmentConfigureContext by context {
|
||||
fun extendsFrom(configuration: Configuration) = this.configuration.extendsFrom(configuration)
|
||||
fun extendsFrom(configuration: String) = project.addExtendsFromRelation(this.configuration.name, configuration)
|
||||
}
|
||||
|
||||
fun FragmentConfigurationRelation(
|
||||
setExtendsFrom: KotlinGradleFragmentConfigurationRelationContext.() -> Unit
|
||||
): KotlinGradleFragmentConfigurationRelation = object : KotlinGradleFragmentConfigurationRelation {
|
||||
override fun setExtendsFrom(configuration: Configuration, context: KotlinGradleFragmentConfigurationContext) {
|
||||
val relationContext = KotlinGradleFragmentConfigurationRelationContext(configuration, context)
|
||||
fun GradleKpmConfigurationRelationSetup(
|
||||
setExtendsFrom: GradleKpmFragmentConfigureRelationContext.() -> Unit
|
||||
): GradleKpmConfigurationRelationSetup = object : GradleKpmConfigurationRelationSetup {
|
||||
override fun setupExtendsFromRelations(configuration: Configuration, context: GradleKpmFragmentConfigureContext) {
|
||||
val relationContext = GradleKpmFragmentConfigureRelationContext(configuration, context)
|
||||
relationContext.setExtendsFrom()
|
||||
}
|
||||
}
|
||||
|
||||
+12
-12
@@ -7,11 +7,11 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.NamedDomainObjectFactory
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentFactory.FragmentConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentFactory.FragmentInstantiator
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragmentFactory.FragmentConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragmentFactory.FragmentInstantiator
|
||||
|
||||
/**
|
||||
* Factory used by [KpmGradleModule] to polymorphic-ally create fragments/variants.
|
||||
* Factory used by [GradleKpmModule] to polymorphic-ally create fragments/variants.
|
||||
* Fragments are created in two stages with this factory:
|
||||
*
|
||||
* [FragmentInstantiator]:
|
||||
@@ -26,22 +26,22 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragmentFactory.F
|
||||
* - Setting up additional Gradle tasks
|
||||
* - Setting up publication
|
||||
*/
|
||||
class KotlinGradleFragmentFactory<T : KpmGradleFragment>(
|
||||
class GradleKpmFragmentFactory<T : GradleKpmFragment>(
|
||||
private val fragmentInstantiator: FragmentInstantiator<T>,
|
||||
private val fragmentConfigurator: FragmentConfigurator<T>
|
||||
) : NamedDomainObjectFactory<T> {
|
||||
|
||||
/**
|
||||
* @see KotlinGradleFragmentFactory
|
||||
* @see GradleKpmFragmentFactory
|
||||
*/
|
||||
interface FragmentInstantiator<out T : KpmGradleFragment> {
|
||||
interface FragmentInstantiator<out T : GradleKpmFragment> {
|
||||
fun create(name: String): T
|
||||
}
|
||||
|
||||
/**
|
||||
* @see KotlinGradleFragmentFactory
|
||||
* @see GradleKpmFragmentFactory
|
||||
*/
|
||||
interface FragmentConfigurator<in T : KpmGradleFragment> {
|
||||
interface FragmentConfigurator<in T : GradleKpmFragment> {
|
||||
fun configure(fragment: T)
|
||||
}
|
||||
|
||||
@@ -50,10 +50,10 @@ class KotlinGradleFragmentFactory<T : KpmGradleFragment>(
|
||||
}
|
||||
}
|
||||
|
||||
internal fun <T : KpmGradleFragment> Configuration.configure(
|
||||
definition: KotlinGradleFragmentConfigurationDefinition<T>, fragment: T
|
||||
internal fun <T : GradleKpmFragment> Configuration.configure(
|
||||
definition: GradleKpmConfigurationSetup<T>, fragment: T
|
||||
) {
|
||||
definition.attributes.setAttributes(attributes, fragment)
|
||||
definition.artifacts.addArtifacts(outgoing, fragment)
|
||||
definition.attributes.setupAttributes(attributes, fragment)
|
||||
definition.artifacts.setupArtifacts(outgoing, fragment)
|
||||
definition.capabilities.setCapabilities(outgoing, fragment)
|
||||
}
|
||||
|
||||
+13
-12
@@ -10,31 +10,32 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
import org.gradle.api.ExtensiblePolymorphicDomainObjectContainer
|
||||
import org.gradle.api.NamedDomainObjectSet
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import org.jetbrains.kotlin.project.model.*
|
||||
import org.jetbrains.kotlin.project.model.utils.variantsContainingFragment
|
||||
import javax.inject.Inject
|
||||
|
||||
open class KpmGradleModuleInternal(
|
||||
open class GradleKpmModuleInternal(
|
||||
final override val project: Project,
|
||||
final override val moduleClassifier: String?
|
||||
) : KpmGradleModule {
|
||||
) : GradleKpmModule {
|
||||
|
||||
@Inject
|
||||
constructor(project: Project, moduleName: CharSequence) : this(
|
||||
project,
|
||||
moduleName.takeIf { it != KpmGradleModule.MAIN_MODULE_NAME }?.toString()
|
||||
moduleName.takeIf { it != GradleKpmModule.MAIN_MODULE_NAME }?.toString()
|
||||
)
|
||||
|
||||
override val moduleIdentifier: KpmModuleIdentifier =
|
||||
KpmLocalModuleIdentifier(project.currentBuildId().name, project.path, moduleClassifier)
|
||||
|
||||
override val fragments: ExtensiblePolymorphicDomainObjectContainer<KpmGradleFragment> =
|
||||
project.objects.polymorphicDomainObjectContainer(KpmGradleFragment::class.java)
|
||||
override val fragments: ExtensiblePolymorphicDomainObjectContainer<GradleKpmFragment> =
|
||||
project.objects.polymorphicDomainObjectContainer(GradleKpmFragment::class.java)
|
||||
|
||||
// TODO DSL & build script model: find a way to create a flexible typed view on fragments?
|
||||
override val variants: NamedDomainObjectSet<KpmGradleVariant> by lazy {
|
||||
fragments.withType(KpmGradleVariant::class.java)
|
||||
override val variants: NamedDomainObjectSet<GradleKpmVariant> by lazy {
|
||||
fragments.withType(GradleKpmVariant::class.java)
|
||||
}
|
||||
|
||||
override val plugins: Set<KpmCompilerPlugin> by lazy {
|
||||
@@ -70,14 +71,14 @@ open class KpmGradleModuleInternal(
|
||||
override fun toString(): String = "$moduleIdentifier (Gradle)"
|
||||
}
|
||||
|
||||
internal val KpmGradleModule.resolvableMetadataConfigurationName: String
|
||||
internal val GradleKpmModule.resolvableMetadataConfigurationName: String
|
||||
get() = lowerCamelCaseName(name, "DependenciesMetadata")
|
||||
|
||||
internal val KpmGradleModule.isMain
|
||||
internal val GradleKpmModule.isMain
|
||||
get() = moduleIdentifier.moduleClassifier == null
|
||||
|
||||
internal fun KpmGradleModule.disambiguateName(simpleName: String) =
|
||||
internal fun GradleKpmModule.disambiguateName(simpleName: String) =
|
||||
lowerCamelCaseName(moduleClassifier, simpleName)
|
||||
|
||||
internal fun KpmGradleModule.variantsContainingFragment(fragment: KpmFragment): Iterable<KpmGradleVariant> =
|
||||
(this as KpmModule).variantsContainingFragment(fragment).onEach { it as KpmGradleVariant } as Iterable<KpmGradleVariant>
|
||||
internal fun GradleKpmModule.variantsContainingFragment(fragment: KpmFragment): Iterable<GradleKpmVariant> =
|
||||
(this as KpmModule).variantsContainingFragment(fragment).onEach { it as GradleKpmVariant } as Iterable<GradleKpmVariant>
|
||||
|
||||
+14
-14
@@ -8,9 +8,9 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
import org.gradle.api.NamedDomainObjectFactory
|
||||
import org.gradle.api.Project
|
||||
|
||||
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)
|
||||
open class GradleKpmModuleFactory(private val project: Project) : NamedDomainObjectFactory<GradleKpmModule> {
|
||||
override fun create(name: String): GradleKpmModule {
|
||||
val result = project.objects.newInstance(GradleKpmModuleInternal::class.java, project, name)
|
||||
registerFragmentFactory(result)
|
||||
registerDefaultCommonFragment(result)
|
||||
addDefaultDependencyOnMainModule(result)
|
||||
@@ -18,29 +18,29 @@ open class KotlinGradleModuleFactory(private val project: Project) : NamedDomain
|
||||
return result
|
||||
}
|
||||
|
||||
protected open fun registerDefaultCommonFragment(module: KpmGradleModule) {
|
||||
module.fragments.register(KpmGradleFragment.COMMON_FRAGMENT_NAME, KpmGradleFragment::class.java)
|
||||
protected open fun registerDefaultCommonFragment(module: GradleKpmModule) {
|
||||
module.fragments.register(GradleKpmFragment.COMMON_FRAGMENT_NAME, GradleKpmFragment::class.java)
|
||||
}
|
||||
|
||||
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 addDefaultRefinementDependencyOnCommon(module: GradleKpmModule) {
|
||||
module.fragments.matching { it.name != GradleKpmFragment.COMMON_FRAGMENT_NAME }.all {
|
||||
it.refines(module.fragments.named(GradleKpmFragment.COMMON_FRAGMENT_NAME))
|
||||
}
|
||||
}
|
||||
|
||||
protected open fun addDefaultDependencyOnMainModule(module: KpmGradleModule) {
|
||||
if (module.name != KpmGradleModule.MAIN_MODULE_NAME) {
|
||||
protected open fun addDefaultDependencyOnMainModule(module: GradleKpmModule) {
|
||||
if (module.name != GradleKpmModule.MAIN_MODULE_NAME) {
|
||||
module.fragments
|
||||
.matching { it.fragmentName == KpmGradleFragment.COMMON_FRAGMENT_NAME }
|
||||
.matching { it.fragmentName == GradleKpmFragment.COMMON_FRAGMENT_NAME }
|
||||
.configureEach { commonFragment ->
|
||||
commonFragment.dependencies {
|
||||
api(module.project.kpmModules.getByName(KpmGradleModule.MAIN_MODULE_NAME))
|
||||
api(module.project.kpmModules.getByName(GradleKpmModule.MAIN_MODULE_NAME))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected open fun registerFragmentFactory(module: KpmGradleModule) {
|
||||
module.fragments.registerFactory(KpmGradleFragment::class.java, KotlinCommonFragmentFactory(module))
|
||||
protected open fun registerFragmentFactory(module: GradleKpmModule) {
|
||||
module.fragments.registerFactory(GradleKpmFragment::class.java, GradleKpmCommonFragmentFactory(module))
|
||||
}
|
||||
}
|
||||
|
||||
+37
-37
@@ -9,80 +9,80 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguationOmittingMain
|
||||
|
||||
typealias KotlinJvmVariantFactory = KotlinGradleFragmentFactory<KpmJvmVariant>
|
||||
typealias GradleKpmJvmVariantFactory = GradleKpmFragmentFactory<GradleKpmJvmVariant>
|
||||
|
||||
fun KotlinJvmVariantFactory(
|
||||
module: KpmGradleModule, config: KotlinJvmVariantConfig = KotlinJvmVariantConfig()
|
||||
): KotlinJvmVariantFactory = KotlinJvmVariantFactory(
|
||||
KotlinJvmVariantInstantiator(module, config),
|
||||
KotlinJvmVariantConfigurator(config)
|
||||
fun GradleKpmJvmVariantFactory(
|
||||
module: GradleKpmModule, config: GradleKpmJvmVariantConfig = GradleKpmJvmVariantConfig()
|
||||
): GradleKpmJvmVariantFactory = GradleKpmJvmVariantFactory(
|
||||
GradleKpmJvmVariantInstantiator(module, config),
|
||||
GradleKpmJvmVariantConfigurator(config)
|
||||
)
|
||||
|
||||
data class KotlinJvmVariantConfig(
|
||||
val dependenciesConfigurationFactory: KotlinFragmentDependencyConfigurationsFactory
|
||||
= DefaultKotlinFragmentDependencyConfigurationsFactory,
|
||||
data class GradleKpmJvmVariantConfig(
|
||||
val dependenciesConfigurationFactory: GradleKpmFragmentDependencyConfigurationsFactory
|
||||
= GradleKpmDefaultFragmentDependencyConfigurationsFactory,
|
||||
|
||||
val compileDependencies: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
|
||||
val compileDependencies: GradleKpmConfigurationSetup<GradleKpmJvmVariant>
|
||||
= DefaultKotlinCompileDependenciesDefinition,
|
||||
|
||||
val runtimeDependencies: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
|
||||
val runtimeDependencies: GradleKpmConfigurationSetup<GradleKpmJvmVariant>
|
||||
= DefaultKotlinRuntimeDependenciesDefinition,
|
||||
|
||||
val apiElements: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
|
||||
= DefaultKotlinApiElementsDefinition + KotlinFragmentCompilationOutputsJarArtifact,
|
||||
val apiElements: GradleKpmConfigurationSetup<GradleKpmJvmVariant>
|
||||
= DefaultKotlinApiElementsDefinition + GradleKpmCompilationOutputsJarArtifact,
|
||||
|
||||
val runtimeElements: KotlinGradleFragmentConfigurationDefinition<KpmJvmVariant>
|
||||
val runtimeElements: GradleKpmConfigurationSetup<GradleKpmJvmVariant>
|
||||
= DefaultKotlinRuntimeElementsDefinition,
|
||||
|
||||
val compileTaskConfigurator: KotlinCompileTaskConfigurator<KpmJvmVariant>
|
||||
= KotlinJvmCompileTaskConfigurator,
|
||||
val compileTaskConfigurator: GradleKpmCompileTaskConfigurator<GradleKpmJvmVariant>
|
||||
= GradleKpmJvmCompileTaskConfigurator,
|
||||
|
||||
val sourceArchiveTaskConfigurator: KotlinSourceArchiveTaskConfigurator<KpmJvmVariant>
|
||||
= DefaultKotlinSourceArchiveTaskConfigurator,
|
||||
val sourceArchiveTaskConfigurator: GradleKpmSourceArchiveTaskConfigurator<GradleKpmJvmVariant>
|
||||
= GradleKpmDefaultKotlinSourceArchiveTaskConfigurator,
|
||||
|
||||
val sourceDirectoriesConfigurator: KotlinSourceDirectoriesConfigurator<KpmJvmVariant>
|
||||
= DefaultKotlinSourceDirectoriesConfigurator,
|
||||
val sourceDirectoriesConfigurator: GradleKpmSourceDirectoriesConfigurator<GradleKpmJvmVariant>
|
||||
= GradleKpmDefaultSourceDirectoriesConfigurator,
|
||||
|
||||
val publicationConfigurator: KotlinPublicationConfigurator<KpmJvmVariant>
|
||||
= KotlinPublicationConfigurator.SingleVariantPublication
|
||||
val publicationConfigurator: GradleKpmPublicationConfigurator<GradleKpmJvmVariant>
|
||||
= GradleKpmPublicationConfigurator.SingleVariantPublication
|
||||
)
|
||||
|
||||
class KotlinJvmVariantInstantiator internal constructor(
|
||||
private val module: KpmGradleModule,
|
||||
private val config: KotlinJvmVariantConfig
|
||||
) : KotlinGradleFragmentFactory.FragmentInstantiator<KpmJvmVariant> {
|
||||
class GradleKpmJvmVariantInstantiator internal constructor(
|
||||
private val module: GradleKpmModule,
|
||||
private val config: GradleKpmJvmVariantConfig
|
||||
) : GradleKpmFragmentFactory.FragmentInstantiator<GradleKpmJvmVariant> {
|
||||
|
||||
override fun create(name: String): KpmJvmVariant {
|
||||
override fun create(name: String): GradleKpmJvmVariant {
|
||||
val names = FragmentNameDisambiguationOmittingMain(module, name)
|
||||
val context = KotlinGradleFragmentConfigurationContextImpl(
|
||||
val context = GradleKpmFragmentConfigureContextImpl(
|
||||
module, config.dependenciesConfigurationFactory.create(module, names), names
|
||||
)
|
||||
|
||||
return KpmJvmVariant(
|
||||
return GradleKpmJvmVariant(
|
||||
containingModule = module,
|
||||
fragmentName = name,
|
||||
dependencyConfigurations = context.dependencies,
|
||||
compileDependenciesConfiguration = config.compileDependencies.provider.getConfiguration(context).also { configuration ->
|
||||
config.compileDependencies.relations.setExtendsFrom(configuration, context)
|
||||
config.compileDependencies.relations.setupExtendsFromRelations(configuration, context)
|
||||
},
|
||||
runtimeDependenciesConfiguration = config.runtimeDependencies.provider.getConfiguration(context).also { configuration ->
|
||||
config.runtimeElements.relations.setExtendsFrom(configuration, context)
|
||||
config.runtimeElements.relations.setupExtendsFromRelations(configuration, context)
|
||||
},
|
||||
apiElementsConfiguration = config.apiElements.provider.getConfiguration(context).also { configuration ->
|
||||
config.apiElements.relations.setExtendsFrom(configuration, context)
|
||||
config.apiElements.relations.setupExtendsFromRelations(configuration, context)
|
||||
},
|
||||
runtimeElementsConfiguration = config.runtimeElements.provider.getConfiguration(context).also { configuration ->
|
||||
config.runtimeElements.relations.setExtendsFrom(configuration, context)
|
||||
config.runtimeElements.relations.setupExtendsFromRelations(configuration, context)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class KotlinJvmVariantConfigurator internal constructor(
|
||||
private val config: KotlinJvmVariantConfig
|
||||
) : KotlinGradleFragmentFactory.FragmentConfigurator<KpmJvmVariant> {
|
||||
class GradleKpmJvmVariantConfigurator internal constructor(
|
||||
private val config: GradleKpmJvmVariantConfig
|
||||
) : GradleKpmFragmentFactory.FragmentConfigurator<GradleKpmJvmVariant> {
|
||||
|
||||
override fun configure(fragment: KpmJvmVariant) {
|
||||
override fun configure(fragment: GradleKpmJvmVariant) {
|
||||
fragment.compileDependenciesConfiguration.configure(config.compileDependencies, fragment)
|
||||
fragment.runtimeDependenciesConfiguration.configure(config.runtimeDependencies, fragment)
|
||||
fragment.apiElementsConfiguration.configure(config.apiElements, fragment)
|
||||
|
||||
+15
-14
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.dsl.*
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformCommonOptionsImpl
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.disambiguateName
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.ResolvedMetadataFilesProvider
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.createMetadataDependencyTransformationClasspath
|
||||
@@ -32,8 +33,8 @@ interface KotlinCommonFragmentMetadataCompilationData : KotlinMetadataCompilatio
|
||||
|
||||
internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : KotlinCommonOptions>(
|
||||
final override val project: Project,
|
||||
val fragment: KpmGradleFragment,
|
||||
private val module: KpmGradleModule,
|
||||
val fragment: GradleKpmFragment,
|
||||
private val module: GradleKpmModule,
|
||||
private val compileAllTask: TaskProvider<DefaultTask>,
|
||||
val metadataCompilationRegistry: MetadataCompilationRegistry,
|
||||
private val resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>>
|
||||
@@ -106,8 +107,8 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : Kotlin
|
||||
|
||||
internal open class KotlinCommonFragmentMetadataCompilationDataImpl(
|
||||
project: Project,
|
||||
fragment: KpmGradleFragment,
|
||||
module: KpmGradleModule,
|
||||
fragment: GradleKpmFragment,
|
||||
module: GradleKpmModule,
|
||||
compileAllTask: TaskProvider<DefaultTask>,
|
||||
metadataCompilationRegistry: MetadataCompilationRegistry,
|
||||
resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>>
|
||||
@@ -133,18 +134,18 @@ interface KotlinNativeFragmentMetadataCompilationData :
|
||||
KotlinMetadataCompilationData<KotlinCommonOptions>,
|
||||
KotlinNativeCompilationData<KotlinCommonOptions>
|
||||
|
||||
internal fun KpmGradleFragment.isNativeShared(): Boolean =
|
||||
internal fun GradleKpmFragment.isNativeShared(): Boolean =
|
||||
containingVariants.run {
|
||||
any() && all { it.platformType == KotlinPlatformType.native }
|
||||
}
|
||||
|
||||
internal fun KpmGradleFragment.isNativeHostSpecific(): Boolean =
|
||||
internal fun GradleKpmFragment.isNativeHostSpecific(): Boolean =
|
||||
this in getHostSpecificFragments(containingModule)
|
||||
|
||||
internal open class KotlinNativeFragmentMetadataCompilationDataImpl(
|
||||
project: Project,
|
||||
fragment: KpmGradleFragment,
|
||||
module: KpmGradleModule,
|
||||
fragment: GradleKpmFragment,
|
||||
module: GradleKpmModule,
|
||||
compileAllTask: TaskProvider<DefaultTask>,
|
||||
metadataCompilationRegistry: MetadataCompilationRegistry,
|
||||
resolvedMetadataFiles: Lazy<Iterable<ResolvedMetadataFilesProvider>>
|
||||
@@ -168,7 +169,7 @@ internal open class KotlinNativeFragmentMetadataCompilationDataImpl(
|
||||
override val konanTarget: KonanTarget
|
||||
get() {
|
||||
val nativeVariants =
|
||||
fragment.containingVariants.filterIsInstance<KpmNativeVariantInternal>()
|
||||
fragment.containingVariants.filterIsInstance<GradleKpmNativeVariantInternal>()
|
||||
return nativeVariants.firstOrNull { it.konanTarget.enabledOnCurrentHost }?.konanTarget
|
||||
?: nativeVariants.firstOrNull()?.konanTarget
|
||||
?: HostManager.host
|
||||
@@ -182,10 +183,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<KpmGradleFragment, KotlinCommonFragmentMetadataCompilationDataImpl>()
|
||||
private val nativeCompilationDataPerFragment = LinkedHashMap<KpmGradleFragment, KotlinNativeFragmentMetadataCompilationDataImpl>()
|
||||
private val commonCompilationDataPerFragment = LinkedHashMap<GradleKpmFragment, KotlinCommonFragmentMetadataCompilationDataImpl>()
|
||||
private val nativeCompilationDataPerFragment = LinkedHashMap<GradleKpmFragment, KotlinNativeFragmentMetadataCompilationDataImpl>()
|
||||
|
||||
fun registerCommon(fragment: KpmGradleFragment, compilationData: KotlinCommonFragmentMetadataCompilationDataImpl) {
|
||||
fun registerCommon(fragment: GradleKpmFragment, compilationData: KotlinCommonFragmentMetadataCompilationDataImpl) {
|
||||
commonCompilationDataPerFragment.compute(fragment) { _, existing ->
|
||||
existing?.let { error("common compilation data for fragment $fragment already registered") }
|
||||
compilationData
|
||||
@@ -193,7 +194,7 @@ internal class MetadataCompilationRegistry {
|
||||
withAllCommonCallbacks.forEach { it.invoke(compilationData) }
|
||||
}
|
||||
|
||||
fun registerNative(fragment: KpmGradleFragment, compilationData: KotlinNativeFragmentMetadataCompilationDataImpl) {
|
||||
fun registerNative(fragment: GradleKpmFragment, compilationData: KotlinNativeFragmentMetadataCompilationDataImpl) {
|
||||
nativeCompilationDataPerFragment.compute(fragment) { _, existing ->
|
||||
existing?.let { error("native compilation data for fragment $fragment already registered") }
|
||||
compilationData
|
||||
@@ -201,7 +202,7 @@ internal class MetadataCompilationRegistry {
|
||||
withAllNativeCallbacks.forEach { it.invoke(compilationData) }
|
||||
}
|
||||
|
||||
fun getForFragmentOrNull(fragment: KpmGradleFragment): AbstractKotlinFragmentMetadataCompilationData<*>? =
|
||||
fun getForFragmentOrNull(fragment: GradleKpmFragment): AbstractKotlinFragmentMetadataCompilationData<*>? =
|
||||
listOf(commonCompilationDataPerFragment.getValue(fragment), nativeCompilationDataPerFragment.getValue(fragment)).singleOrNull {
|
||||
it.isActive
|
||||
}
|
||||
|
||||
+8
-56
@@ -5,31 +5,29 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
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
|
||||
|
||||
abstract class KpmNativeVariantInternal(
|
||||
containingModule: KpmGradleModule,
|
||||
abstract class GradleKpmNativeVariantInternal(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
val konanTarget: KonanTarget,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
final override val hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariant,
|
||||
KpmGradleVariantInternal(
|
||||
) : GradleKpmNativeVariant,
|
||||
GradleKpmVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
dependencyConfigurations = dependencyConfigurations,
|
||||
compileDependenciesConfiguration = compileDependencyConfiguration,
|
||||
apiElementsConfiguration = apiElementsConfiguration
|
||||
),
|
||||
SingleMavenPublishedModuleHolder by DefaultSingleMavenPublishedModuleHolder(containingModule, fragmentName) {
|
||||
GradleKpmSingleMavenPublishedModuleHolder by GradleKpmDefaultSingleMavenPublishedModuleHolder(containingModule, fragmentName) {
|
||||
|
||||
override var enableEndorsedLibraries: Boolean = false
|
||||
|
||||
@@ -40,35 +38,7 @@ abstract class KpmNativeVariantInternal(
|
||||
DefaultCInteropSettings(project, cinteropName, compilationData)
|
||||
}
|
||||
|
||||
override val compilationData by lazy { KotlinNativeVariantCompilationData(this) }
|
||||
}
|
||||
|
||||
class KotlinNativeVariantConstructor<T : KpmNativeVariantInternal>(
|
||||
val konanTarget: KonanTarget,
|
||||
val variantClass: Class<T>,
|
||||
private val constructor: (
|
||||
containingModule: KpmGradleModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) -> T
|
||||
) {
|
||||
operator fun invoke(
|
||||
containingModule: KpmGradleModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
): T = constructor(
|
||||
containingModule, fragmentName,
|
||||
dependencyConfigurations,
|
||||
compileDependencyConfiguration,
|
||||
apiElementsConfiguration,
|
||||
hostSpecificMetadataElementsConfiguration
|
||||
)
|
||||
override val compilationData by lazy { GradleKpmNativeVariantCompilationData(this) }
|
||||
}
|
||||
|
||||
interface KotlinNativeCompilationData<T : KotlinCommonOptions> : KotlinCompilationData<T> {
|
||||
@@ -76,27 +46,9 @@ interface KotlinNativeCompilationData<T : KotlinCommonOptions> : KotlinCompilati
|
||||
val enableEndorsedLibs: Boolean
|
||||
}
|
||||
|
||||
internal class KotlinNativeVariantCompilationData(
|
||||
val variant: KpmNativeVariantInternal
|
||||
) : KotlinVariantCompilationDataInternal<KotlinCommonOptions>, KotlinNativeCompilationData<KotlinCommonOptions> {
|
||||
override val konanTarget: KonanTarget
|
||||
get() = variant.konanTarget
|
||||
|
||||
override val enableEndorsedLibs: Boolean
|
||||
get() = variant.enableEndorsedLibraries
|
||||
|
||||
override val project: Project
|
||||
get() = variant.containingModule.project
|
||||
|
||||
override val owner: KpmNativeVariant
|
||||
get() = variant
|
||||
|
||||
override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions { variant.languageSettings }
|
||||
}
|
||||
|
||||
internal class KotlinMappedNativeCompilationFactory(
|
||||
target: KotlinNativeTarget,
|
||||
private val variantClass: Class<out KpmNativeVariantInternal>
|
||||
private val variantClass: Class<out GradleKpmNativeVariantInternal>
|
||||
) : KotlinNativeCompilationFactory(target) {
|
||||
override fun create(name: String): KotlinNativeCompilation {
|
||||
val module = target.project.kpmModules.maybeCreate(name)
|
||||
|
||||
+37
-38
@@ -9,76 +9,75 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation
|
||||
|
||||
fun <T : KpmNativeVariantInternal> KotlinNativeVariantFactory(
|
||||
module: KpmGradleModule,
|
||||
constructor: KotlinNativeVariantConstructor<T>,
|
||||
config: KotlinNativeVariantConfig<T> = KotlinNativeVariantConfig()
|
||||
) = KotlinGradleFragmentFactory(
|
||||
fragmentInstantiator = KotlinNativeVariantInstantiator(module, constructor, config),
|
||||
fragmentConfigurator = KotlinNativeVariantConfigurator(config)
|
||||
fun <T : GradleKpmNativeVariantInternal> GradleKpmNativeVariantFactory(
|
||||
module: GradleKpmModule,
|
||||
constructor: GradleKpmNativeVariantConstructor<T>,
|
||||
config: GradleKpmNativeVariantConfig<T> = GradleKpmNativeVariantConfig()
|
||||
) = GradleKpmFragmentFactory(
|
||||
fragmentInstantiator = GradleKpmNativeVariantInstantiator(module, constructor, config),
|
||||
fragmentConfigurator = GradleKpmNativeVariantConfigurator(config)
|
||||
)
|
||||
|
||||
data class KotlinNativeVariantConfig<T : KpmNativeVariantInternal>(
|
||||
val dependenciesConfigurationFactory: KotlinFragmentDependencyConfigurationsFactory =
|
||||
DefaultKotlinFragmentDependencyConfigurationsFactory,
|
||||
data class GradleKpmNativeVariantConfig<T : GradleKpmNativeVariantInternal>(
|
||||
val dependenciesConfigurationFactory: GradleKpmFragmentDependencyConfigurationsFactory =
|
||||
GradleKpmDefaultFragmentDependencyConfigurationsFactory,
|
||||
|
||||
val compileDependencies: ConfigurationDefinition<T> =
|
||||
DefaultKotlinCompileDependenciesDefinition + KotlinFragmentKonanTargetAttribute,
|
||||
val compileDependencies: GradleKpmConfigurationSetup<T> =
|
||||
DefaultKotlinCompileDependenciesDefinition + GradleKpmKonanTargetAttribute,
|
||||
|
||||
val apiElements: ConfigurationDefinition<T> =
|
||||
val apiElements: GradleKpmConfigurationSetup<T> =
|
||||
DefaultKotlinApiElementsDefinition
|
||||
+ KotlinFragmentKonanTargetAttribute
|
||||
+ FragmentConfigurationRelation { extendsFrom(dependencies.transitiveImplementationConfiguration) },
|
||||
+ GradleKpmKonanTargetAttribute
|
||||
+ GradleKpmConfigurationRelationSetup { extendsFrom(dependencies.transitiveImplementationConfiguration) },
|
||||
|
||||
val hostSpecificMetadataElements: ConfigurationDefinition<T> =
|
||||
val hostSpecificMetadataElements: GradleKpmConfigurationSetup<T> =
|
||||
DefaultKotlinHostSpecificMetadataElementsDefinition,
|
||||
|
||||
val compileTaskConfigurator: KotlinCompileTaskConfigurator<T> =
|
||||
KotlinNativeCompileTaskConfigurator,
|
||||
val compileTaskConfigurator: GradleKpmCompileTaskConfigurator<T> =
|
||||
GradleKpmNativeCompileTaskConfigurator,
|
||||
|
||||
val sourceArchiveTaskConfigurator: KotlinSourceArchiveTaskConfigurator<T> =
|
||||
DefaultKotlinSourceArchiveTaskConfigurator,
|
||||
val sourceArchiveTaskConfigurator: GradleKpmSourceArchiveTaskConfigurator<T> =
|
||||
GradleKpmDefaultKotlinSourceArchiveTaskConfigurator,
|
||||
|
||||
val sourceDirectoriesConfigurator: KotlinSourceDirectoriesConfigurator<T> =
|
||||
DefaultKotlinSourceDirectoriesConfigurator,
|
||||
val sourceDirectoriesConfigurator: GradleKpmSourceDirectoriesConfigurator<T> =
|
||||
GradleKpmDefaultSourceDirectoriesConfigurator,
|
||||
|
||||
val publicationConfigurator: KotlinPublicationConfigurator<KpmNativeVariantInternal> =
|
||||
KotlinPublicationConfigurator.NativeVariantPublication
|
||||
val publicationConfigurator: GradleKpmPublicationConfigurator<GradleKpmNativeVariantInternal> =
|
||||
GradleKpmPublicationConfigurator.NativeVariantPublication
|
||||
)
|
||||
|
||||
class KotlinNativeVariantInstantiator<T : KpmNativeVariantInternal>(
|
||||
private val module: KpmGradleModule,
|
||||
private val kotlinNativeVariantConstructor: KotlinNativeVariantConstructor<T>,
|
||||
private val config: KotlinNativeVariantConfig<T>
|
||||
|
||||
) : KotlinGradleFragmentFactory.FragmentInstantiator<T> {
|
||||
class GradleKpmNativeVariantInstantiator<T : GradleKpmNativeVariantInternal>(
|
||||
private val module: GradleKpmModule,
|
||||
private val variantConstructor: GradleKpmNativeVariantConstructor<T>,
|
||||
private val config: GradleKpmNativeVariantConfig<T>
|
||||
) : GradleKpmFragmentFactory.FragmentInstantiator<T> {
|
||||
|
||||
override fun create(name: String): T {
|
||||
val names = FragmentNameDisambiguation(module, name)
|
||||
val dependencies = config.dependenciesConfigurationFactory.create(module, names)
|
||||
val context = KotlinGradleFragmentConfigurationContextImpl(module, dependencies, names)
|
||||
val context = GradleKpmFragmentConfigureContextImpl(module, dependencies, names)
|
||||
|
||||
return kotlinNativeVariantConstructor.invoke(
|
||||
return variantConstructor.invoke(
|
||||
containingModule = module,
|
||||
fragmentName = name,
|
||||
dependencyConfigurations = dependencies,
|
||||
compileDependencyConfiguration = config.compileDependencies.provider.getConfiguration(context).also { configuration ->
|
||||
config.compileDependencies.relations.setExtendsFrom(configuration, context)
|
||||
config.compileDependencies.relations.setupExtendsFromRelations(configuration, context)
|
||||
},
|
||||
apiElementsConfiguration = config.apiElements.provider.getConfiguration(context).also { configuration ->
|
||||
config.apiElements.relations.setExtendsFrom(configuration, context)
|
||||
config.apiElements.relations.setupExtendsFromRelations(configuration, context)
|
||||
},
|
||||
hostSpecificMetadataElementsConfiguration =
|
||||
config.hostSpecificMetadataElements.provider.getConfiguration(context).also { configuration ->
|
||||
config.hostSpecificMetadataElements.relations.setExtendsFrom(configuration, context)
|
||||
config.hostSpecificMetadataElements.relations.setupExtendsFromRelations(configuration, context)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class KotlinNativeVariantConfigurator<T : KpmNativeVariantInternal>(
|
||||
private val config: KotlinNativeVariantConfig<T>
|
||||
) : KotlinGradleFragmentFactory.FragmentConfigurator<T> {
|
||||
class GradleKpmNativeVariantConfigurator<T : GradleKpmNativeVariantInternal>(
|
||||
private val config: GradleKpmNativeVariantConfig<T>
|
||||
) : GradleKpmFragmentFactory.FragmentConfigurator<T> {
|
||||
|
||||
override fun configure(fragment: T) {
|
||||
fragment.compileDependenciesConfiguration.configure(config.compileDependencies, fragment)
|
||||
|
||||
+9
-9
@@ -5,21 +5,21 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp.pm20
|
||||
|
||||
interface KotlinPublicationConfigurator<in T : KpmGradleVariant> : KotlinGradleFragmentFactory.FragmentConfigurator<T> {
|
||||
interface GradleKpmPublicationConfigurator<in T : GradleKpmVariant> : GradleKpmFragmentFactory.FragmentConfigurator<T> {
|
||||
|
||||
object NoPublication : KotlinPublicationConfigurator<KpmGradleVariant> {
|
||||
override fun configure(fragment: KpmGradleVariant) = Unit
|
||||
object NoPublication : GradleKpmPublicationConfigurator<GradleKpmVariant> {
|
||||
override fun configure(fragment: GradleKpmVariant) = Unit
|
||||
}
|
||||
|
||||
object SingleVariantPublication : KotlinPublicationConfigurator<KpmGradlePublishedVariantWithRuntime> {
|
||||
override fun configure(fragment: KpmGradlePublishedVariantWithRuntime) {
|
||||
VariantPublishingConfigurator.get(fragment.project).configureSingleVariantPublication(fragment)
|
||||
object SingleVariantPublication : GradleKpmPublicationConfigurator<GradleKpmPublishedVariantWithRuntime> {
|
||||
override fun configure(fragment: GradleKpmPublishedVariantWithRuntime) {
|
||||
GradleKpmVariantPublishingConfigurator.get(fragment.project).configureSingleVariantPublication(fragment)
|
||||
}
|
||||
}
|
||||
|
||||
object NativeVariantPublication : KotlinPublicationConfigurator<KpmNativeVariantInternal> {
|
||||
override fun configure(fragment: KpmNativeVariantInternal) {
|
||||
VariantPublishingConfigurator.get(fragment.project).configureNativeVariantPublication(fragment)
|
||||
object NativeVariantPublication : GradleKpmPublicationConfigurator<GradleKpmNativeVariantInternal> {
|
||||
override fun configure(fragment: GradleKpmNativeVariantInternal) {
|
||||
GradleKpmVariantPublishingConfigurator.get(fragment.project).configureNativeVariantPublication(fragment)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -9,17 +9,17 @@ 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 : KpmGradleVariant> {
|
||||
interface GradleKpmSourceArchiveTaskConfigurator<in T : GradleKpmVariant> {
|
||||
fun registerSourceArchiveTask(variant: T): TaskProvider<*>?
|
||||
}
|
||||
|
||||
object DefaultKotlinSourceArchiveTaskConfigurator : KotlinSourceArchiveTaskConfigurator<KpmGradleVariant> {
|
||||
override fun registerSourceArchiveTask(variant: KpmGradleVariant): TaskProvider<*> {
|
||||
object GradleKpmDefaultKotlinSourceArchiveTaskConfigurator : GradleKpmSourceArchiveTaskConfigurator<GradleKpmVariant> {
|
||||
override fun registerSourceArchiveTask(variant: GradleKpmVariant): TaskProvider<*> {
|
||||
return sourcesJarTaskNamed(
|
||||
taskName = variant.sourceArchiveTaskName,
|
||||
project = variant.project,
|
||||
sourceSets = lazy {
|
||||
FragmentSourcesProvider().getSourcesFromRefinesClosureAsMap(variant)
|
||||
GradleKpmFragmentSourcesProvider().getSourcesFromRefinesClosureAsMap(variant)
|
||||
.entries.associate { it.key.unambiguousNameInProject to it.value.get() }
|
||||
},
|
||||
artifactNameAppendix = variant.name
|
||||
|
||||
+5
-5
@@ -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 : KpmGradleFragment>: KotlinGradleFragmentFactory.FragmentConfigurator<T>
|
||||
interface GradleKpmSourceDirectoriesConfigurator<in T : GradleKpmFragment>: GradleKpmFragmentFactory.FragmentConfigurator<T>
|
||||
|
||||
object DefaultKotlinSourceDirectoriesConfigurator : KotlinSourceDirectoriesConfigurator<KpmGradleFragment> {
|
||||
override fun configure(fragment: KpmGradleFragment) {
|
||||
object GradleKpmDefaultSourceDirectoriesConfigurator : GradleKpmSourceDirectoriesConfigurator<GradleKpmFragment> {
|
||||
override fun configure(fragment: GradleKpmFragment) {
|
||||
fragment.kotlinSourceRoots.srcDir(
|
||||
fragment.project.provider {
|
||||
defaultSourceFolder(
|
||||
@@ -25,7 +25,7 @@ object DefaultKotlinSourceDirectoriesConfigurator : KotlinSourceDirectoriesConfi
|
||||
)
|
||||
}
|
||||
|
||||
private fun fragmentDirectoryName(fragment: KpmGradleFragment): String {
|
||||
private fun fragmentDirectoryName(fragment: GradleKpmFragment): 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: KpmGradleFragment, type: String): File {
|
||||
fun defaultSourceFolder(fragment: GradleKpmFragment, type: String): File {
|
||||
val fragmentDirectoryName = fragmentDirectoryName(fragment)
|
||||
return fragment.project.file("src/$fragmentDirectoryName/$type")
|
||||
}
|
||||
|
||||
+5
-5
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.VariantMappedCompilationDetails
|
||||
import java.util.concurrent.Callable
|
||||
|
||||
internal open class KpmAwareTargetConfigurator<T : KotlinTarget>(
|
||||
internal open class GradleKpmAwareTargetConfigurator<T : KotlinTarget>(
|
||||
private val legacyModelTargetConfigurator: AbstractKotlinTargetConfigurator<T>,
|
||||
) : AbstractKotlinTargetConfigurator<T>(true, legacyModelTargetConfigurator.createDefaultSourceSets),
|
||||
KotlinTargetConfigurator<T> by legacyModelTargetConfigurator {
|
||||
@@ -31,7 +31,7 @@ internal open class KpmAwareTargetConfigurator<T : KotlinTarget>(
|
||||
val compilationDetails = (compilation as? AbstractKotlinCompilation)?.compilationDetails
|
||||
if (compilationDetails is VariantMappedCompilationDetails<*> && compilationDetails.variant.containingModule.isMain) {
|
||||
val variant = compilationDetails.variant
|
||||
if (variant is SingleMavenPublishedModuleHolder) {
|
||||
if (variant is GradleKpmSingleMavenPublishedModuleHolder) {
|
||||
variant.whenPublicationAssigned { publication ->
|
||||
target.publicationConfigureActions.all { action ->
|
||||
action.execute(publication)
|
||||
@@ -76,10 +76,10 @@ internal open class KpmAwareTargetConfigurator<T : KotlinTarget>(
|
||||
}
|
||||
}
|
||||
|
||||
internal class KpmAwareTargetWithTestsConfigurator<R : KotlinTargetTestRun<*>, T : KotlinTargetWithTests<*, R>, C>(
|
||||
internal class GradleKpmAwareTargetWithTestsConfigurator<R : KotlinTargetTestRun<*>, T : KotlinTargetWithTests<*, R>, C>(
|
||||
private val legacyModelTargetWithTestsConfigurator: C
|
||||
) :
|
||||
KpmAwareTargetConfigurator<T>(legacyModelTargetWithTestsConfigurator),
|
||||
GradleKpmAwareTargetConfigurator<T>(legacyModelTargetWithTestsConfigurator),
|
||||
KotlinTargetWithTestsConfigurator<R, T>
|
||||
|
||||
where C : AbstractKotlinTargetConfigurator<T>,
|
||||
@@ -95,4 +95,4 @@ internal class KpmAwareTargetWithTestsConfigurator<R : KotlinTargetTestRun<*>, T
|
||||
|
||||
override fun createTestRun(name: String, target: T): R =
|
||||
legacyModelTargetWithTestsConfigurator.createTestRun(name, target)
|
||||
}
|
||||
}
|
||||
|
||||
+14
-14
@@ -14,7 +14,7 @@ import org.gradle.util.ConfigureUtil
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
|
||||
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.DefaultKotlinDependencyHandler
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.toModuleDependency
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.toKpmModuleDependency
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.FragmentConsistencyChecker
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.FragmentConsistencyChecks
|
||||
@@ -25,12 +25,12 @@ import org.jetbrains.kotlin.tooling.core.MutableExtras
|
||||
import org.jetbrains.kotlin.tooling.core.mutableExtrasOf
|
||||
import javax.inject.Inject
|
||||
|
||||
open class KpmGradleFragmentInternal @Inject constructor(
|
||||
final override val containingModule: KpmGradleModule,
|
||||
open class GradleKpmFragmentInternal @Inject constructor(
|
||||
final override val containingModule: GradleKpmModule,
|
||||
final override val fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations
|
||||
) : KpmGradleFragment,
|
||||
KotlinFragmentDependencyConfigurations by dependencyConfigurations {
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations
|
||||
) : GradleKpmFragment,
|
||||
GradleKpmFragmentDependencyConfigurations by dependencyConfigurations {
|
||||
|
||||
final override fun getName(): String = fragmentName
|
||||
|
||||
@@ -44,12 +44,12 @@ open class KpmGradleFragmentInternal @Inject constructor(
|
||||
// FIXME check for consistency
|
||||
override val languageSettings: LanguageSettingsBuilder = DefaultLanguageSettingsBuilder()
|
||||
|
||||
override fun refines(other: KpmGradleFragment) {
|
||||
override fun refines(other: GradleKpmFragment) {
|
||||
checkCanRefine(other)
|
||||
refines(containingModule.fragments.named(other.name))
|
||||
}
|
||||
|
||||
override fun refines(other: NamedDomainObjectProvider<KpmGradleFragment>) {
|
||||
override fun refines(other: NamedDomainObjectProvider<GradleKpmFragment>) {
|
||||
_directRefinesDependencies.add(other)
|
||||
other.configure { checkCanRefine(it) }
|
||||
|
||||
@@ -66,11 +66,11 @@ open class KpmGradleFragmentInternal @Inject constructor(
|
||||
)
|
||||
|
||||
project.runProjectConfigurationHealthCheckWhenEvaluated {
|
||||
kotlinGradleFragmentConsistencyChecker.runAllChecks(this@KpmGradleFragmentInternal, other.get())
|
||||
kotlinGradleFragmentConsistencyChecker.runAllChecks(this@GradleKpmFragmentInternal, other.get())
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkCanRefine(other: KpmGradleFragment) {
|
||||
private fun checkCanRefine(other: GradleKpmFragment) {
|
||||
check(containingModule == other.containingModule) {
|
||||
"Fragments can only refine each other within one module. Can't make $this refine $other"
|
||||
}
|
||||
@@ -82,9 +82,9 @@ open class KpmGradleFragmentInternal @Inject constructor(
|
||||
override fun dependencies(configureClosure: Closure<Any?>) =
|
||||
dependencies f@{ ConfigureUtil.configure(configureClosure, this@f) }
|
||||
|
||||
private val _directRefinesDependencies = mutableSetOf<Provider<KpmGradleFragment>>()
|
||||
private val _directRefinesDependencies = mutableSetOf<Provider<GradleKpmFragment>>()
|
||||
|
||||
override val declaredRefinesDependencies: Iterable<KpmGradleFragment>
|
||||
override val declaredRefinesDependencies: Iterable<GradleKpmFragment>
|
||||
get() = _directRefinesDependencies.map { it.get() }.toSet()
|
||||
|
||||
// TODO: separate the declared module dependencies and exported module dependencies? we need this to keep implementation dependencies
|
||||
@@ -92,7 +92,7 @@ open class KpmGradleFragmentInternal @Inject constructor(
|
||||
// anyway, so for now all fragments follow that behavior
|
||||
override val declaredModuleDependencies: Iterable<KpmModuleDependency>
|
||||
get() = listOf(apiConfiguration, implementationConfiguration).flatMapTo(mutableSetOf()) { exportConfiguration ->
|
||||
exportConfiguration.allDependencies.map { dependency -> dependency.toModuleDependency(project) }
|
||||
exportConfiguration.allDependencies.map { dependency -> dependency.toKpmModuleDependency(project) }
|
||||
}
|
||||
|
||||
override val kotlinSourceRoots: SourceDirectorySet =
|
||||
@@ -106,7 +106,7 @@ open class KpmGradleFragmentInternal @Inject constructor(
|
||||
FragmentConsistencyChecker(
|
||||
unitsName = "fragments",
|
||||
name = { name },
|
||||
checks = FragmentConsistencyChecks<KpmGradleFragment>(
|
||||
checks = FragmentConsistencyChecks<GradleKpmFragment>(
|
||||
unitName = "fragment",
|
||||
languageSettings = { languageSettings }
|
||||
).allChecks
|
||||
|
||||
+10
-9
@@ -11,17 +11,18 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.filterModuleName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
||||
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
||||
|
||||
open class KpmJvmVariant(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmJvmVariant(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependenciesConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
runtimeDependenciesConfiguration: Configuration,
|
||||
runtimeElementsConfiguration: Configuration
|
||||
) : KpmGradlePublishedVariantWithRuntime(
|
||||
) : GradleKpmPublishedVariantWithRuntime(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
dependencyConfigurations = dependencyConfigurations,
|
||||
@@ -30,20 +31,20 @@ open class KpmJvmVariant(
|
||||
runtimeDependencyConfiguration = runtimeDependenciesConfiguration,
|
||||
runtimeElementsConfiguration = runtimeElementsConfiguration
|
||||
) {
|
||||
override val compilationData: KotlinJvmVariantCompilationData by lazy { KotlinJvmVariantCompilationData(this) }
|
||||
override val compilationData: GradleKpmJvmVariantCompilationData by lazy { GradleKpmJvmVariantCompilationData(this) }
|
||||
|
||||
override val platformType: KotlinPlatformType
|
||||
get() = KotlinPlatformType.jvm
|
||||
}
|
||||
|
||||
class KotlinJvmVariantCompilationData(val variant: KpmJvmVariant) : KotlinVariantCompilationDataInternal<KotlinJvmOptions> {
|
||||
override val owner: KpmJvmVariant get() = variant
|
||||
class GradleKpmJvmVariantCompilationData(val variant: GradleKpmJvmVariant) : GradleKpmVariantCompilationDataInternal<KotlinJvmOptions> {
|
||||
override val owner: GradleKpmJvmVariant get() = variant
|
||||
|
||||
// TODO pull out to the variant
|
||||
override val kotlinOptions: KotlinJvmOptions = KotlinJvmOptionsImpl()
|
||||
}
|
||||
|
||||
internal fun KpmGradleVariant.ownModuleName(): String {
|
||||
internal fun GradleKpmVariant.ownModuleName(): String {
|
||||
val project = containingModule.project
|
||||
val baseName = project.archivesName
|
||||
?: project.name
|
||||
@@ -56,7 +57,7 @@ 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, KpmJvmVariant::class.java)
|
||||
val variant = module.fragments.create(target.name, GradleKpmJvmVariant::class.java)
|
||||
|
||||
return KotlinJvmCompilation(
|
||||
VariantMappedCompilationDetailsWithRuntime(variant, target),
|
||||
|
||||
+210
-210
@@ -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 KpmAndroidNativeX64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmAndroidNativeX64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.ANDROID_X64,
|
||||
@@ -22,20 +22,20 @@ open class KpmAndroidNativeX64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.ANDROID_X64, KpmAndroidNativeX64Variant::class.java, ::KpmAndroidNativeX64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.ANDROID_X64, GradleKpmAndroidNativeX64Variant::class.java, ::GradleKpmAndroidNativeX64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmAndroidNativeX86Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmAndroidNativeX86Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.ANDROID_X86,
|
||||
@@ -45,20 +45,20 @@ open class KpmAndroidNativeX86Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.ANDROID_X86, KpmAndroidNativeX86Variant::class.java, ::KpmAndroidNativeX86Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.ANDROID_X86, GradleKpmAndroidNativeX86Variant::class.java, ::GradleKpmAndroidNativeX86Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmAndroidNativeArm32Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmAndroidNativeArm32Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.ANDROID_ARM32,
|
||||
@@ -68,20 +68,20 @@ open class KpmAndroidNativeArm32Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.ANDROID_ARM32, KpmAndroidNativeArm32Variant::class.java, ::KpmAndroidNativeArm32Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.ANDROID_ARM32, GradleKpmAndroidNativeArm32Variant::class.java, ::GradleKpmAndroidNativeArm32Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmAndroidNativeArm64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmAndroidNativeArm64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.ANDROID_ARM64,
|
||||
@@ -91,20 +91,20 @@ open class KpmAndroidNativeArm64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.ANDROID_ARM64, KpmAndroidNativeArm64Variant::class.java, ::KpmAndroidNativeArm64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.ANDROID_ARM64, GradleKpmAndroidNativeArm64Variant::class.java, ::GradleKpmAndroidNativeArm64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmIosArm32Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmIosArm32Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.IOS_ARM32,
|
||||
@@ -114,20 +114,20 @@ open class KpmIosArm32Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.IOS_ARM32, KpmIosArm32Variant::class.java, ::KpmIosArm32Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.IOS_ARM32, GradleKpmIosArm32Variant::class.java, ::GradleKpmIosArm32Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmIosArm64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmIosArm64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.IOS_ARM64,
|
||||
@@ -137,20 +137,20 @@ open class KpmIosArm64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.IOS_ARM64, KpmIosArm64Variant::class.java, ::KpmIosArm64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.IOS_ARM64, GradleKpmIosArm64Variant::class.java, ::GradleKpmIosArm64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmIosX64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmIosX64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.IOS_X64,
|
||||
@@ -160,20 +160,20 @@ open class KpmIosX64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.IOS_X64, KpmIosX64Variant::class.java, ::KpmIosX64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.IOS_X64, GradleKpmIosX64Variant::class.java, ::GradleKpmIosX64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmIosSimulatorArm64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmIosSimulatorArm64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.IOS_SIMULATOR_ARM64,
|
||||
@@ -183,20 +183,20 @@ open class KpmIosSimulatorArm64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.IOS_SIMULATOR_ARM64, KpmIosSimulatorArm64Variant::class.java, ::KpmIosSimulatorArm64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.IOS_SIMULATOR_ARM64, GradleKpmIosSimulatorArm64Variant::class.java, ::GradleKpmIosSimulatorArm64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmWatchosArm32Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmWatchosArm32Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.WATCHOS_ARM32,
|
||||
@@ -206,20 +206,20 @@ open class KpmWatchosArm32Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.WATCHOS_ARM32, KpmWatchosArm32Variant::class.java, ::KpmWatchosArm32Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.WATCHOS_ARM32, GradleKpmWatchosArm32Variant::class.java, ::GradleKpmWatchosArm32Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmWatchosArm64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmWatchosArm64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.WATCHOS_ARM64,
|
||||
@@ -229,20 +229,20 @@ open class KpmWatchosArm64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.WATCHOS_ARM64, KpmWatchosArm64Variant::class.java, ::KpmWatchosArm64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.WATCHOS_ARM64, GradleKpmWatchosArm64Variant::class.java, ::GradleKpmWatchosArm64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmWatchosX86Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmWatchosX86Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.WATCHOS_X86,
|
||||
@@ -252,20 +252,20 @@ open class KpmWatchosX86Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.WATCHOS_X86, KpmWatchosX86Variant::class.java, ::KpmWatchosX86Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.WATCHOS_X86, GradleKpmWatchosX86Variant::class.java, ::GradleKpmWatchosX86Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmWatchosX64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmWatchosX64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.WATCHOS_X64,
|
||||
@@ -275,20 +275,20 @@ open class KpmWatchosX64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.WATCHOS_X64, KpmWatchosX64Variant::class.java, ::KpmWatchosX64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.WATCHOS_X64, GradleKpmWatchosX64Variant::class.java, ::GradleKpmWatchosX64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmWatchosSimulatorArm64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmWatchosSimulatorArm64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.WATCHOS_SIMULATOR_ARM64,
|
||||
@@ -298,20 +298,20 @@ open class KpmWatchosSimulatorArm64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.WATCHOS_SIMULATOR_ARM64, KpmWatchosSimulatorArm64Variant::class.java, ::KpmWatchosSimulatorArm64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.WATCHOS_SIMULATOR_ARM64, GradleKpmWatchosSimulatorArm64Variant::class.java, ::GradleKpmWatchosSimulatorArm64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmTvosArm64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmTvosArm64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.TVOS_ARM64,
|
||||
@@ -321,20 +321,20 @@ open class KpmTvosArm64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.TVOS_ARM64, KpmTvosArm64Variant::class.java, ::KpmTvosArm64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.TVOS_ARM64, GradleKpmTvosArm64Variant::class.java, ::GradleKpmTvosArm64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmTvosX64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmTvosX64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.TVOS_X64,
|
||||
@@ -344,20 +344,20 @@ open class KpmTvosX64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.TVOS_X64, KpmTvosX64Variant::class.java, ::KpmTvosX64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.TVOS_X64, GradleKpmTvosX64Variant::class.java, ::GradleKpmTvosX64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmTvosSimulatorArm64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmTvosSimulatorArm64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.TVOS_SIMULATOR_ARM64,
|
||||
@@ -367,20 +367,20 @@ open class KpmTvosSimulatorArm64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.TVOS_SIMULATOR_ARM64, KpmTvosSimulatorArm64Variant::class.java, ::KpmTvosSimulatorArm64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.TVOS_SIMULATOR_ARM64, GradleKpmTvosSimulatorArm64Variant::class.java, ::GradleKpmTvosSimulatorArm64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmLinuxX64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmLinuxX64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.LINUX_X64,
|
||||
@@ -390,20 +390,20 @@ open class KpmLinuxX64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.LINUX_X64, KpmLinuxX64Variant::class.java, ::KpmLinuxX64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.LINUX_X64, GradleKpmLinuxX64Variant::class.java, ::GradleKpmLinuxX64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmMingwX86Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmMingwX86Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.MINGW_X86,
|
||||
@@ -413,20 +413,20 @@ open class KpmMingwX86Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.MINGW_X86, KpmMingwX86Variant::class.java, ::KpmMingwX86Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.MINGW_X86, GradleKpmMingwX86Variant::class.java, ::GradleKpmMingwX86Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmMingwX64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmMingwX64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.MINGW_X64,
|
||||
@@ -436,20 +436,20 @@ open class KpmMingwX64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.MINGW_X64, KpmMingwX64Variant::class.java, ::KpmMingwX64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.MINGW_X64, GradleKpmMingwX64Variant::class.java, ::GradleKpmMingwX64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmMacosX64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmMacosX64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.MACOS_X64,
|
||||
@@ -459,20 +459,20 @@ open class KpmMacosX64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.MACOS_X64, KpmMacosX64Variant::class.java, ::KpmMacosX64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.MACOS_X64, GradleKpmMacosX64Variant::class.java, ::GradleKpmMacosX64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmMacosArm64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmMacosArm64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.MACOS_ARM64,
|
||||
@@ -482,20 +482,20 @@ open class KpmMacosArm64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.MACOS_ARM64, KpmMacosArm64Variant::class.java, ::KpmMacosArm64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.MACOS_ARM64, GradleKpmMacosArm64Variant::class.java, ::GradleKpmMacosArm64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmLinuxArm64Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmLinuxArm64Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.LINUX_ARM64,
|
||||
@@ -505,20 +505,20 @@ open class KpmLinuxArm64Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.LINUX_ARM64, KpmLinuxArm64Variant::class.java, ::KpmLinuxArm64Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.LINUX_ARM64, GradleKpmLinuxArm64Variant::class.java, ::GradleKpmLinuxArm64Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmLinuxArm32HfpVariant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmLinuxArm32HfpVariant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.LINUX_ARM32_HFP,
|
||||
@@ -528,20 +528,20 @@ open class KpmLinuxArm32HfpVariant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.LINUX_ARM32_HFP, KpmLinuxArm32HfpVariant::class.java, ::KpmLinuxArm32HfpVariant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.LINUX_ARM32_HFP, GradleKpmLinuxArm32HfpVariant::class.java, ::GradleKpmLinuxArm32HfpVariant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmLinuxMips32Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmLinuxMips32Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.LINUX_MIPS32,
|
||||
@@ -551,20 +551,20 @@ open class KpmLinuxMips32Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.LINUX_MIPS32, KpmLinuxMips32Variant::class.java, ::KpmLinuxMips32Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.LINUX_MIPS32, GradleKpmLinuxMips32Variant::class.java, ::GradleKpmLinuxMips32Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmLinuxMipsel32Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmLinuxMipsel32Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.LINUX_MIPSEL32,
|
||||
@@ -574,20 +574,20 @@ open class KpmLinuxMipsel32Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.LINUX_MIPSEL32, KpmLinuxMipsel32Variant::class.java, ::KpmLinuxMipsel32Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.LINUX_MIPSEL32, GradleKpmLinuxMipsel32Variant::class.java, ::GradleKpmLinuxMipsel32Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class KpmWasm32Variant @Inject constructor(
|
||||
containingModule: KpmGradleModule,
|
||||
open class GradleKpmWasm32Variant @Inject constructor(
|
||||
containingModule: GradleKpmModule,
|
||||
fragmentName: String,
|
||||
dependencyConfigurations: KotlinFragmentDependencyConfigurations,
|
||||
dependencyConfigurations: GradleKpmFragmentDependencyConfigurations,
|
||||
compileDependencyConfiguration: Configuration,
|
||||
apiElementsConfiguration: Configuration,
|
||||
hostSpecificMetadataElementsConfiguration: Configuration?
|
||||
) : KpmNativeVariantInternal(
|
||||
) : GradleKpmNativeVariantInternal(
|
||||
containingModule = containingModule,
|
||||
fragmentName = fragmentName,
|
||||
konanTarget = KonanTarget.WASM32,
|
||||
@@ -597,67 +597,67 @@ open class KpmWasm32Variant @Inject constructor(
|
||||
hostSpecificMetadataElementsConfiguration = hostSpecificMetadataElementsConfiguration
|
||||
) {
|
||||
companion object {
|
||||
val constructor = KotlinNativeVariantConstructor(
|
||||
KonanTarget.WASM32, KpmWasm32Variant::class.java, ::KpmWasm32Variant
|
||||
val constructor = GradleKpmNativeVariantConstructor(
|
||||
KonanTarget.WASM32, GradleKpmWasm32Variant::class.java, ::GradleKpmWasm32Variant
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
internal val allKpmNativeVariantConstructors = listOf(
|
||||
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
|
||||
GradleKpmAndroidNativeX64Variant.constructor,
|
||||
GradleKpmAndroidNativeX86Variant.constructor,
|
||||
GradleKpmAndroidNativeArm32Variant.constructor,
|
||||
GradleKpmAndroidNativeArm64Variant.constructor,
|
||||
GradleKpmIosArm32Variant.constructor,
|
||||
GradleKpmIosArm64Variant.constructor,
|
||||
GradleKpmIosX64Variant.constructor,
|
||||
GradleKpmIosSimulatorArm64Variant.constructor,
|
||||
GradleKpmWatchosArm32Variant.constructor,
|
||||
GradleKpmWatchosArm64Variant.constructor,
|
||||
GradleKpmWatchosX86Variant.constructor,
|
||||
GradleKpmWatchosX64Variant.constructor,
|
||||
GradleKpmWatchosSimulatorArm64Variant.constructor,
|
||||
GradleKpmTvosArm64Variant.constructor,
|
||||
GradleKpmTvosX64Variant.constructor,
|
||||
GradleKpmTvosSimulatorArm64Variant.constructor,
|
||||
GradleKpmLinuxX64Variant.constructor,
|
||||
GradleKpmMingwX86Variant.constructor,
|
||||
GradleKpmMingwX64Variant.constructor,
|
||||
GradleKpmMacosX64Variant.constructor,
|
||||
GradleKpmMacosArm64Variant.constructor,
|
||||
GradleKpmLinuxArm64Variant.constructor,
|
||||
GradleKpmLinuxArm32HfpVariant.constructor,
|
||||
GradleKpmLinuxMips32Variant.constructor,
|
||||
GradleKpmLinuxMipsel32Variant.constructor,
|
||||
GradleKpmWasm32Variant.constructor
|
||||
)
|
||||
|
||||
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
|
||||
internal fun kpmNativeVariantClass(konanTarget: KonanTarget): Class<out GradleKpmNativeVariantInternal>? = when (konanTarget) {
|
||||
KonanTarget.ANDROID_X64 -> GradleKpmAndroidNativeX64Variant::class.java
|
||||
KonanTarget.ANDROID_X86 -> GradleKpmAndroidNativeX86Variant::class.java
|
||||
KonanTarget.ANDROID_ARM32 -> GradleKpmAndroidNativeArm32Variant::class.java
|
||||
KonanTarget.ANDROID_ARM64 -> GradleKpmAndroidNativeArm64Variant::class.java
|
||||
KonanTarget.IOS_ARM32 -> GradleKpmIosArm32Variant::class.java
|
||||
KonanTarget.IOS_ARM64 -> GradleKpmIosArm64Variant::class.java
|
||||
KonanTarget.IOS_X64 -> GradleKpmIosX64Variant::class.java
|
||||
KonanTarget.IOS_SIMULATOR_ARM64 -> GradleKpmIosSimulatorArm64Variant::class.java
|
||||
KonanTarget.WATCHOS_ARM32 -> GradleKpmWatchosArm32Variant::class.java
|
||||
KonanTarget.WATCHOS_ARM64 -> GradleKpmWatchosArm64Variant::class.java
|
||||
KonanTarget.WATCHOS_X86 -> GradleKpmWatchosX86Variant::class.java
|
||||
KonanTarget.WATCHOS_X64 -> GradleKpmWatchosX64Variant::class.java
|
||||
KonanTarget.WATCHOS_SIMULATOR_ARM64 -> GradleKpmWatchosSimulatorArm64Variant::class.java
|
||||
KonanTarget.TVOS_ARM64 -> GradleKpmTvosArm64Variant::class.java
|
||||
KonanTarget.TVOS_X64 -> GradleKpmTvosX64Variant::class.java
|
||||
KonanTarget.TVOS_SIMULATOR_ARM64 -> GradleKpmTvosSimulatorArm64Variant::class.java
|
||||
KonanTarget.LINUX_X64 -> GradleKpmLinuxX64Variant::class.java
|
||||
KonanTarget.MINGW_X86 -> GradleKpmMingwX86Variant::class.java
|
||||
KonanTarget.MINGW_X64 -> GradleKpmMingwX64Variant::class.java
|
||||
KonanTarget.MACOS_X64 -> GradleKpmMacosX64Variant::class.java
|
||||
KonanTarget.MACOS_ARM64 -> GradleKpmMacosArm64Variant::class.java
|
||||
KonanTarget.LINUX_ARM64 -> GradleKpmLinuxArm64Variant::class.java
|
||||
KonanTarget.LINUX_ARM32_HFP -> GradleKpmLinuxArm32HfpVariant::class.java
|
||||
KonanTarget.LINUX_MIPS32 -> GradleKpmLinuxMips32Variant::class.java
|
||||
KonanTarget.LINUX_MIPSEL32 -> GradleKpmLinuxMipsel32Variant::class.java
|
||||
KonanTarget.WASM32 -> GradleKpmWasm32Variant::class.java
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
+13
-13
@@ -13,16 +13,16 @@ import org.jetbrains.kotlin.gradle.dsl.topLevelExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
import org.jetbrains.kotlin.project.model.KpmModuleIdentifier
|
||||
|
||||
internal interface KpmGradleProjectModelContainer {
|
||||
val modules: NamedDomainObjectContainer<KpmGradleModule>
|
||||
internal interface GradleKpmProjectModelContainer {
|
||||
val modules: NamedDomainObjectContainer<GradleKpmModule>
|
||||
val metadataCompilationRegistryByModuleId: MutableMap<KpmModuleIdentifier, MetadataCompilationRegistry>
|
||||
val rootPublication: MavenPublication?
|
||||
}
|
||||
|
||||
internal val Project.kpmModelContainer: KpmGradleProjectModelContainer
|
||||
internal val Project.kpmModelContainer: GradleKpmProjectModelContainer
|
||||
get() = kpmModelContainerOrNull ?: error("Couldn't find KPM container for $project")
|
||||
|
||||
internal val Project.kpmModelContainerOrNull: KpmGradleProjectModelContainer?
|
||||
internal val Project.kpmModelContainerOrNull: GradleKpmProjectModelContainer?
|
||||
get() = when (val ext = project.topLevelExtensionOrNull) {
|
||||
is KotlinPm20ProjectExtension -> ext.kpmModelContainer
|
||||
is KotlinProjectExtension -> if (PropertiesProvider(project).experimentalKpmModelMapping) ext.kpmModelContainer else null
|
||||
@@ -32,27 +32,27 @@ internal val Project.kpmModelContainerOrNull: KpmGradleProjectModelContainer?
|
||||
internal val Project.hasKpmModel: Boolean
|
||||
get() = kpmModelContainerOrNull != null
|
||||
|
||||
internal val Project.kpmModules: NamedDomainObjectContainer<KpmGradleModule>
|
||||
internal val Project.kpmModules: NamedDomainObjectContainer<GradleKpmModule>
|
||||
get() = kpmModelContainer.modules
|
||||
|
||||
internal val Project.metadataCompilationRegistryByModuleId: MutableMap<KpmModuleIdentifier, MetadataCompilationRegistry>
|
||||
get() = kpmModelContainer.metadataCompilationRegistryByModuleId
|
||||
|
||||
internal class DefaultKpmGradleProjectModelContainer(
|
||||
override val modules: NamedDomainObjectContainer<KpmGradleModule>,
|
||||
internal class GradleKpmDefaultProjectModelContainer(
|
||||
override val modules: NamedDomainObjectContainer<GradleKpmModule>,
|
||||
override val metadataCompilationRegistryByModuleId: MutableMap<KpmModuleIdentifier, MetadataCompilationRegistry>,
|
||||
) : KpmGradleProjectModelContainer {
|
||||
) : GradleKpmProjectModelContainer {
|
||||
override var rootPublication: MavenPublication? = null
|
||||
|
||||
companion object {
|
||||
fun create(project: Project): DefaultKpmGradleProjectModelContainer {
|
||||
return DefaultKpmGradleProjectModelContainer(createKpmModulesContainer(project), mutableMapOf())
|
||||
fun create(project: Project): GradleKpmDefaultProjectModelContainer {
|
||||
return GradleKpmDefaultProjectModelContainer(createKpmModulesContainer(project), mutableMapOf())
|
||||
}
|
||||
|
||||
private fun createKpmModulesContainer(project: Project): NamedDomainObjectContainer<KpmGradleModule> =
|
||||
private fun createKpmModulesContainer(project: Project): NamedDomainObjectContainer<GradleKpmModule> =
|
||||
project.objects.domainObjectContainer(
|
||||
KpmGradleModule::class.java,
|
||||
KotlinGradleModuleFactory(project)
|
||||
GradleKpmModule::class.java,
|
||||
GradleKpmModuleFactory(project)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+17
-17
@@ -29,15 +29,15 @@ 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 open class GradleKpmLegacyMappedVariant(
|
||||
internal val compilation: KotlinCompilation<*>,
|
||||
) : KpmGradleVariant {
|
||||
) : GradleKpmVariant {
|
||||
override fun toString(): String = "variant mapped to $compilation"
|
||||
|
||||
private val fragmentForDefaultSourceSet =
|
||||
(compilation.defaultSourceSet as FragmentMappedKotlinSourceSet).underlyingFragment
|
||||
|
||||
override val containingModule: KpmGradleModule get() = fragmentForDefaultSourceSet.containingModule
|
||||
override val containingModule: GradleKpmModule get() = fragmentForDefaultSourceSet.containingModule
|
||||
|
||||
override val platformType: KotlinPlatformType
|
||||
get() = compilation.platformType
|
||||
@@ -89,11 +89,11 @@ internal open class LegacyMappedVariant(
|
||||
|
||||
override val extras: MutableExtras = mutableExtrasOf()
|
||||
|
||||
override fun refines(other: KpmGradleFragment) {
|
||||
override fun refines(other: GradleKpmFragment) {
|
||||
fragmentForDefaultSourceSet.refines(other)
|
||||
}
|
||||
|
||||
override fun refines(other: NamedDomainObjectProvider<KpmGradleFragment>) {
|
||||
override fun refines(other: NamedDomainObjectProvider<GradleKpmFragment>) {
|
||||
fragmentForDefaultSourceSet.refines(other)
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ internal open class LegacyMappedVariant(
|
||||
override val fragmentName: String
|
||||
get() = fragmentForDefaultSourceSet.fragmentName + "Variant"
|
||||
|
||||
override val declaredRefinesDependencies: Iterable<KpmGradleFragment>
|
||||
override val declaredRefinesDependencies: Iterable<GradleKpmFragment>
|
||||
get() = fragmentForDefaultSourceSet.declaredRefinesDependencies
|
||||
|
||||
override val declaredModuleDependencies: Iterable<KpmModuleDependency>
|
||||
@@ -148,9 +148,9 @@ internal open class LegacyMappedVariant(
|
||||
}
|
||||
}
|
||||
|
||||
internal class LegacyMappedVariantWithRuntime(private val compilationWithRuntime: KotlinCompilationToRunnableFiles<*>) :
|
||||
LegacyMappedVariant(compilationWithRuntime),
|
||||
KpmGradleVariantWithRuntime {
|
||||
internal class GradleKpmLegacyMappedVariantWithRuntime(private val compilationWithRuntime: KotlinCompilationToRunnableFiles<*>) :
|
||||
GradleKpmLegacyMappedVariant(compilationWithRuntime),
|
||||
GradleKpmVariantWithRuntime {
|
||||
|
||||
override val runtimeDependenciesConfiguration: Configuration
|
||||
get() = project.configurations.getByName(compilationWithRuntime.runtimeDependencyConfigurationName)
|
||||
@@ -177,8 +177,8 @@ internal enum class PublicationRegistrationMode {
|
||||
internal fun mapTargetCompilationsToKpmVariants(target: AbstractKotlinTarget, publicationRegistration: PublicationRegistrationMode) {
|
||||
target.compilations.all { compilation ->
|
||||
val variant = if (compilation is KotlinCompilationToRunnableFiles)
|
||||
LegacyMappedVariantWithRuntime(compilation)
|
||||
else LegacyMappedVariant(compilation)
|
||||
GradleKpmLegacyMappedVariantWithRuntime(compilation)
|
||||
else GradleKpmLegacyMappedVariant(compilation)
|
||||
|
||||
val defaultSourceSetFragment = (compilation.defaultSourceSet as FragmentMappedKotlinSourceSet).underlyingFragment
|
||||
variant.refines(defaultSourceSetFragment)
|
||||
@@ -194,9 +194,9 @@ internal fun mapTargetCompilationsToKpmVariants(target: AbstractKotlinTarget, pu
|
||||
}
|
||||
|
||||
whenPublicationShouldRegister {
|
||||
val mainModule = target.project.kpmModules.getByName(KpmGradleModule.MAIN_MODULE_NAME)
|
||||
val mainModule = target.project.kpmModules.getByName(GradleKpmModule.MAIN_MODULE_NAME)
|
||||
target.kotlinComponents.forEach { kotlinComponent ->
|
||||
val moduleHolder = DefaultSingleMavenPublishedModuleHolder(
|
||||
val moduleHolder = GradleKpmDefaultSingleMavenPublishedModuleHolder(
|
||||
mainModule,
|
||||
kotlinComponent.defaultArtifactId.removePrefix(target.project.name.toLowerCase() + "-")
|
||||
)
|
||||
@@ -220,16 +220,16 @@ internal fun mapTargetCompilationsToKpmVariants(target: AbstractKotlinTarget, pu
|
||||
|
||||
// FIXME: include additional variants into project structure metadata?
|
||||
|
||||
val request = BasicPlatformPublicationToMavenRequest(
|
||||
val request = GradleKpmBasicPlatformPublicationToMavenRequest(
|
||||
kotlinComponent.name,
|
||||
mainModule,
|
||||
moduleHolder,
|
||||
usages.map { usage ->
|
||||
val variant = mainModule.variants.withType<LegacyMappedVariant>().single {
|
||||
val variant = mainModule.variants.withType<GradleKpmLegacyMappedVariant>().single {
|
||||
it.compilation == usage.compilation
|
||||
}
|
||||
(usage as? DefaultKotlinUsageContext) ?: error("unexpected KotlinUsageContext type: ${usage.javaClass}")
|
||||
AdvancedVariantPublicationRequest(
|
||||
KpmGradleAdvancedConfigurationPublicationRequest(
|
||||
variant,
|
||||
target.project.configurations.getByName(usage.dependencyConfigurationName),
|
||||
usage.overrideConfigurationAttributes,
|
||||
@@ -239,7 +239,7 @@ internal fun mapTargetCompilationsToKpmVariants(target: AbstractKotlinTarget, pu
|
||||
}
|
||||
)
|
||||
|
||||
VariantPublishingConfigurator.get(target.project).configurePublishing(request)
|
||||
GradleKpmVariantPublishingConfigurator.get(target.project).configurePublishing(request)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user