[Gradle] Migrate diagnostic about empty Kotlin targets in an MPP project
Also demote it from FATAL to ERROR, as FATAL leads to pretty disruptive UX in IDE (import fails, and you don't get a broken project, which makes it hard to fix the root cause and declare a target)
This commit is contained in:
+1
-3
@@ -8,8 +8,6 @@ package org.jetbrains.kotlin.gradle.mpp
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.jetbrains.kotlin.gradle.util.replaceText
|
||||
import org.jetbrains.kotlin.test.TestMetadata
|
||||
import kotlin.io.path.appendText
|
||||
import kotlin.io.path.writeText
|
||||
|
||||
@@ -26,7 +24,7 @@ class MppDiagnosticsIt : KGPBaseTest() {
|
||||
}
|
||||
|
||||
@GradleTest
|
||||
fun testDeprecatedProperties(gradleVersion: GradleVersion) {
|
||||
fun testDeprecatedMppProperties(gradleVersion: GradleVersion) {
|
||||
project("mppDeprecatedProperties", gradleVersion) {
|
||||
checkDeprecatedProperties(isDeprecationExpected = false)
|
||||
|
||||
|
||||
-1
@@ -387,7 +387,6 @@ abstract class AbstractKotlinMultiplatformPluginWrapper : KotlinBasePluginWrappe
|
||||
get() = KotlinMultiplatformExtension::class
|
||||
|
||||
override fun whenBuildEvaluated(project: Project) {
|
||||
project.runMissingKotlinTargetsProjectConfigurationHealthCheck()
|
||||
project.runDisabledCInteropCommonizationOnHmppProjectConfigurationHealthCheck()
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -100,7 +100,8 @@ internal interface KotlinGradleProjectChecker {
|
||||
UnusedSourceSetsChecker,
|
||||
AndroidSourceSetLayoutV1SourceSetsNotFoundChecker,
|
||||
TargetsWithAmbiguousConsumableConfigurationsChecker,
|
||||
AndroidPluginWithoutAndroidTargetChecker
|
||||
AndroidPluginWithoutAndroidTargetChecker,
|
||||
NoKotlinTargetsDeclaredChecker
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+10
-2
@@ -7,8 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.diagnostics
|
||||
|
||||
import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.ERROR
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.WARNING
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV1
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2
|
||||
|
||||
@@ -240,4 +239,13 @@ object KotlinToolingDiagnostics {
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
|
||||
object NoKotlinTargetsDeclared : ToolingDiagnosticFactory(ERROR) {
|
||||
operator fun invoke(projectName: String, projectPath: String) = build(
|
||||
"""
|
||||
Please initialize at least one Kotlin target in '${projectName} (${projectPath})'.
|
||||
Read more https://kotl.in/set-up-targets
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* 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.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.plugin.mpp.KotlinMetadataTarget
|
||||
|
||||
internal object NoKotlinTargetsDeclaredChecker : KotlinGradleProjectChecker {
|
||||
override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) {
|
||||
val isNoTargetsInitialized = (multiplatformExtension ?: return).awaitTargets().none { it !is KotlinMetadataTarget }
|
||||
|
||||
if (isNoTargetsInitialized) {
|
||||
collector.report(project, KotlinToolingDiagnostics.NoKotlinTargetsDeclared(project.name, project.path))
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -5,10 +5,14 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.unitTests.diagnosticsTests
|
||||
|
||||
import org.gradle.api.InvalidUserCodeException
|
||||
import org.gradle.api.attributes.Attribute
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmWithJavaTargetPreset
|
||||
import org.jetbrains.kotlin.gradle.util.*
|
||||
import org.junit.Test
|
||||
import kotlin.jvm.Throws
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class MppDiagnosticsFunctionalTest {
|
||||
|
||||
@@ -152,4 +156,11 @@ class MppDiagnosticsFunctionalTest {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testNoTargetsDeclared() {
|
||||
checkDiagnosticsWithMppProject("noTargetsDeclared") {
|
||||
kotlin { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
[NoKotlinTargetsDeclared | ERROR] Please initialize at least one Kotlin target in 'noTargetsDeclared (:)'.
|
||||
Read more https://kotl.in/set-up-targets
|
||||
----
|
||||
[UnusedSourceSetsWarning | WARNING] The following Kotlin source sets were configured but not added to any Kotlin compilation:
|
||||
* commonMain
|
||||
* commonTest
|
||||
You can add a source set to a target's compilation by connecting it with the compilation's default source set using 'dependsOn'.
|
||||
See https://kotl.in/connecting-source-sets
|
||||
Reference in New Issue
Block a user