[Gradle] Allow using KotlinToolingDiagnosticsCollector in transform actions
Related to KT-56832
This commit is contained in:
committed by
Space Team
parent
e6ae3f1d85
commit
271d767138
+8
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin.diagnostics
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.services.BuildService
|
||||
import org.gradle.api.services.BuildServiceParameters
|
||||
@@ -42,6 +43,13 @@ internal abstract class KotlinToolingDiagnosticsCollector : BuildService<BuildSe
|
||||
}
|
||||
}
|
||||
|
||||
fun report(transform: TransformActionUsingKotlinToolingDiagnostics<*>, logger: Logger, diagnostic: ToolingDiagnostic) {
|
||||
val options = transform.parameters.diagnosticRenderingOptions.get()
|
||||
if (!diagnostic.isSuppressed(options)) {
|
||||
renderReportedDiagnostic(diagnostic, logger, options)
|
||||
}
|
||||
}
|
||||
|
||||
fun reportOncePerGradleProject(fromProject: Project, diagnostic: ToolingDiagnostic, key: ToolingDiagnosticId = diagnostic.id) {
|
||||
if (reportedIds.add("${fromProject.path}#$key")) {
|
||||
handleDiagnostic(fromProject, diagnostic)
|
||||
|
||||
+2
-1
@@ -9,13 +9,14 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.logging.configuration.ShowStacktrace
|
||||
import org.jetbrains.kotlin.gradle.internal.isInIdeaSync
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||
import java.io.Serializable
|
||||
|
||||
internal class ToolingDiagnosticRenderingOptions(
|
||||
val useParsableFormat: Boolean,
|
||||
val suppressedWarningIds: List<String>,
|
||||
val suppressedErrorIds: List<String>,
|
||||
val showStacktrace: Boolean,
|
||||
) {
|
||||
) : Serializable {
|
||||
companion object {
|
||||
fun forProject(project: Project): ToolingDiagnosticRenderingOptions {
|
||||
return with(project.kotlinPropertiesProvider) {
|
||||
|
||||
+34
@@ -5,7 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.diagnostics
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.Task
|
||||
import org.gradle.api.artifacts.transform.TransformAction
|
||||
import org.gradle.api.artifacts.transform.TransformParameters
|
||||
import org.gradle.api.artifacts.transform.TransformSpec
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.gradle.api.logging.Logging
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.tasks.Internal
|
||||
|
||||
@@ -20,3 +26,31 @@ internal interface UsesKotlinToolingDiagnostics : Task {
|
||||
toolingDiagnosticsCollector.get().report(this, diagnostic)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this interface to make your [TransformAction] able to report [ToolingDiagnostic].
|
||||
* You must use [setupTransformActionToolingDiagnostics] to set up [TransformActionUsingKotlinToolingDiagnostics.Parameters].
|
||||
*/
|
||||
internal interface TransformActionUsingKotlinToolingDiagnostics<P : TransformActionUsingKotlinToolingDiagnostics.Parameters> :
|
||||
TransformAction<P> {
|
||||
interface Parameters : TransformParameters {
|
||||
@get:Internal
|
||||
val toolingDiagnosticsCollector: Property<KotlinToolingDiagnosticsCollector>
|
||||
|
||||
@get:Internal
|
||||
val diagnosticRenderingOptions: Property<ToolingDiagnosticRenderingOptions>
|
||||
}
|
||||
|
||||
fun reportDiagnostic(diagnostic: ToolingDiagnostic) {
|
||||
parameters.toolingDiagnosticsCollector.get().report(this, logger, diagnostic)
|
||||
}
|
||||
|
||||
companion object {
|
||||
internal val logger: Logger = Logging.getLogger(Project::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun TransformSpec<out TransformActionUsingKotlinToolingDiagnostics.Parameters>.setupTransformActionToolingDiagnostics(project: Project) {
|
||||
parameters.toolingDiagnosticsCollector.set(project.kotlinToolingDiagnosticsCollectorProvider)
|
||||
parameters.diagnosticRenderingOptions.set(ToolingDiagnosticRenderingOptions.forProject(project))
|
||||
}
|
||||
Reference in New Issue
Block a user