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