[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.*
import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_DISABLE_WARNING_PROPERTY_NAME 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.DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX
import org.jetbrains.kotlin.gradle.internals.NO_NATIVE_STDLIB_PROPERTY_WARNING import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
import org.jetbrains.kotlin.gradle.internals.NO_NATIVE_STDLIB_WARNING
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeOutputKind import org.jetbrains.kotlin.gradle.plugin.mpp.NativeOutputKind
import org.jetbrains.kotlin.gradle.testbase.* import org.jetbrains.kotlin.gradle.testbase.*
import org.jetbrains.kotlin.gradle.util.modify import org.jetbrains.kotlin.gradle.util.modify
@@ -937,8 +936,7 @@ class GeneralNativeIT : BaseGradleIT() {
assertSuccessful() assertSuccessful()
assertContains("User-provided Kotlin/Native distribution: $currentDir") assertContains("User-provided Kotlin/Native distribution: $currentDir")
assertNotContains("Project property 'org.jetbrains.kotlin.native.home' is deprecated") assertNotContains("Project property 'org.jetbrains.kotlin.native.home' is deprecated")
assertContains(NO_NATIVE_STDLIB_WARNING) assertHasDiagnostic(KotlinToolingDiagnostics.NativeStdlibIsMissingDiagnostic, withSubstring = "kotlin.native.home")
assertContains(NO_NATIVE_STDLIB_PROPERTY_WARNING)
} }
// Deprecated property. // Deprecated property.
@@ -946,8 +944,7 @@ class GeneralNativeIT : BaseGradleIT() {
assertSuccessful() assertSuccessful()
assertContains("User-provided Kotlin/Native distribution: $currentDir") assertContains("User-provided Kotlin/Native distribution: $currentDir")
assertContains("Project property 'org.jetbrains.kotlin.native.home' is deprecated") assertContains("Project property 'org.jetbrains.kotlin.native.home' is deprecated")
assertNotContains(NO_NATIVE_STDLIB_WARNING) assertNoDiagnostic(KotlinToolingDiagnostics.NativeStdlibIsMissingDiagnostic)
assertNotContains(NO_NATIVE_STDLIB_PROPERTY_WARNING)
} }
build("tasks", "-Pkotlin.native.version=1.5.20") { build("tasks", "-Pkotlin.native.version=1.5.20") {
@@ -27,4 +27,12 @@ object KotlinToolingDiagnostics {
object CommonMainWithDependsOnDiagnostic : ToolingDiagnosticFactory(WARNING) { object CommonMainWithDependsOnDiagnostic : ToolingDiagnosticFactory(WARNING) {
operator fun invoke() = build("commonMain can't declare dependsOn on other source sets") 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.plugin.sources.internal
import org.jetbrains.kotlin.gradle.targets.metadata.findMetadataCompilation import org.jetbrains.kotlin.gradle.targets.metadata.findMetadataCompilation
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled 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 org.jetbrains.kotlin.gradle.utils.filesProvider
import java.io.File import java.io.File
internal fun Project.setupKotlinNativePlatformDependencies() { internal fun Project.setupKotlinNativePlatformDependencies() {
val kotlin = multiplatformExtensionOrNull ?: return val kotlin = multiplatformExtensionOrNull ?: return
if (!konanDistribution.stdlib.exists()) {
showMissingNativeStdlibWarning()
}
if (isAllowCommonizer()) { if (isAllowCommonizer()) {
checkNotNull(commonizeNativeDistributionTask) { "Missing commonizeNativeDistributionTask" } 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)) get() = KonanDistribution(project.file(konanHome))
private fun File.listLibraryFiles(): List<File> = listFiles().orEmpty() 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.MULTIPLATFORM_PROJECT_METADATA_JSON_FILE_NAME
import org.jetbrains.kotlin.gradle.plugin.mpp.parseKotlinSourceSetMetadataFromJson import org.jetbrains.kotlin.gradle.plugin.mpp.parseKotlinSourceSetMetadataFromJson
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter 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) 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 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 val KOTLIN_12X_MPP_DEPRECATION_WARNING = KOTLIN_12X_MPP_DEPRECATION_WARNING
const val VERBOSE_DIAGNOSTIC_SEPARATOR = DIAGNOSTIC_SEPARATOR const val VERBOSE_DIAGNOSTIC_SEPARATOR = DIAGNOSTIC_SEPARATOR