Fir2Ir: introduce Fir2IrExtensions

This allows us to remove DeclarationStubGenerator from Fir2IrConverter,
thus reducing dependency on descriptor-based code.
This commit is contained in:
Georgy Bronnikov
2021-12-07 20:02:03 +03:00
committed by Alexander Udalov
parent 6bc01f031c
commit 3c3c1be543
14 changed files with 158 additions and 46 deletions
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.fir.FirAnalyzerFacade
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
import org.jetbrains.kotlin.fir.createSessionForTests
import org.jetbrains.kotlin.ir.backend.jvm.jvmResolveLibraries
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
@@ -113,10 +114,12 @@ object GenerationUtils {
emptyList(),
IrGenerationExtension.getInstances(project)
)
val extensions = JvmGeneratorExtensionsImpl(configuration)
val (moduleFragment, symbolTable, components) = firAnalyzerFacade.convertToIr(extensions)
val (moduleFragment, symbolTable, components) = firAnalyzerFacade.convertToIr(
JvmFir2IrExtensions(configuration)
)
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
val extensions = JvmGeneratorExtensionsImpl(configuration)
val codegenFactory = JvmIrCodegenFactory(
configuration,
configuration.get(CLIConfigurationKeys.PHASE_CONFIG),
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.diagnostics.KtDiagnostic
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
import org.jetbrains.kotlin.fir.backend.Fir2IrConverter
import org.jetbrains.kotlin.fir.backend.Fir2IrExtensions
import org.jetbrains.kotlin.fir.backend.Fir2IrResult
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler
@@ -36,7 +37,7 @@ abstract class AbstractFirAnalyzerFacade {
abstract fun runResolution(): List<FirFile>
abstract fun convertToIr(extensions: GeneratorExtensions): Fir2IrResult
abstract fun convertToIr(fir2IrExtensions: Fir2IrExtensions): Fir2IrResult
}
class FirAnalyzerFacade(
@@ -99,7 +100,7 @@ class FirAnalyzerFacade(
return collectedDiagnostics!!
}
override fun convertToIr(extensions: GeneratorExtensions): Fir2IrResult {
override fun convertToIr(fir2IrExtensions: Fir2IrExtensions): Fir2IrResult {
if (_scopeSession == null) runResolution()
val mangler = JvmDescriptorMangler(null)
val signaturer = JvmIdSignatureDescriptor(mangler)
@@ -111,8 +112,9 @@ class FirAnalyzerFacade(
return Fir2IrConverter.createModuleFragment(
session, _scopeSession!!, firFiles!! + commonFirFiles,
languageVersionSettings, mangler, signaturer,
extensions, FirJvmKotlinMangler(session), IrFactoryImpl,
languageVersionSettings, signaturer,
fir2IrExtensions,
FirJvmKotlinMangler(session), IrFactoryImpl,
FirJvmVisibilityConverter,
Fir2IrJvmSpecialAnnotationSymbolProvider(),
irGeneratorExtensions