[Gradle] Support suppressing KGP diagnostics
This commit is contained in:
committed by
Space Team
parent
f5c4dffc3e
commit
c5bda2f63c
+8
@@ -530,6 +530,12 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
||||
val internalVerboseDiagnostics: Boolean
|
||||
get() = booleanProperty(KOTLIN_INTERNAL_VERBOSE_DIAGNOSTICS) ?: false
|
||||
|
||||
val suppressedGradlePluginWarnings: List<String>
|
||||
get() = property(PropertyNames.KOTLIN_SUPPRESS_GRADLE_PLUGIN_WARNINGS)?.split(",").orEmpty()
|
||||
|
||||
val suppressedGradlePluginErrors: List<String>
|
||||
get() = property(PropertyNames.KOTLIN_SUPPRESS_GRADLE_PLUGIN_ERRORS)?.split(",").orEmpty()
|
||||
|
||||
/**
|
||||
* Retrieves a comma-separated list of browsers to use when running karma tests for [target]
|
||||
* @see KOTLIN_JS_KARMA_BROWSERS
|
||||
@@ -620,6 +626,8 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
||||
const val KOTLIN_MPP_ALLOW_LEGACY_DEPENDENCIES = "kotlin.mpp.allow.legacy.dependencies"
|
||||
const val KOTLIN_EXPERIMENTAL_TRY_K2 = "kotlin.experimental.tryK2"
|
||||
const val KOTLIN_INTERNAL_VERBOSE_DIAGNOSTICS = "kotlin.internal.verboseDiagnostics"
|
||||
const val KOTLIN_SUPPRESS_GRADLE_PLUGIN_WARNINGS = "kotlin.suppressGradlePluginWarnings"
|
||||
const val KOTLIN_SUPPRESS_GRADLE_PLUGIN_ERRORS = "kotlin.internal.suppressGradlePluginErrors"
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
+16
-4
@@ -9,6 +9,9 @@ import org.gradle.api.InvalidUserCodeException
|
||||
import org.gradle.api.Project
|
||||
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
|
||||
@@ -17,11 +20,20 @@ private typealias ToolingDiagnosticId = String
|
||||
private typealias GradleProjectPath = String
|
||||
|
||||
internal abstract class KotlinToolingDiagnosticsCollector : BuildService<BuildServiceParameters.None> {
|
||||
private val diagnosticsFromProject: MutableMap<GradleProjectPath, MutableList<ToolingDiagnostic>> = ConcurrentHashMap()
|
||||
private val rawDiagnosticsFromProject: MutableMap<GradleProjectPath, MutableList<ToolingDiagnostic>> = ConcurrentHashMap()
|
||||
private val reportedIds: MutableSet<ToolingDiagnosticId> = Collections.newSetFromMap(ConcurrentHashMap())
|
||||
|
||||
fun getDiagnosticsForProject(project: Project): Collection<ToolingDiagnostic> = diagnosticsFromProject[project.path].orEmpty()
|
||||
fun getAllDiagnostics(): Collection<ToolingDiagnostic> = diagnosticsFromProject.values.flatten()
|
||||
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() }
|
||||
}
|
||||
|
||||
fun report(project: Project, diagnostic: ToolingDiagnostic) {
|
||||
saveDiagnostic(project, diagnostic)
|
||||
@@ -43,7 +55,7 @@ internal abstract class KotlinToolingDiagnosticsCollector : BuildService<BuildSe
|
||||
if (diagnostic.severity == ToolingDiagnostic.Severity.FATAL) {
|
||||
throw InvalidUserCodeException(diagnostic.message)
|
||||
}
|
||||
diagnosticsFromProject.compute(project.path) { _, previousListIfAny ->
|
||||
rawDiagnosticsFromProject.compute(project.path) { _, previousListIfAny ->
|
||||
previousListIfAny?.apply { add(diagnostic) } ?: mutableListOf(diagnostic)
|
||||
}
|
||||
}
|
||||
|
||||
+35
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.diagnosticsTests
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.internal.project.ProjectInternal
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.*
|
||||
import org.jetbrains.kotlin.gradle.util.applyKotlinJvmPlugin
|
||||
import org.jetbrains.kotlin.gradle.util.buildProject
|
||||
@@ -15,6 +16,7 @@ import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity
|
||||
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.extraProperties
|
||||
import org.junit.Test
|
||||
|
||||
class DiagnosticsReportingFunctionalTest {
|
||||
@@ -112,6 +114,39 @@ class DiagnosticsReportingFunctionalTest {
|
||||
|
||||
root.checkDiagnostics("oncePerProjectAndOncePerBuildAreEquivalentForRoot")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSuppressedWarnings() {
|
||||
buildProject().run {
|
||||
applyKotlinJvmPlugin()
|
||||
extraProperties.set(PropertiesProvider.PropertyNames.KOTLIN_SUPPRESS_GRADLE_PLUGIN_WARNINGS, "TEST_DIAGNOSTIC")
|
||||
reportTestDiagnostic()
|
||||
evaluate()
|
||||
checkDiagnostics("suppressedWarnings")
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSuppressedErrors() {
|
||||
buildProject().run {
|
||||
applyKotlinJvmPlugin()
|
||||
extraProperties.set(PropertiesProvider.PropertyNames.KOTLIN_SUPPRESS_GRADLE_PLUGIN_ERRORS, "TEST_DIAGNOSTIC")
|
||||
reportTestDiagnostic(severity = ERROR)
|
||||
evaluate()
|
||||
checkDiagnostics("suppressedErrors")
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSuppressForWarningsDoesntWorkForErrors() {
|
||||
buildProject().run {
|
||||
applyKotlinJvmPlugin()
|
||||
extraProperties.set(PropertiesProvider.PropertyNames.KOTLIN_SUPPRESS_GRADLE_PLUGIN_WARNINGS, "TEST_DIAGNOSTIC")
|
||||
reportTestDiagnostic(severity = ERROR)
|
||||
evaluate()
|
||||
checkDiagnostics("suppressForWarningsDoesntWorkForErrors")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildProjectWithMockedCheckers(
|
||||
|
||||
+1
-1
@@ -316,7 +316,7 @@ class KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheckTest {
|
||||
}
|
||||
|
||||
private fun Project.assertNoWarningMessage() {
|
||||
val diagnostics = kotlinToolingDiagnosticsCollector.getAllDiagnostics()
|
||||
val diagnostics = kotlinToolingDiagnosticsCollector.getDiagnosticsForProject(this)
|
||||
if (diagnostics.isNotEmpty()) {
|
||||
fail("Expected no warning messages to be emitted. Found: $diagnostics")
|
||||
}
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
[TEST_DIAGNOSTIC | ERROR] This is a test diagnostic
|
||||
|
||||
It has multiple lines of text
|
||||
Reference in New Issue
Block a user