KPM/Gradle: disable metadata compilations for JVM & JS shared fragments
This commit is contained in:
+2
-1
@@ -35,7 +35,8 @@ private class ProjectMetadataProviderImpl(
|
|||||||
val moduleId = moduleIdentifier
|
val moduleId = moduleIdentifier
|
||||||
val module = dependencyProject.kpmModules.single { it.moduleIdentifier == moduleId }
|
val module = dependencyProject.kpmModules.single { it.moduleIdentifier == moduleId }
|
||||||
val metadataCompilationRegistry = dependencyProject.metadataCompilationRegistryByModuleId.getValue(moduleId)
|
val metadataCompilationRegistry = dependencyProject.metadataCompilationRegistryByModuleId.getValue(moduleId)
|
||||||
metadataCompilationRegistry.byFragment(module.fragments.getByName(sourceSetName)).output.classesDirs
|
metadataCompilationRegistry.getForFragmentOrNull(module.fragments.getByName(sourceSetName))?.output?.classesDirs
|
||||||
|
?: dependencyProject.files()
|
||||||
}
|
}
|
||||||
projectExtension is KotlinMultiplatformExtension ->
|
projectExtension is KotlinMultiplatformExtension ->
|
||||||
projectExtension.targets.getByName(KotlinMultiplatformPlugin.METADATA_TARGET_NAME).compilations
|
projectExtension.targets.getByName(KotlinMultiplatformPlugin.METADATA_TARGET_NAME).compilations
|
||||||
|
|||||||
+4
-1
@@ -29,6 +29,7 @@ import org.gradle.util.WrapUtil
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatCompilationResolverPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatCompilationResolverPlugin
|
||||||
@@ -92,7 +93,9 @@ abstract class AbstractKotlinTarget(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override val components: Set<SoftwareComponent> by lazy {
|
override val components: Set<SoftwareComponent> by lazy {
|
||||||
buildAdhocComponentsFromKotlinVariants(kotlinComponents)
|
if (!project.hasKpmModel) {
|
||||||
|
buildAdhocComponentsFromKotlinVariants(kotlinComponents)
|
||||||
|
} else emptySet()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildAdhocComponentsFromKotlinVariants(kotlinVariants: Set<KotlinTargetComponent>): Set<SoftwareComponent> {
|
private fun buildAdhocComponentsFromKotlinVariants(kotlinVariants: Set<KotlinTargetComponent>): Set<SoftwareComponent> {
|
||||||
|
|||||||
+20
-6
@@ -60,7 +60,13 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : Kotlin
|
|||||||
createMetadataDependencyTransformationClasspath(
|
createMetadataDependencyTransformationClasspath(
|
||||||
project,
|
project,
|
||||||
resolvableMetadataConfiguration(fragment.containingModule),
|
resolvableMetadataConfiguration(fragment.containingModule),
|
||||||
lazy { fragment.refinesClosure.minus(fragment).map { metadataCompilationRegistry.byFragment(it).output.classesDirs } },
|
lazy {
|
||||||
|
fragment.refinesClosure.minus(fragment).map {
|
||||||
|
val compilation = metadataCompilationRegistry.getForFragmentOrNull(it)
|
||||||
|
?: return@map project.files()
|
||||||
|
compilation.output.classesDirs
|
||||||
|
}
|
||||||
|
},
|
||||||
resolvedMetadataFiles
|
resolvedMetadataFiles
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -90,7 +96,9 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : Kotlin
|
|||||||
get() = metadataCompilationRegistry.run {
|
get() = metadataCompilationRegistry.run {
|
||||||
fragment.refinesClosure.minus(fragment)
|
fragment.refinesClosure.minus(fragment)
|
||||||
.map {
|
.map {
|
||||||
metadataCompilationRegistry.byFragment(it).output.classesDirs
|
val compilation = metadataCompilationRegistry.getForFragmentOrNull(it)
|
||||||
|
?: return@map project.files()
|
||||||
|
compilation.output.classesDirs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -111,7 +119,11 @@ internal open class KotlinCommonFragmentMetadataCompilationDataImpl(
|
|||||||
resolvedMetadataFiles), KotlinCommonFragmentMetadataCompilationData {
|
resolvedMetadataFiles), KotlinCommonFragmentMetadataCompilationData {
|
||||||
|
|
||||||
override val isActive: Boolean
|
override val isActive: Boolean
|
||||||
get() = !fragment.isNativeShared()
|
get() = !fragment.isNativeShared() &&
|
||||||
|
fragment.containingModule.variantsContainingFragment(fragment).run {
|
||||||
|
!all { it.platformType in setOf(KotlinPlatformType.androidJvm, KotlinPlatformType.jvm)} &&
|
||||||
|
!all { it.platformType == KotlinPlatformType.js }
|
||||||
|
}
|
||||||
|
|
||||||
override val kotlinOptions: KotlinMultiplatformCommonOptions = KotlinMultiplatformCommonOptionsImpl()
|
override val kotlinOptions: KotlinMultiplatformCommonOptions = KotlinMultiplatformCommonOptionsImpl()
|
||||||
}
|
}
|
||||||
@@ -121,7 +133,9 @@ interface KotlinNativeFragmentMetadataCompilationData :
|
|||||||
KotlinNativeCompilationData<KotlinCommonOptions>
|
KotlinNativeCompilationData<KotlinCommonOptions>
|
||||||
|
|
||||||
internal fun KotlinGradleFragment.isNativeShared(): Boolean =
|
internal fun KotlinGradleFragment.isNativeShared(): Boolean =
|
||||||
containingModule.variantsContainingFragment(this).all { it.platformType == KotlinPlatformType.native }
|
containingModule.variantsContainingFragment(this).run {
|
||||||
|
any() && all { it.platformType == KotlinPlatformType.native }
|
||||||
|
}
|
||||||
|
|
||||||
internal fun KotlinGradleFragment.isNativeHostSpecific(): Boolean =
|
internal fun KotlinGradleFragment.isNativeHostSpecific(): Boolean =
|
||||||
this in getHostSpecificFragments(containingModule)
|
this in getHostSpecificFragments(containingModule)
|
||||||
@@ -186,8 +200,8 @@ internal class MetadataCompilationRegistry {
|
|||||||
withAllNativeCallbacks.forEach { it.invoke(compilationData) }
|
withAllNativeCallbacks.forEach { it.invoke(compilationData) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun byFragment(fragment: KotlinGradleFragment): KotlinMetadataCompilationData<*> =
|
fun getForFragmentOrNull(fragment: KotlinGradleFragment): KotlinMetadataCompilationData<*>? =
|
||||||
listOf(commonCompilationDataPerFragment.getValue(fragment), nativeCompilationDataPerFragment.getValue(fragment)).single {
|
listOf(commonCompilationDataPerFragment.getValue(fragment), nativeCompilationDataPerFragment.getValue(fragment)).singleOrNull {
|
||||||
it.isActive
|
it.isActive
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-1
@@ -44,7 +44,6 @@ class FragmentMappedKotlinSourceSet(
|
|||||||
|
|
||||||
override val languageSettings: LanguageSettingsBuilder = underlyingFragment.languageSettings
|
override val languageSettings: LanguageSettingsBuilder = underlyingFragment.languageSettings
|
||||||
|
|
||||||
// FIXME: not supported yet
|
|
||||||
override val resources: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name resources")
|
override val resources: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name resources")
|
||||||
|
|
||||||
override fun kotlin(configureClosure: Closure<Any?>): SourceDirectorySet =
|
override fun kotlin(configureClosure: Closure<Any?>): SourceDirectorySet =
|
||||||
|
|||||||
+3
-1
@@ -73,7 +73,9 @@ abstract class KotlinCompileCommon @Inject constructor(
|
|||||||
val fragment = compilation.fragment
|
val fragment = compilation.fragment
|
||||||
project.files(
|
project.files(
|
||||||
fragment.refinesClosure.minus(fragment).map {
|
fragment.refinesClosure.minus(fragment).map {
|
||||||
compilation.metadataCompilationRegistry.byFragment(it).output.classesDirs
|
val compilation = compilation.metadataCompilationRegistry.getForFragmentOrNull(it)
|
||||||
|
?: return@map project.files()
|
||||||
|
compilation.output.classesDirs
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user