Make context available to suppressors

We've found that the BindingContext is necessary for any meaningful suppressor.
This change adds the ability for suppressors to use the BindingContext when available.

Change-Id: I14d8148ef659eca273445bf0638bcdb8c3b21f02
This commit is contained in:
Jim S
2018-09-14 15:50:14 -07:00
committed by Mikhail Zarechenskiy
parent 5151659006
commit 88db93853f
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.util.ExtensionProvider
interface DiagnosticSuppressor {
fun isSuppressed(diagnostic: Diagnostic): Boolean
fun isSuppressed(diagnostic: Diagnostic, bindingContext: BindingContext?): Boolean = isSuppressed(diagnostic)
companion object {
val EP_NAME: ExtensionPointName<DiagnosticSuppressor> =
@@ -68,7 +69,7 @@ abstract class KotlinSuppressCache {
if (request is DiagnosticSuppressRequest) {
for (suppressor in diagnosticSuppressors.get()) {
if (suppressor.isSuppressed(request.diagnostic)) return true
if (isSuppressedByExtension(suppressor, request.diagnostic)) return true
}
}
@@ -77,6 +78,9 @@ abstract class KotlinSuppressCache {
return isSuppressedByAnnotated(request.suppressKey, request.severity, annotated, 0)
}
open fun isSuppressedByExtension(suppressor: DiagnosticSuppressor, diagnostic: Diagnostic): Boolean {
return suppressor.isSuppressed(diagnostic)
}
/*
The cache is optimized for the case where no warnings are suppressed (most frequent one)
@@ -246,4 +250,8 @@ class BindingContextSuppressCache(val context: BindingContext) : KotlinSuppressC
annotated.annotationEntries.mapNotNull { context.get(BindingContext.ANNOTATION, it) }
}
}
override fun isSuppressedByExtension(suppressor: DiagnosticSuppressor, diagnostic: Diagnostic): Boolean {
return suppressor.isSuppressed(diagnostic, context)
}
}