[Gradle] Disabled MissingNativeStdlibChecker when k/n toolchain enabled

This checker was added to check that k/n home was correctly overridden.
With k/n toolchain we always download k/n distribution.
That is why when k/n toolchain is enabled we don't need this check.

^KT-65624 Fixed
This commit is contained in:
Dmitrii Krasnov
2024-03-07 20:04:19 +01:00
committed by Space Team
parent 4fafa4b6e9
commit fb3c1f1a2f
@@ -5,26 +5,59 @@
package org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.provider.Property
import org.gradle.api.provider.ValueSource
import org.gradle.api.provider.ValueSourceParameters
import org.jetbrains.kotlin.commonizer.stdlib
import org.jetbrains.kotlin.compilerRunner.kotlinNativeToolchainEnabled
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectCheckerContext
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsCollector
import org.jetbrains.kotlin.gradle.plugin.internal.configurationTimePropertiesAccessor
import org.jetbrains.kotlin.gradle.plugin.internal.usedAtConfigurationTime
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
import org.jetbrains.kotlin.gradle.utils.konanDistribution
/**
* This class is made to check that kotlin native was successfully installed before the build
*/
internal object MissingNativeStdlibChecker : KotlinGradleProjectChecker {
override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) {
val targets = multiplatformExtension?.awaitTargets() ?: return
if (targets.isEmpty() || // misconfigured project
targets.none { it is KotlinNativeTarget } || // no K/N targets
project.hasProperty("kotlin.native.nostdlib") || // suppressed
project.konanDistribution.stdlib.exists()
checkThatStdlibExists().get()
) return
collector.report(project, KotlinToolingDiagnostics.NativeStdlibIsMissingDiagnostic(
PropertiesProvider.KOTLIN_NATIVE_HOME.takeIf { kotlinPropertiesProvider.nativeHome != null }
))
}
private fun KotlinGradleProjectCheckerContext.checkThatStdlibExists() =
// we need to wrap this check in ValueSource to prevent Gradle from monitoring the stdlib folder as a build configuration input
project.providers.of(StdlibExistenceCheckerValueSource::class.java) {
it.parameters.noStdlibEnabled.set(project.hasProperty("kotlin.native.nostdlib"))
it.parameters.kotlinNativeToolchainEnabled.set(project.kotlinNativeToolchainEnabled)
it.parameters.stdlib.setFrom(project.konanDistribution.stdlib)
}.usedAtConfigurationTime(project.configurationTimePropertiesAccessor)
internal abstract class StdlibExistenceCheckerValueSource :
ValueSource<Boolean, StdlibExistenceCheckerValueSource.Params> {
interface Params : ValueSourceParameters {
val noStdlibEnabled: Property<Boolean>
val kotlinNativeToolchainEnabled: Property<Boolean>
val stdlib: ConfigurableFileCollection
}
override fun obtain(): Boolean {
return parameters.noStdlibEnabled.get() || // suppressed
parameters.kotlinNativeToolchainEnabled.get() || // with toolchain, we download konan after configuration phase, thus, we shouldn't check existence here
parameters.stdlib.singleFile.exists()
}
}
}