[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
|
package org.jetbrains.kotlin.gradle.plugin.diagnostics
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.logging.Logger
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.services.BuildService
|
import org.gradle.api.services.BuildService
|
||||||
import org.gradle.api.services.BuildServiceParameters
|
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) {
|
fun reportOncePerGradleProject(fromProject: Project, diagnostic: ToolingDiagnostic, key: ToolingDiagnosticId = diagnostic.id) {
|
||||||
if (reportedIds.add("${fromProject.path}#$key")) {
|
if (reportedIds.add("${fromProject.path}#$key")) {
|
||||||
handleDiagnostic(fromProject, diagnostic)
|
handleDiagnostic(fromProject, diagnostic)
|
||||||
|
|||||||
+2
-1
@@ -9,13 +9,14 @@ import org.gradle.api.Project
|
|||||||
import org.gradle.api.logging.configuration.ShowStacktrace
|
import org.gradle.api.logging.configuration.ShowStacktrace
|
||||||
import org.jetbrains.kotlin.gradle.internal.isInIdeaSync
|
import org.jetbrains.kotlin.gradle.internal.isInIdeaSync
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||||
|
import java.io.Serializable
|
||||||
|
|
||||||
internal class ToolingDiagnosticRenderingOptions(
|
internal class ToolingDiagnosticRenderingOptions(
|
||||||
val useParsableFormat: Boolean,
|
val useParsableFormat: Boolean,
|
||||||
val suppressedWarningIds: List<String>,
|
val suppressedWarningIds: List<String>,
|
||||||
val suppressedErrorIds: List<String>,
|
val suppressedErrorIds: List<String>,
|
||||||
val showStacktrace: Boolean,
|
val showStacktrace: Boolean,
|
||||||
) {
|
) : Serializable {
|
||||||
companion object {
|
companion object {
|
||||||
fun forProject(project: Project): ToolingDiagnosticRenderingOptions {
|
fun forProject(project: Project): ToolingDiagnosticRenderingOptions {
|
||||||
return with(project.kotlinPropertiesProvider) {
|
return with(project.kotlinPropertiesProvider) {
|
||||||
|
|||||||
+34
@@ -5,7 +5,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.diagnostics
|
package org.jetbrains.kotlin.gradle.plugin.diagnostics
|
||||||
|
|
||||||
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.Task
|
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.provider.Property
|
||||||
import org.gradle.api.tasks.Internal
|
import org.gradle.api.tasks.Internal
|
||||||
|
|
||||||
@@ -20,3 +26,31 @@ internal interface UsesKotlinToolingDiagnostics : Task {
|
|||||||
toolingDiagnosticsCollector.get().report(this, diagnostic)
|
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