[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
@@ -59,7 +59,7 @@ object GenerationUtils {
files: List<KtFile>,
environment: KotlinCoreEnvironment,
classBuilderFactory: ClassBuilderFactory = ClassBuilderFactories.TEST,
trace: BindingTrace = NoScopeRecordCliBindingTrace()
trace: BindingTrace = NoScopeRecordCliBindingTrace(environment.project)
): GenerationState =
compileFiles(files, environment.configuration, classBuilderFactory, environment::createPackagePartProvider, trace)
@@ -70,7 +70,7 @@ object GenerationUtils {
configuration: CompilerConfiguration,
classBuilderFactory: ClassBuilderFactory,
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
trace: BindingTrace = NoScopeRecordCliBindingTrace()
trace: BindingTrace = NoScopeRecordCliBindingTrace(files.first().project)
): GenerationState {
val project = files.first().project
val state = if (configuration.getBoolean(CommonConfigurationKeys.USE_FIR)) {
@@ -128,7 +128,7 @@ object GenerationUtils {
irGeneratorExtensions = emptyList()
)
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
val dummyBindingContext = NoScopeRecordCliBindingTrace(project).bindingContext
val codegenFactory = JvmIrCodegenFactory(
configuration,
@@ -33,7 +33,7 @@ object JvmResolveUtil {
targetEnvironment: TargetEnvironment = CompilerEnvironment
): ComponentProvider =
TopDownAnalyzerFacadeForJVM.createContainer(
environment.project, files, NoScopeRecordCliBindingTrace(),
environment.project, files, NoScopeRecordCliBindingTrace(environment.project),
environment.configuration, { PackagePartProvider.Empty }, ::FileBasedDeclarationProviderFactory,
targetEnvironment
)
@@ -52,7 +52,7 @@ object JvmResolveUtil {
files: Collection<KtFile>,
configuration: CompilerConfiguration,
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
trace: BindingTrace = CliBindingTrace(),
trace: BindingTrace = CliBindingTrace(project),
klibList: List<KotlinLibrary> = emptyList()
): AnalysisResult {
for (file in files) {
@@ -93,7 +93,7 @@ object JvmResolveUtil {
files: Collection<KtFile>,
configuration: CompilerConfiguration,
packagePartProviderFactory: (GlobalSearchScope) -> PackagePartProvider,
trace: BindingTrace = CliBindingTrace(),
trace: BindingTrace = CliBindingTrace(project),
klibList: List<KotlinLibrary> = emptyList()
): AnalysisResult {
return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(