[Gradle, WASM] Move stability warning to Diagnostics Infra

And report it only once per build, so it doesn't spam users with
multiple projects in the logs.

^KT-66429 Verification Pending
This commit is contained in:
Anton Lakotka
2024-03-08 09:41:34 +01:00
committed by Space Team
parent 08f6e21f5d
commit 753e365c9e
4 changed files with 50 additions and 3 deletions
@@ -867,6 +867,12 @@ object KotlinToolingDiagnostics {
)
}
}
object WasmStabilityWarning : ToolingDiagnosticFactory(WARNING) {
operator fun invoke(): ToolingDiagnostic =
build("New 'wasm' target is Work-in-Progress and is subject to change without notice. " +
"Please report encountered issues to https://kotl.in/issue")
}
}
private fun String.indentLines(nSpaces: Int = 4, skipFirstLine: Boolean = true): String {
@@ -8,6 +8,8 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnosticOncePerBuild
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
@@ -23,7 +25,7 @@ class KotlinWasmTargetPreset(
override fun instantiateTarget(name: String): KotlinJsIrTarget {
if (!PropertiesProvider(project).wasmStabilityNoWarn) {
project.logger.warn("New 'wasm' target is Work-in-Progress and is subject to change without notice.")
project.reportDiagnosticOncePerBuild(KotlinToolingDiagnostics.WasmStabilityWarning())
}
val irTarget = project.objects.newInstance(KotlinJsIrTarget::class.java, project, KotlinPlatformType.wasm)
@@ -6,10 +6,11 @@
package org.jetbrains.kotlin.gradle.unitTests.diagnosticsTests
import org.jetbrains.kotlin.gradle.dsl.targetFromPresetInternal
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmWithJavaTargetPreset
import org.jetbrains.kotlin.gradle.util.androidLibrary
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.util.*
import org.jetbrains.kotlin.gradle.util.checkDiagnosticsWithMppProject
import org.jetbrains.kotlin.gradle.util.kotlin
import org.junit.Test
class MppDiagnosticsFunctionalTest {
@@ -126,4 +127,39 @@ class MppDiagnosticsFunctionalTest {
}
}
}
@Test
@OptIn(ExperimentalWasmDsl::class)
fun wasmStabilityWarningReportedOncePerBuild() {
val rootProject = buildProjectWithMPP(projectBuilder = { withName("lib") }) {
kotlin { jvm(); wasmJs { browser() } }
}
val childProject = buildProjectWithMPP(projectBuilder = { withParent(rootProject).withName("app") }) {
kotlin { jvm(); wasmJs { browser() } }
}
childProject.evaluate()
rootProject.evaluate()
// wasm target was declared first in the root project, so only root project should report it
rootProject.assertContainsDiagnostic(KotlinToolingDiagnostics.WasmStabilityWarning)
childProject.assertNoDiagnostics(KotlinToolingDiagnostics.WasmStabilityWarning)
}
@Test
@OptIn(ExperimentalWasmDsl::class)
fun wasmStabilityWarningCanBeSuppressed() {
val rootProject = buildProjectWithMPP(projectBuilder = { withName("lib") }) {
enableWasmStabilityNoWarn()
kotlin { jvm(); wasmJs { browser() } }
}
val childProject = buildProjectWithMPP(projectBuilder = { withParent(rootProject).withName("app") }) {
enableWasmStabilityNoWarn()
kotlin { jvm(); wasmJs { browser() } }
}
childProject.evaluate()
rootProject.evaluate()
rootProject.assertNoDiagnostics(KotlinToolingDiagnostics.WasmStabilityWarning)
childProject.assertNoDiagnostics(KotlinToolingDiagnostics.WasmStabilityWarning)
}
}
@@ -139,3 +139,6 @@ fun Project.enableDependencyVerification(enabled: Boolean = true) {
else DependencyVerificationMode.OFF
}
fun Project.enableWasmStabilityNoWarn(enabled: Boolean = true) {
propertiesExtension.set("kotlin.wasm.stability.nowarn", enabled.toString())
}