[Gradle] Migrate K2-usage warning

This commit is contained in:
Dmitry Savvinov
2023-05-03 09:53:31 +01:00
parent b6a90cfe7e
commit 8a5433734b
7 changed files with 40 additions and 29 deletions
@@ -8,9 +8,9 @@ package org.jetbrains.kotlin.gradle.experimental
import org.gradle.api.logging.LogLevel
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
import org.jetbrains.kotlin.gradle.testbase.*
import org.jetbrains.kotlin.gradle.util.parseCompilerArgumentsFromBuildOutput
import org.jetbrains.kotlin.gradle.utils.EXPERIMENTAL_TRY_K2_WARNING_MESSAGE
import org.junit.jupiter.api.DisplayName
import kotlin.io.path.appendText
@@ -29,7 +29,7 @@ class TryK2IT : KGPBaseTest() {
enableTryK2()
build("--dry-run") {
assertOutputContainsExactTimes(EXPERIMENTAL_TRY_K2_WARNING_MESSAGE, 1)
output.assertHasDiagnostic(KotlinToolingDiagnostics.ExperimentalK2Warning)
assertOutputContains("No Kotlin compilation tasks have been run")
}
}
@@ -228,4 +228,4 @@ class TryK2IT : KGPBaseTest() {
|kotlin.experimental.tryK2=true
""".trimMargin()
)
}
}
@@ -96,8 +96,6 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin {
}
BuildMetricsService.registerIfAbsent(project)
project.warnExperimentalTryK2IsEnabled()
}
private fun addKotlinCompilerConfiguration(project: Project) {
@@ -105,7 +105,8 @@ internal interface KotlinGradleProjectChecker {
DisabledCinteropCommonizationInHmppProjectChecker,
DisabledNativeTargetsChecker,
JsEnvironmentChecker,
PreHmppDependenciesUsageChecker
PreHmppDependenciesUsageChecker,
ExperimentalK2UsageChecker
)
}
}
@@ -321,4 +321,13 @@ object KotlinToolingDiagnostics {
""".trimIndent()
)
}
object ExperimentalK2Warning : ToolingDiagnosticFactory(WARNING) {
operator fun invoke() = build(
"""
ATTENTION: 'kotlin.experimental.tryK2' is an experimental option enabled in the project for trying out the new Kotlin K2 compiler only.
Please refrain from using it in production code and provide feedback to the Kotlin team for any issues encountered via https://kotl.in/issue
""".trimIndent()
)
}
}
@@ -11,8 +11,6 @@ import org.gradle.api.provider.Provider
import org.gradle.api.services.BuildService
import org.gradle.api.services.BuildServiceParameters
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
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.utils.registerClassLoaderScopedBuildService
import java.util.*
import java.util.concurrent.ConcurrentHashMap
@@ -33,14 +31,8 @@ internal abstract class KotlinToolingDiagnosticsCollector : BuildService<BuildSe
fun getDiagnosticsForProject(project: Project): Collection<ToolingDiagnostic> {
val rawDiagnostics = rawDiagnosticsFromProject[project.path] ?: return emptyList()
val suppressedWarnings = project.kotlinPropertiesProvider.suppressedGradlePluginWarnings.toSet()
val suppressedErrors = project.kotlinPropertiesProvider.suppressedGradlePluginErrors.toSet()
fun ToolingDiagnostic.isSuppressed(): Boolean =
severity == WARNING && id in suppressedWarnings || severity == ERROR && id in suppressedErrors
return rawDiagnostics.filter { !it.isSuppressed() }
val options = ToolingDiagnosticRenderingOptions.forProject(project)
return rawDiagnostics.withoutSuppressed(options)
}
fun report(project: Project, diagnostic: ToolingDiagnostic) {
@@ -48,7 +40,10 @@ internal abstract class KotlinToolingDiagnosticsCollector : BuildService<BuildSe
}
fun report(task: UsesKotlinToolingDiagnostics, diagnostic: ToolingDiagnostic) {
renderReportedDiagnostic(diagnostic, task.logger, isVerbose = false) // TODO: wire suppression/verbosity
val options = task.diagnosticRenderingOptions.get()
if (!diagnostic.isSuppressed(options)) {
renderReportedDiagnostic(diagnostic, task.logger, options.isVerbose)
}
}
fun reportOncePerGradleProject(fromProject: Project, diagnostic: ToolingDiagnostic, key: ToolingDiagnosticId = diagnostic.id) {
@@ -0,0 +1,20 @@
/*
* 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.PropertiesProvider.Companion.kotlinPropertiesProvider
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
internal object ExperimentalK2UsageChecker : KotlinGradleProjectChecker {
override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) {
if (project.kotlinPropertiesProvider.kotlinExperimentalTryK2.get()) {
collector.reportOncePerGradleBuild(project, KotlinToolingDiagnostics.ExperimentalK2Warning())
}
}
}
@@ -26,15 +26,3 @@ internal fun <T : KotlinCommonCompilerOptions> T.configureExperimentalTryK2(
}
)
}
internal fun Project.warnExperimentalTryK2IsEnabled() {
if (project.kotlinPropertiesProvider.kotlinExperimentalTryK2.get()) {
SingleWarningPerBuild.show(this, EXPERIMENTAL_TRY_K2_WARNING_MESSAGE)
}
}
val EXPERIMENTAL_TRY_K2_WARNING_MESSAGE =
"""
ATTENTION: 'kotlin.experimental.tryK2' is an experimental option enabled in the project for trying out the new Kotlin K2 compiler only.
Please refrain from using it in production code and provide feedback to the Kotlin team for any issues encountered via https://kotl.in/issue
""".trimIndent()