[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
|
val internalVerboseDiagnostics: Boolean
|
||||||
get() = booleanProperty(KOTLIN_INTERNAL_VERBOSE_DIAGNOSTICS) ?: false
|
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]
|
* Retrieves a comma-separated list of browsers to use when running karma tests for [target]
|
||||||
* @see KOTLIN_JS_KARMA_BROWSERS
|
* @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_MPP_ALLOW_LEGACY_DEPENDENCIES = "kotlin.mpp.allow.legacy.dependencies"
|
||||||
const val KOTLIN_EXPERIMENTAL_TRY_K2 = "kotlin.experimental.tryK2"
|
const val KOTLIN_EXPERIMENTAL_TRY_K2 = "kotlin.experimental.tryK2"
|
||||||
const val KOTLIN_INTERNAL_VERBOSE_DIAGNOSTICS = "kotlin.internal.verboseDiagnostics"
|
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 {
|
companion object {
|
||||||
|
|||||||
+16
-4
@@ -9,6 +9,9 @@ import org.gradle.api.InvalidUserCodeException
|
|||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.services.BuildService
|
import org.gradle.api.services.BuildService
|
||||||
import org.gradle.api.services.BuildServiceParameters
|
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 org.jetbrains.kotlin.gradle.utils.registerClassLoaderScopedBuildService
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
@@ -17,11 +20,20 @@ private typealias ToolingDiagnosticId = String
|
|||||||
private typealias GradleProjectPath = String
|
private typealias GradleProjectPath = String
|
||||||
|
|
||||||
internal abstract class KotlinToolingDiagnosticsCollector : BuildService<BuildServiceParameters.None> {
|
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())
|
private val reportedIds: MutableSet<ToolingDiagnosticId> = Collections.newSetFromMap(ConcurrentHashMap())
|
||||||
|
|
||||||
fun getDiagnosticsForProject(project: Project): Collection<ToolingDiagnostic> = diagnosticsFromProject[project.path].orEmpty()
|
fun getDiagnosticsForProject(project: Project): Collection<ToolingDiagnostic> {
|
||||||
fun getAllDiagnostics(): Collection<ToolingDiagnostic> = diagnosticsFromProject.values.flatten()
|
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) {
|
fun report(project: Project, diagnostic: ToolingDiagnostic) {
|
||||||
saveDiagnostic(project, diagnostic)
|
saveDiagnostic(project, diagnostic)
|
||||||
@@ -43,7 +55,7 @@ internal abstract class KotlinToolingDiagnosticsCollector : BuildService<BuildSe
|
|||||||
if (diagnostic.severity == ToolingDiagnostic.Severity.FATAL) {
|
if (diagnostic.severity == ToolingDiagnostic.Severity.FATAL) {
|
||||||
throw InvalidUserCodeException(diagnostic.message)
|
throw InvalidUserCodeException(diagnostic.message)
|
||||||
}
|
}
|
||||||
diagnosticsFromProject.compute(project.path) { _, previousListIfAny ->
|
rawDiagnosticsFromProject.compute(project.path) { _, previousListIfAny ->
|
||||||
previousListIfAny?.apply { add(diagnostic) } ?: mutableListOf(diagnostic)
|
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.Project
|
||||||
import org.gradle.api.internal.project.ProjectInternal
|
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.plugin.diagnostics.*
|
||||||
import org.jetbrains.kotlin.gradle.util.applyKotlinJvmPlugin
|
import org.jetbrains.kotlin.gradle.util.applyKotlinJvmPlugin
|
||||||
import org.jetbrains.kotlin.gradle.util.buildProject
|
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
|
||||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.ERROR
|
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.WARNING
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.extraProperties
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class DiagnosticsReportingFunctionalTest {
|
class DiagnosticsReportingFunctionalTest {
|
||||||
@@ -112,6 +114,39 @@ class DiagnosticsReportingFunctionalTest {
|
|||||||
|
|
||||||
root.checkDiagnostics("oncePerProjectAndOncePerBuildAreEquivalentForRoot")
|
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(
|
private fun buildProjectWithMockedCheckers(
|
||||||
|
|||||||
+1
-1
@@ -316,7 +316,7 @@ class KotlinMultiplatformAndroidGradlePluginCompatibilityHealthCheckTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun Project.assertNoWarningMessage() {
|
private fun Project.assertNoWarningMessage() {
|
||||||
val diagnostics = kotlinToolingDiagnosticsCollector.getAllDiagnostics()
|
val diagnostics = kotlinToolingDiagnosticsCollector.getDiagnosticsForProject(this)
|
||||||
if (diagnostics.isNotEmpty()) {
|
if (diagnostics.isNotEmpty()) {
|
||||||
fail("Expected no warning messages to be emitted. Found: $diagnostics")
|
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