[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,
|
IosSourceSetConventionChecker,
|
||||||
KotlinTargetAlreadyDeclaredChecker,
|
KotlinTargetAlreadyDeclaredChecker,
|
||||||
InternalGradlePropertiesUsageChecker,
|
InternalGradlePropertiesUsageChecker,
|
||||||
|
WasmSourceSetsNotFoundChecker,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+13
@@ -642,6 +642,19 @@ object KotlinToolingDiagnostics {
|
|||||||
""".trimIndent(),
|
""".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 {
|
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