[mpp] Migrate MissingNativeStdlibWarning to the new infra

This commit is contained in:
Dmitry Savvinov
2023-03-15 16:54:23 +01:00
committed by Space Team
parent 07142a4083
commit 05662eae7a
6 changed files with 43 additions and 48 deletions
@@ -13,8 +13,7 @@ import org.jdom.input.SAXBuilder
import org.jetbrains.kotlin.gradle.*
import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_DISABLE_WARNING_PROPERTY_NAME
import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX
import org.jetbrains.kotlin.gradle.internals.NO_NATIVE_STDLIB_PROPERTY_WARNING
import org.jetbrains.kotlin.gradle.internals.NO_NATIVE_STDLIB_WARNING
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeOutputKind
import org.jetbrains.kotlin.gradle.testbase.*
import org.jetbrains.kotlin.gradle.util.modify
@@ -937,8 +936,7 @@ class GeneralNativeIT : BaseGradleIT() {
assertSuccessful()
assertContains("User-provided Kotlin/Native distribution: $currentDir")
assertNotContains("Project property 'org.jetbrains.kotlin.native.home' is deprecated")
assertContains(NO_NATIVE_STDLIB_WARNING)
assertContains(NO_NATIVE_STDLIB_PROPERTY_WARNING)
assertHasDiagnostic(KotlinToolingDiagnostics.NativeStdlibIsMissingDiagnostic, withSubstring = "kotlin.native.home")
}
// Deprecated property.
@@ -946,8 +944,7 @@ class GeneralNativeIT : BaseGradleIT() {
assertSuccessful()
assertContains("User-provided Kotlin/Native distribution: $currentDir")
assertContains("Project property 'org.jetbrains.kotlin.native.home' is deprecated")
assertNotContains(NO_NATIVE_STDLIB_WARNING)
assertNotContains(NO_NATIVE_STDLIB_PROPERTY_WARNING)
assertNoDiagnostic(KotlinToolingDiagnostics.NativeStdlibIsMissingDiagnostic)
}
build("tasks", "-Pkotlin.native.version=1.5.20") {
@@ -1244,4 +1241,4 @@ class GeneralNativeIT : BaseGradleIT() {
check: (Map<String, String>) -> Unit
) = taskPaths.forEach { taskPath -> check(extractNativeCustomEnvironment(taskPath, toolName)) }
}
}
}
@@ -27,4 +27,12 @@ object KotlinToolingDiagnostics {
object CommonMainWithDependsOnDiagnostic : ToolingDiagnosticFactory(WARNING) {
operator fun invoke() = build("commonMain can't declare dependsOn on other source sets")
}
object NativeStdlibIsMissingDiagnostic : ToolingDiagnosticFactory(WARNING) {
operator fun invoke(changedKotlinNativeHomeProperty: String?) = build(
"The Kotlin/Native distribution used in this build does not provide the standard library." +
" Make sure that the '$changedKotlinNativeHomeProperty' property points to a valid Kotlin/Native distribution."
.onlyIf(changedKotlinNativeHomeProperty != null)
)
}
}
@@ -0,0 +1,30 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers
import org.jetbrains.kotlin.commonizer.stdlib
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.targets.native.internal.konanDistribution
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsCollector
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
internal object MissingNativeStdlibChecker : KotlinGradleProjectChecker {
override fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) {
val targets = multiplatformExtension?.targets ?: 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()
) return
collector.report(project, KotlinToolingDiagnostics.NativeStdlibIsMissingDiagnostic(
PropertiesProvider.KOTLIN_NATIVE_HOME.takeIf { kotlinPropertiesProvider.nativeHome != null }
))
}
}
@@ -21,17 +21,12 @@ import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssoci
import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.targets.metadata.findMetadataCompilation
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled
import org.jetbrains.kotlin.gradle.targets.native.internal.MissingNativeStdlibWarning.showMissingNativeStdlibWarning
import org.jetbrains.kotlin.gradle.utils.filesProvider
import java.io.File
internal fun Project.setupKotlinNativePlatformDependencies() {
val kotlin = multiplatformExtensionOrNull ?: return
if (!konanDistribution.stdlib.exists()) {
showMissingNativeStdlibWarning()
}
if (isAllowCommonizer()) {
checkNotNull(commonizeNativeDistributionTask) { "Missing commonizeNativeDistributionTask" }
}
@@ -106,7 +101,7 @@ private suspend fun Project.addDependencies(
}
}
private val Project.konanDistribution: KonanDistribution
internal val Project.konanDistribution: KonanDistribution
get() = KonanDistribution(project.file(konanHome))
private fun File.listLibraryFiles(): List<File> = listFiles().orEmpty()
@@ -1,30 +0,0 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.targets.native.internal
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild
internal object MissingNativeStdlibWarning {
const val NO_NATIVE_STDLIB_WARNING =
"The Kotlin/Native distribution used in this build does not provide the standard library. "
const val NO_NATIVE_STDLIB_PROPERTY_WARNING =
"Make sure that the '${PropertiesProvider.KOTLIN_NATIVE_HOME}' property points to a valid Kotlin/Native distribution."
fun Project.showMissingNativeStdlibWarning() {
if (!project.hasProperty("kotlin.native.nostdlib")) {
SingleWarningPerBuild.show(
project, buildString {
append(NO_NATIVE_STDLIB_WARNING)
if (PropertiesProvider(project).nativeHome != null)
append(NO_NATIVE_STDLIB_PROPERTY_WARNING)
}
)
}
}
}
@@ -11,8 +11,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinProjectStructureMetadata
import org.jetbrains.kotlin.gradle.plugin.mpp.MULTIPLATFORM_PROJECT_METADATA_JSON_FILE_NAME
import org.jetbrains.kotlin.gradle.plugin.mpp.parseKotlinSourceSetMetadataFromJson
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
import org.jetbrains.kotlin.gradle.targets.native.internal.MissingNativeStdlibWarning.NO_NATIVE_STDLIB_PROPERTY_WARNING
import org.jetbrains.kotlin.gradle.targets.native.internal.MissingNativeStdlibWarning.NO_NATIVE_STDLIB_WARNING
fun parseKotlinSourceSetMetadataFromJson(json: String): KotlinProjectStructureMetadata? = parseKotlinSourceSetMetadataFromJson(json)
@@ -22,9 +20,6 @@ const val DISABLED_NATIVE_TARGETS_REPORTER_DISABLE_WARNING_PROPERTY_NAME = Disab
const val DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX: String = DisabledNativeTargetsReporter.WARNING_PREFIX
const val NO_NATIVE_STDLIB_WARNING = NO_NATIVE_STDLIB_WARNING
const val NO_NATIVE_STDLIB_PROPERTY_WARNING = NO_NATIVE_STDLIB_PROPERTY_WARNING
val KOTLIN_12X_MPP_DEPRECATION_WARNING = KOTLIN_12X_MPP_DEPRECATION_WARNING
const val VERBOSE_DIAGNOSTIC_SEPARATOR = DIAGNOSTIC_SEPARATOR