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 module = dependencyProject.kpmModules.single { it.moduleIdentifier == 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.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.kotlinExtension
|
||||
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.KotlinJsSubTargetDsl
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatCompilationResolverPlugin
|
||||
@@ -92,7 +93,9 @@ abstract class AbstractKotlinTarget(
|
||||
}
|
||||
|
||||
override val components: Set<SoftwareComponent> by lazy {
|
||||
buildAdhocComponentsFromKotlinVariants(kotlinComponents)
|
||||
if (!project.hasKpmModel) {
|
||||
buildAdhocComponentsFromKotlinVariants(kotlinComponents)
|
||||
} else emptySet()
|
||||
}
|
||||
|
||||
private fun buildAdhocComponentsFromKotlinVariants(kotlinVariants: Set<KotlinTargetComponent>): Set<SoftwareComponent> {
|
||||
|
||||
+20
-6
@@ -60,7 +60,13 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : Kotlin
|
||||
createMetadataDependencyTransformationClasspath(
|
||||
project,
|
||||
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
|
||||
)
|
||||
}
|
||||
@@ -90,7 +96,9 @@ internal abstract class AbstractKotlinFragmentMetadataCompilationData<T : Kotlin
|
||||
get() = metadataCompilationRegistry.run {
|
||||
fragment.refinesClosure.minus(fragment)
|
||||
.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 {
|
||||
|
||||
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()
|
||||
}
|
||||
@@ -121,7 +133,9 @@ interface KotlinNativeFragmentMetadataCompilationData :
|
||||
KotlinNativeCompilationData<KotlinCommonOptions>
|
||||
|
||||
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 =
|
||||
this in getHostSpecificFragments(containingModule)
|
||||
@@ -186,8 +200,8 @@ internal class MetadataCompilationRegistry {
|
||||
withAllNativeCallbacks.forEach { it.invoke(compilationData) }
|
||||
}
|
||||
|
||||
fun byFragment(fragment: KotlinGradleFragment): KotlinMetadataCompilationData<*> =
|
||||
listOf(commonCompilationDataPerFragment.getValue(fragment), nativeCompilationDataPerFragment.getValue(fragment)).single {
|
||||
fun getForFragmentOrNull(fragment: KotlinGradleFragment): KotlinMetadataCompilationData<*>? =
|
||||
listOf(commonCompilationDataPerFragment.getValue(fragment), nativeCompilationDataPerFragment.getValue(fragment)).singleOrNull {
|
||||
it.isActive
|
||||
}
|
||||
|
||||
|
||||
-1
@@ -44,7 +44,6 @@ class FragmentMappedKotlinSourceSet(
|
||||
|
||||
override val languageSettings: LanguageSettingsBuilder = underlyingFragment.languageSettings
|
||||
|
||||
// FIXME: not supported yet
|
||||
override val resources: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name resources")
|
||||
|
||||
override fun kotlin(configureClosure: Closure<Any?>): SourceDirectorySet =
|
||||
|
||||
+3
-1
@@ -73,7 +73,9 @@ abstract class KotlinCompileCommon @Inject constructor(
|
||||
val fragment = compilation.fragment
|
||||
project.files(
|
||||
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