[Gradle, wasm] add checker about changed wasm source sets
^KT-61950 fixed
This commit is contained in:
committed by
Space Team
parent
c31a3869c6
commit
afbfc9ce8e
+1
@@ -115,6 +115,7 @@ internal interface KotlinGradleProjectChecker {
|
||||
IosSourceSetConventionChecker,
|
||||
KotlinTargetAlreadyDeclaredChecker,
|
||||
InternalGradlePropertiesUsageChecker,
|
||||
WasmSourceSetsNotFoundChecker,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+13
@@ -642,6 +642,19 @@ object KotlinToolingDiagnostics {
|
||||
""".trimIndent(),
|
||||
)
|
||||
}
|
||||
|
||||
object WasmSourceSetsNotFoundError : ToolingDiagnosticFactory(ERROR) {
|
||||
operator fun invoke(nameOfRequestedSourceSet: String) = build(
|
||||
"""
|
||||
KotlinSourceSet with name '$nameOfRequestedSourceSet' not found:
|
||||
The SourceSet requested ('$nameOfRequestedSourceSet') was renamed in Kotlin 1.9.20
|
||||
|
||||
In order to migrate you might want to replace:
|
||||
val wasmMain by getting -> val wasmJsMain by getting
|
||||
val wasmTest by getting -> val wasmJsTest by getting
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.indentLines(nSpaces: Int = 4, skipFirstLine: Boolean = true): String {
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* 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.gradle.api.UnknownDomainObjectException
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle
|
||||
import org.jetbrains.kotlin.gradle.plugin.configurationResult
|
||||
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.tooling.core.withClosure
|
||||
|
||||
internal object WasmSourceSetsNotFoundChecker : KotlinGradleProjectChecker {
|
||||
|
||||
private val wasmSourceSetRegex by lazy { Regex("""(wasmMain|wasmTest)\w*""") }
|
||||
|
||||
override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) {
|
||||
val failure = project.configurationResult.await() as? KotlinPluginLifecycle.ProjectConfigurationResult.Failure ?: return
|
||||
|
||||
val unknownWasmSourceSetNames = failure
|
||||
.failures
|
||||
.withClosure<Throwable> { listOfNotNull(it.cause) }
|
||||
.filterIsInstance<UnknownDomainObjectException>()
|
||||
.filter { it.message.orEmpty().contains("KotlinSourceSet") }
|
||||
.mapNotNull { wasmSourceSetRegex.find(it.message.orEmpty()) }
|
||||
.map { it.value }
|
||||
|
||||
unknownWasmSourceSetNames.forEach { unknownWasmSourceSetName ->
|
||||
collector.report(project, KotlinToolingDiagnostics.WasmSourceSetsNotFoundError(unknownWasmSourceSetName))
|
||||
}
|
||||
}
|
||||
}
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@file:Suppress("FunctionName")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.unitTests.diagnosticsTests
|
||||
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.kotlinToolingDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.gradle.plugin.launchInStage
|
||||
import org.jetbrains.kotlin.gradle.util.assertContainsDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.util.assertNoDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertFails
|
||||
|
||||
class WasmSourceSetsNotFoundErrorTest {
|
||||
|
||||
@Test
|
||||
fun `wasmMain SourceSet`() {
|
||||
diagnosticsForTestProjectRequestingMissingSourceSet("wasmMain")
|
||||
.assertContainsDiagnostic(KotlinToolingDiagnostics.WasmSourceSetsNotFoundError("wasmMain"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `wasmTest SourceSet`() {
|
||||
diagnosticsForTestProjectRequestingMissingSourceSet("wasmTest")
|
||||
.assertContainsDiagnostic(KotlinToolingDiagnostics.WasmSourceSetsNotFoundError("wasmTest"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `wasmJsMain SourceSet - is not reported`() {
|
||||
diagnosticsForTestProjectRequestingMissingSourceSet("wasmJsMain")
|
||||
.assertNoDiagnostics(KotlinToolingDiagnostics.WasmSourceSetsNotFoundError)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `wasmJsTest SourceSet - is not reported`() {
|
||||
diagnosticsForTestProjectRequestingMissingSourceSet("wasmJsTest")
|
||||
.assertNoDiagnostics(KotlinToolingDiagnostics.WasmSourceSetsNotFoundError)
|
||||
}
|
||||
|
||||
private fun diagnosticsForTestProjectRequestingMissingSourceSet(sourceSetName: String): List<ToolingDiagnostic> {
|
||||
val project = buildProjectWithMPP()
|
||||
val kotlin = project.multiplatformExtension
|
||||
|
||||
project.launchInStage(KotlinPluginLifecycle.Stage.AfterEvaluateBuildscript) {
|
||||
kotlin.sourceSets.getByName(sourceSetName)
|
||||
}
|
||||
|
||||
assertFails { project.evaluate() }
|
||||
return project.kotlinToolingDiagnosticsCollector.getDiagnosticsForProject(project).toList()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user