diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt index 73ab19f1cb5..7d2e2c24a5d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt @@ -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) -> Unit ) = taskPaths.forEach { taskPath -> check(extractNativeCustomEnvironment(taskPath, toolName)) } } -} \ No newline at end of file +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt index 775df3e1885..d390d9f46a9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt @@ -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) + ) + } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/MissingNativeStdlibChecker.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/MissingNativeStdlibChecker.kt new file mode 100644 index 00000000000..2d6c569495c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/MissingNativeStdlibChecker.kt @@ -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 } + )) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/KotlinNativePlatformDependencies.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/KotlinNativePlatformDependencies.kt index 0f962547d1d..6b91fc50c9a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/KotlinNativePlatformDependencies.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/KotlinNativePlatformDependencies.kt @@ -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 = listFiles().orEmpty() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/MissingNativeStdlibWarning.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/MissingNativeStdlibWarning.kt deleted file mode 100644 index 5193f799a80..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/MissingNativeStdlibWarning.kt +++ /dev/null @@ -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) - } - ) - } - } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internals/ExposedForIntegrationTests.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internals/ExposedForIntegrationTests.kt index 0f01cd48288..8d3513e5823 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internals/ExposedForIntegrationTests.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internals/ExposedForIntegrationTests.kt @@ -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