Rewrite the checks for the presence of KPM: adapt them to mapped models
This commit is contained in:
+6
-7
@@ -124,7 +124,7 @@ class GradleProjectModuleBuilder(private val addInferredSourceSetVisibilityAsExp
|
||||
private fun getModulesFromPm20Project(project: Project) = project.kpmModules.toList()
|
||||
|
||||
fun buildModulesFromProject(project: Project): List<KotlinModule> {
|
||||
if (project.topLevelExtension is KotlinPm20ProjectExtension)
|
||||
if (project.hasKpmModel)
|
||||
return getModulesFromPm20Project(project)
|
||||
|
||||
val extension = project.multiplatformExtensionOrNull
|
||||
@@ -313,8 +313,11 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
|
||||
}
|
||||
|
||||
private fun getCompileDependenciesConfigurationForVariant(project: Project, requestingVariant: KotlinModuleVariant): Configuration =
|
||||
when (project.topLevelExtension) {
|
||||
is KotlinMultiplatformExtension, is KotlinSingleTargetExtension -> {
|
||||
when {
|
||||
project.hasKpmModel -> {
|
||||
(requestingVariant as KotlinGradleVariant).compileDependenciesConfiguration
|
||||
}
|
||||
else -> {
|
||||
val targets =
|
||||
project.multiplatformExtensionOrNull?.targets ?: listOf((project.kotlinExtension as KotlinSingleTargetExtension).target)
|
||||
|
||||
@@ -333,10 +336,6 @@ class GradleModuleVariantResolver : ModuleVariantResolver {
|
||||
|
||||
project.configurations.getByName(compilation.compileDependencyConfigurationName)
|
||||
}
|
||||
is KotlinPm20ProjectExtension -> {
|
||||
(requestingVariant as KotlinGradleVariant).compileDependenciesConfiguration
|
||||
}
|
||||
else -> error("could not find the compile dependencies configuration for variant $requestingVariant")
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
+2
-4
@@ -14,9 +14,8 @@ import org.gradle.api.tasks.Input
|
||||
import org.gradle.api.tasks.Internal
|
||||
import org.gradle.api.tasks.Nested
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.dsl.topLevelExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.refinesClosure
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope
|
||||
@@ -141,8 +140,7 @@ data class KotlinProjectStructureMetadata(
|
||||
}
|
||||
|
||||
internal fun buildKotlinProjectStructureMetadata(project: Project): KotlinProjectStructureMetadata? {
|
||||
val topLevelExtensionOrNull = project.topLevelExtensionOrNull
|
||||
require(topLevelExtensionOrNull !is KotlinPm20ProjectExtension) { "this function only works with the stable plugin" }
|
||||
require(!project.hasKpmModel) { "this function only works with the stable plugin" }
|
||||
|
||||
val sourceSetsWithMetadataCompilations =
|
||||
project.multiplatformExtensionOrNull?.targets?.getByName(KotlinMultiplatformPlugin.METADATA_TARGET_NAME)?.compilations?.associate {
|
||||
|
||||
+9
-9
@@ -77,20 +77,20 @@ internal object ModuleIds {
|
||||
check(moduleIdentifier.buildId == thisProject.currentBuildId().name)
|
||||
val dependencyProject = thisProject.project(moduleIdentifier.projectId)
|
||||
val topLevelExtension = dependencyProject.topLevelExtension
|
||||
val getRootPublication: () -> MavenPublication? = when (topLevelExtension) {
|
||||
is KotlinMultiplatformExtension -> {
|
||||
{ topLevelExtension.rootSoftwareComponent.publicationDelegate }
|
||||
val getRootPublication: () -> MavenPublication? = when {
|
||||
dependencyProject.hasKpmModel -> {
|
||||
{ dependencyProject.kpmModelContainer.rootPublication }
|
||||
}
|
||||
is KotlinPm20ProjectExtension -> {
|
||||
{ topLevelExtension.rootPublication }
|
||||
topLevelExtension is KotlinMultiplatformExtension -> {
|
||||
{ topLevelExtension.rootSoftwareComponent.publicationDelegate }
|
||||
}
|
||||
else -> error("unexpected top-level extension $topLevelExtension")
|
||||
}
|
||||
val capabilities = when (topLevelExtension) {
|
||||
is KotlinMultiplatformExtension -> emptyList()
|
||||
is KotlinPm20ProjectExtension -> listOfNotNull(ComputedCapability.capabilityStringFromModule(
|
||||
topLevelExtension.modules.single { it.moduleIdentifier == moduleIdentifier }
|
||||
val capabilities = when {
|
||||
dependencyProject.hasKpmModel -> listOfNotNull(ComputedCapability.capabilityStringFromModule(
|
||||
dependencyProject.kpmModules.single { it.moduleIdentifier == moduleIdentifier }
|
||||
))
|
||||
topLevelExtension is KotlinMultiplatformExtension -> emptyList()
|
||||
else -> error("unexpected top-level extension $topLevelExtension")
|
||||
}
|
||||
val coordinatesProvider = MavenPublicationCoordinatesProvider(
|
||||
|
||||
+6
-4
@@ -10,6 +10,8 @@ import org.gradle.api.artifacts.component.ProjectComponentIdentifier
|
||||
import org.gradle.api.artifacts.result.ResolvedComponentResult
|
||||
import org.jetbrains.kotlin.gradle.dsl.topLevelExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules
|
||||
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier
|
||||
import java.io.File
|
||||
import java.io.InputStream
|
||||
@@ -28,11 +30,11 @@ internal class ProjectMppDependencyProjectStructureMetadataExtractor(
|
||||
) : MppDependencyProjectStructureMetadataExtractor() {
|
||||
|
||||
override fun getProjectStructureMetadata(): KotlinProjectStructureMetadata? {
|
||||
return when (val topLevelExtension = dependencyProject.topLevelExtensionOrNull) {
|
||||
is KotlinPm20ProjectExtension -> buildProjectStructureMetadata(
|
||||
topLevelExtension.modules.single { it.moduleIdentifier == moduleIdentifier }
|
||||
return when {
|
||||
dependencyProject.topLevelExtensionOrNull == null -> null
|
||||
dependencyProject.hasKpmModel -> buildProjectStructureMetadata(
|
||||
dependencyProject.kpmModules.single { it.moduleIdentifier == moduleIdentifier }
|
||||
)
|
||||
null -> null
|
||||
else -> buildKotlinProjectStructureMetadata(dependencyProject)
|
||||
}
|
||||
}
|
||||
|
||||
+13
-9
@@ -9,8 +9,11 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.topLevelExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.topLevelExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.ProjectMetadataProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.kpmModules
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.metadataCompilationRegistryByModuleId
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
||||
import org.jetbrains.kotlin.project.model.KotlinModuleIdentifier
|
||||
|
||||
@@ -26,17 +29,18 @@ private class ProjectMetadataProviderImpl(
|
||||
private val moduleIdentifier: KotlinModuleIdentifier
|
||||
) : ProjectMetadataProvider() {
|
||||
override fun getSourceSetCompiledMetadata(sourceSetName: String): FileCollection {
|
||||
return when (val projectExtension = dependencyProject.topLevelExtension) {
|
||||
is KotlinMultiplatformExtension -> projectExtension.targets.getByName(KotlinMultiplatformPlugin.METADATA_TARGET_NAME).compilations
|
||||
.firstOrNull { it.name == sourceSetName }
|
||||
?.output?.classesDirs ?: dependencyProject.files()
|
||||
|
||||
is KotlinPm20ProjectExtension -> {
|
||||
val projectExtension = dependencyProject.topLevelExtensionOrNull
|
||||
return when {
|
||||
dependencyProject.hasKpmModel -> {
|
||||
val moduleId = moduleIdentifier
|
||||
val module = projectExtension.modules.single { it.moduleIdentifier == moduleId }
|
||||
val metadataCompilationRegistry = projectExtension.metadataCompilationRegistryByModuleId.getValue(moduleId)
|
||||
val module = dependencyProject.kpmModules.single { it.moduleIdentifier == moduleId }
|
||||
val metadataCompilationRegistry = dependencyProject.metadataCompilationRegistryByModuleId.getValue(moduleId)
|
||||
metadataCompilationRegistry.byFragment(module.fragments.getByName(sourceSetName)).output.classesDirs
|
||||
}
|
||||
projectExtension is KotlinMultiplatformExtension ->
|
||||
projectExtension.targets.getByName(KotlinMultiplatformPlugin.METADATA_TARGET_NAME).compilations
|
||||
.firstOrNull { it.name == sourceSetName }
|
||||
?.output?.classesDirs ?: dependencyProject.files()
|
||||
else -> error("unexpected top-level Kotlin extension $projectExtension")
|
||||
}
|
||||
}
|
||||
|
||||
+2
-3
@@ -10,7 +10,6 @@ import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.artifacts.result.ResolvedComponentResult
|
||||
import org.gradle.api.artifacts.result.ResolvedDependencyResult
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.topLevelExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.resolvableMetadataConfiguration
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
|
||||
import org.jetbrains.kotlin.project.model.*
|
||||
@@ -20,8 +19,8 @@ internal fun resolvableMetadataConfiguration(
|
||||
) = module.project.configurations.getByName(module.resolvableMetadataConfigurationName)
|
||||
|
||||
internal fun configurationToResolveMetadataDependencies(project: Project, requestingModule: KotlinModule): Configuration =
|
||||
when (project.topLevelExtension) {
|
||||
is KotlinPm20ProjectExtension -> resolvableMetadataConfiguration(requestingModule as KotlinGradleModule)
|
||||
when {
|
||||
project.hasKpmModel -> resolvableMetadataConfiguration(requestingModule as KotlinGradleModule)
|
||||
else -> resolvableMetadataConfiguration(
|
||||
project,
|
||||
project.kotlinExtension.sourceSets, // take dependencies from all source sets; TODO introduce consistency scopes?
|
||||
|
||||
+3
-3
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.CompilationSourceSetUtil.compilationsBySourceSets
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinNativeFragmentMetadataCompilationData
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
||||
@@ -38,14 +38,14 @@ internal const val ALL_COMPILE_METADATA_CONFIGURATION_NAME = "allSourceSetsCompi
|
||||
internal const val ALL_RUNTIME_METADATA_CONFIGURATION_NAME = "allSourceSetsRuntimeDependenciesMetadata"
|
||||
|
||||
internal val Project.isKotlinGranularMetadataEnabled: Boolean
|
||||
get() = project.topLevelExtension is KotlinPm20ProjectExtension || with(PropertiesProvider(rootProject)) {
|
||||
get() = project.hasKpmModel || with(PropertiesProvider(rootProject)) {
|
||||
mppHierarchicalStructureByDefault || // then we want to use KLIB granular compilation & artifacts even if it's just commonMain
|
||||
hierarchicalStructureSupport ||
|
||||
enableGranularSourceSetsMetadata == true
|
||||
}
|
||||
|
||||
internal val Project.shouldCompileIntermediateSourceSetsToMetadata: Boolean
|
||||
get() = project.topLevelExtension is KotlinPm20ProjectExtension || with(PropertiesProvider(rootProject)) {
|
||||
get() = project.hasKpmModel || with(PropertiesProvider(rootProject)) {
|
||||
when {
|
||||
!hierarchicalStructureSupport && mppHierarchicalStructureByDefault -> false
|
||||
else -> true
|
||||
|
||||
Reference in New Issue
Block a user