[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:
committed by
Space Team
parent
4fafa4b6e9
commit
fb3c1f1a2f
+36
-3
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user