[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
|
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.commonizer.stdlib
|
||||||
|
import org.jetbrains.kotlin.compilerRunner.kotlinNativeToolchainEnabled
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
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.KotlinGradleProjectChecker
|
||||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectCheckerContext
|
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.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.plugin.mpp.KotlinNativeTarget
|
||||||
import org.jetbrains.kotlin.gradle.utils.konanDistribution
|
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 {
|
internal object MissingNativeStdlibChecker : KotlinGradleProjectChecker {
|
||||||
override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) {
|
override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) {
|
||||||
val targets = multiplatformExtension?.awaitTargets() ?: return
|
val targets = multiplatformExtension?.awaitTargets() ?: return
|
||||||
if (targets.isEmpty() || // misconfigured project
|
if (targets.isEmpty() || // misconfigured project
|
||||||
targets.none { it is KotlinNativeTarget } || // no K/N targets
|
targets.none { it is KotlinNativeTarget } || // no K/N targets
|
||||||
project.hasProperty("kotlin.native.nostdlib") || // suppressed
|
checkThatStdlibExists().get()
|
||||||
project.konanDistribution.stdlib.exists()
|
|
||||||
) return
|
) return
|
||||||
|
|
||||||
collector.report(project, KotlinToolingDiagnostics.NativeStdlibIsMissingDiagnostic(
|
collector.report(project, KotlinToolingDiagnostics.NativeStdlibIsMissingDiagnostic(
|
||||||
PropertiesProvider.KOTLIN_NATIVE_HOME.takeIf { kotlinPropertiesProvider.nativeHome != null }
|
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