[Gradle] Migrate warning about not chosen JS-environment

This commit is contained in:
Dmitry Savvinov
2023-04-20 12:59:45 +02:00
parent 76c37f359a
commit 57b71b8ea6
6 changed files with 63 additions and 50 deletions
@@ -103,7 +103,8 @@ internal interface KotlinGradleProjectChecker {
AndroidPluginWithoutAndroidTargetChecker,
NoKotlinTargetsDeclaredChecker,
DisabledCinteropCommonizationInHmppProjectChecker,
DisabledNativeTargetsChecker
DisabledNativeTargetsChecker,
JsEnvironmentChecker
)
}
}
@@ -297,4 +297,19 @@ object KotlinToolingDiagnostics {
severity
)
}
object JsEnvironmentNotChosenExplicitly : ToolingDiagnosticFactory(WARNING) {
operator fun invoke(availableEnvironments: List<String>) = build(
"""
|Please choose a JavaScript environment to build distributions and run tests.
|Not choosing any of them will be an error in the future releases.
|kotlin {
| js {
| // To build distributions for and run tests on browser or Node.js use one or both of:
| ${availableEnvironments.joinToString(separator = "\n")}
| }
|}
""".trimMargin()
)
}
}
@@ -0,0 +1,45 @@
/*
* 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.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
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.targets.js.dsl.KotlinJsSubTargetContainerDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmSubTargetContainerDsl
internal object JsEnvironmentChecker : KotlinGradleProjectChecker {
override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) {
val misconfiguredTarget = multiplatformExtension?.findMisconfiguredTargetIfAny() ?: return
collector.reportOncePerGradleBuild(
project,
KotlinToolingDiagnostics.JsEnvironmentNotChosenExplicitly(
availableEnvironments = listOfNotNull(
"browser()",
"nodejs()",
"d8".takeIf { misconfiguredTarget.platformType == KotlinPlatformType.wasm }
)
)
)
}
private suspend fun KotlinMultiplatformExtension.findMisconfiguredTargetIfAny(): KotlinTarget? {
return awaitTargets()
.filter { it.platformType == KotlinPlatformType.js || it.platformType == KotlinPlatformType.wasm }
.find {
it.browserNotConfigured() && it.nodejsNotConfigured() && it.d8NotConfigured()
}
}
private fun KotlinTarget.browserNotConfigured() = (this as? KotlinJsSubTargetContainerDsl)?.isBrowserConfigured == false
private fun KotlinTarget.nodejsNotConfigured() = (this as? KotlinJsSubTargetContainerDsl)?.isNodejsConfigured == false
private fun KotlinTarget.d8NotConfigured() = (this as? KotlinWasmSubTargetContainerDsl)?.isD8Configured == false
}
@@ -57,21 +57,6 @@ open class KotlinJsTargetPreset(
this.isMpp = this@KotlinJsTargetPreset.isMpp
project.runProjectConfigurationHealthCheckWhenEvaluated {
if (!isBrowserConfigured && !isNodejsConfigured) {
project.logger.warn(
"""
Please choose a JavaScript environment to build distributions and run tests.
Not choosing any of them will be an error in the future releases.
kotlin {
js {
// To build distributions for and run tests on browser or Node.js use one or both of:
browser()
nodejs()
}
}
""".trimIndent()
)
}
val buildStatsService = KotlinBuildStatsService.getInstance()
when {
isBrowserConfigured && isNodejsConfigured -> buildStatsService?.report(StringMetrics.JS_TARGET_MODE, "both")
@@ -33,21 +33,6 @@ open class KotlinJsIrTargetPreset(
this.isMpp = this@KotlinJsIrTargetPreset.isMpp
if (!mixedMode) {
project.runProjectConfigurationHealthCheckWhenEvaluated {
if (!isBrowserConfigured && !isNodejsConfigured) {
project.logger.warn(
"""
Please choose a JavaScript environment to build distributions and run tests.
Not choosing any of them will be an error in the future releases.
kotlin {
js {
// To build distributions for and run tests on browser or Node.js use one or both of:
browser()
nodejs()
}
}
""".trimIndent()
)
}
val buildStatsService = KotlinBuildStatsService.getInstance()
when {
isBrowserConfigured && isNodejsConfigured -> buildStatsService?.report(StringMetrics.JS_TARGET_MODE, "both")
@@ -27,24 +27,6 @@ class KotlinWasmTargetPreset(
val irTarget = project.objects.newInstance(KotlinJsIrTarget::class.java, project, KotlinPlatformType.wasm, false)
irTarget.isMpp = true
project.runProjectConfigurationHealthCheckWhenEvaluated {
if (!irTarget.isBrowserConfigured && !irTarget.isNodejsConfigured && !irTarget.isD8Configured) {
project.logger.warn(
"""
Please choose a JavaScript environment to run tests.
kotlin {
wasm {
// To build distributions for and run tests on browser, Node.js or d8 use one:
browser()
nodejs()
d8()
}
}
""".trimIndent()
)
}
}
return irTarget
}
@@ -61,4 +43,4 @@ class KotlinWasmTargetPreset(
companion object {
private const val WASM_PRESET_NAME = "wasm"
}
}
}