[Gradle] Update setupGeneralKotlinExtensionParameters to work correctly
with KGP lifecycles. It is unknown whether given source set is in main compilation or not until certain lifecycle stage (AfterFinaliseRefinesEdges) Therefore, configuring kotlin extension parameters that should be delayed. ^KT-59063
This commit is contained in:
committed by
Space Team
parent
46844100d5
commit
b097292ddf
+15
-21
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
|
import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchy.SourceSetTree
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.kotlinIdeMultiplatformImport
|
import org.jetbrains.kotlin.gradle.plugin.ide.kotlinIdeMultiplatformImport
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.locateOrRegisterIdeResolveDependenciesTask
|
import org.jetbrains.kotlin.gradle.plugin.ide.locateOrRegisterIdeResolveDependenciesTask
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin.Companion.sourceSetFreeCompilerArgsPropertyName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin.Companion.sourceSetFreeCompilerArgsPropertyName
|
||||||
@@ -27,6 +28,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.internal.runDeprecationDiagnostics
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.copyAttributes
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.copyAttributes
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.orNull
|
import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.orNull
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
|
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.sources.awaitPlatformCompilations
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.checkSourceSetVisibilityRequirements
|
import org.jetbrains.kotlin.gradle.plugin.sources.checkSourceSetVisibilityRequirements
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||||
@@ -181,7 +183,7 @@ class KotlinMultiplatformPlugin : Plugin<Project> {
|
|||||||
if (project.multiplatformExtension.internalKotlinTargetHierarchy.appliedDescriptors.isNotEmpty()) return@launchInStage
|
if (project.multiplatformExtension.internalKotlinTargetHierarchy.appliedDescriptors.isNotEmpty()) return@launchInStage
|
||||||
|
|
||||||
target.compilations.forEach { compilation ->
|
target.compilations.forEach { compilation ->
|
||||||
val sourceSetTree = KotlinTargetHierarchy.SourceSetTree.orNull(compilation) ?: return@forEach
|
val sourceSetTree = SourceSetTree.orNull(compilation) ?: return@forEach
|
||||||
val commonSourceSet = sourceSets.findByName(lowerCamelCaseName("common", sourceSetTree.name)) ?: return@forEach
|
val commonSourceSet = sourceSets.findByName(lowerCamelCaseName("common", sourceSetTree.name)) ?: return@forEach
|
||||||
compilation.defaultSourceSet.dependsOn(commonSourceSet)
|
compilation.defaultSourceSet.dependsOn(commonSourceSet)
|
||||||
}
|
}
|
||||||
@@ -320,30 +322,22 @@ internal fun sourcesJarTaskNamed(
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun Project.setupGeneralKotlinExtensionParameters() {
|
internal fun Project.setupGeneralKotlinExtensionParameters() {
|
||||||
val sourceSetsInMainCompilation by lazy {
|
project.launch {
|
||||||
kotlinExtension.sourceSets.filter { sourceSet ->
|
for (sourceSet in kotlinExtension.awaitSourceSets()) {
|
||||||
sourceSet.internal.compilations.any {
|
val languageSettings = sourceSet.languageSettings
|
||||||
// kotlin main compilation
|
if (languageSettings !is DefaultLanguageSettingsBuilder) continue
|
||||||
it.isMain()
|
|
||||||
// android compilation which is NOT in tested variant
|
|
||||||
|| (it as? KotlinJvmAndroidCompilation)?.let { getTestedVariantData(it.androidVariant) == null } == true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlinExtension.sourceSets.all { sourceSet ->
|
val isMainSourceSet = sourceSet
|
||||||
(sourceSet.languageSettings as? DefaultLanguageSettingsBuilder)?.run {
|
.internal
|
||||||
|
.awaitPlatformCompilations()
|
||||||
|
.any { SourceSetTree.orNull(it) == SourceSetTree.main }
|
||||||
|
|
||||||
explicitApi = project.providers.provider {
|
languageSettings.explicitApi = project.providers.provider {
|
||||||
val explicitApiFlag = project.kotlinExtension.explicitApiModeAsCompilerArg()
|
val explicitApiFlag = project.kotlinExtension.explicitApiModeAsCompilerArg()
|
||||||
if (explicitApiFlag != null && sourceSet in sourceSetsInMainCompilation) {
|
explicitApiFlag.takeIf { isMainSourceSet }
|
||||||
explicitApiFlag
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Set ad-hoc free compiler args from the internal project property
|
|
||||||
freeCompilerArgsProvider = project.provider {
|
languageSettings.freeCompilerArgsProvider = project.provider {
|
||||||
val propertyValue = with(project.extensions.extraProperties) {
|
val propertyValue = with(project.extensions.extraProperties) {
|
||||||
val sourceSetFreeCompilerArgsPropertyName = sourceSetFreeCompilerArgsPropertyName(sourceSet.name)
|
val sourceSetFreeCompilerArgsPropertyName = sourceSetFreeCompilerArgsPropertyName(sourceSet.name)
|
||||||
if (has(sourceSetFreeCompilerArgsPropertyName)) {
|
if (has(sourceSetFreeCompilerArgsPropertyName)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user