[Frontend] Make DiagnosticSuppressor a project-level extension

Originally it was an application-level component, which caused non-trivial
  logic and cognitive load to carefully handle those extensions to avoid
  memory leaks.

6740a596 introduced a way to easily register `DiagnosticSuppressor` to
  project, and this commit continues this work, making it a proper
  project-level extension

A lot of changes caused by the fact, that this extension is needed to be
  obtained from `BindingContext` (see `BindingContextSuppressCache` and
  its usages), so almost all changes are introducing `Project` to
  `BindingContext`

^KT-66449 Fixed
This commit is contained in:
Dmitriy Novozhilov
2024-03-08 08:52:28 +02:00
committed by Space Team
parent a552238874
commit d352cc9d96
45 changed files with 165 additions and 127 deletions
@@ -40,9 +40,10 @@ class MutableDiagnosticsTest : KotlinTestWithEnvironment() {
get() = bindingContext.diagnostics
fun testPropagatingModification() {
val base = BindingTraceContext()
val middle = DelegatingBindingTrace(base.bindingContext, "middle")
val derived = DelegatingBindingTrace(middle.bindingContext, "derived")
val project = environment.project
val base = BindingTraceContext(project)
val middle = DelegatingBindingTrace(base.bindingContext, "middle", project)
val derived = DelegatingBindingTrace(middle.bindingContext, "derived", project)
Assert.assertTrue(base.diagnostics.isEmpty())
Assert.assertTrue(middle.diagnostics.isEmpty())
@@ -83,9 +84,10 @@ class MutableDiagnosticsTest : KotlinTestWithEnvironment() {
}
fun testCaching() {
val base = BindingTraceContext()
val middle = DelegatingBindingTrace(base.bindingContext, "middle")
val derived = DelegatingBindingTrace(middle.bindingContext, "derived")
val project = environment.project
val base = BindingTraceContext(project)
val middle = DelegatingBindingTrace(base.bindingContext, "middle", project)
val derived = DelegatingBindingTrace(middle.bindingContext, "derived", project)
base.reportDiagnostic()
middle.reportDiagnostic()