[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:
committed by
Space Team
parent
08f6e21f5d
commit
753e365c9e
+6
@@ -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 {
|
private fun String.indentLines(nSpaces: Int = 4, skipFirstLine: Boolean = true): String {
|
||||||
|
|||||||
+3
-1
@@ -8,6 +8,8 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
|
|||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi
|
import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
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.KotlinCompilationFactory
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
@@ -23,7 +25,7 @@ class KotlinWasmTargetPreset(
|
|||||||
|
|
||||||
override fun instantiateTarget(name: String): KotlinJsIrTarget {
|
override fun instantiateTarget(name: String): KotlinJsIrTarget {
|
||||||
if (!PropertiesProvider(project).wasmStabilityNoWarn) {
|
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)
|
val irTarget = project.objects.newInstance(KotlinJsIrTarget::class.java, project, KotlinPlatformType.wasm)
|
||||||
|
|||||||
+38
-2
@@ -6,10 +6,11 @@
|
|||||||
package org.jetbrains.kotlin.gradle.unitTests.diagnosticsTests
|
package org.jetbrains.kotlin.gradle.unitTests.diagnosticsTests
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.dsl.targetFromPresetInternal
|
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.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.checkDiagnosticsWithMppProject
|
||||||
import org.jetbrains.kotlin.gradle.util.kotlin
|
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class MppDiagnosticsFunctionalTest {
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -139,3 +139,6 @@ fun Project.enableDependencyVerification(enabled: Boolean = true) {
|
|||||||
else DependencyVerificationMode.OFF
|
else DependencyVerificationMode.OFF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Project.enableWasmStabilityNoWarn(enabled: Boolean = true) {
|
||||||
|
propertiesExtension.set("kotlin.wasm.stability.nowarn", enabled.toString())
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user