FIR: Switch to FIR-based IrBuiltIns in FIR compilation

get rid of using old FE for builtins on FIR compilation
This commit is contained in:
Ilya Chernikov
2021-06-02 16:38:24 +02:00
committed by TeamCityServer
parent 3b20ec46ef
commit 01f26ec699
2 changed files with 14 additions and 22 deletions
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.fir.analysis.FirAnalyzerFacade
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
@@ -46,10 +47,18 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus
import org.jetbrains.kotlin.resolve.CompilerEnvironment
import org.jetbrains.kotlin.resolve.diagnostics.SimpleGenericDiagnostics
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
import org.jetbrains.kotlin.utils.newLinkedHashMapWithExpectedSize
import java.io.File
import kotlin.collections.List
import kotlin.collections.any
import kotlin.collections.emptyList
import kotlin.collections.flatten
import kotlin.collections.fold
import kotlin.collections.isNotEmpty
import kotlin.collections.map
import kotlin.collections.set
object FirKotlinToJvmBytecodeCompiler {
fun compileModulesUsingFrontendIR(
@@ -171,16 +180,9 @@ object FirKotlinToJvmBytecodeCompiler {
jvmGeneratorExtensions = extensions
)
// Create and initialize the module and its dependencies
val container = TopDownAnalyzerFacadeForJVM.createContainer(
project, ktFiles, NoScopeRecordCliBindingTrace(), environment.configuration, environment::createPackagePartProvider,
::FileBasedDeclarationProviderFactory, CompilerEnvironment,
TopDownAnalyzerFacadeForJVM.newModuleSearchScope(project, ktFiles), emptyList()
)
val generationState = GenerationState.Builder(
environment.project, ClassBuilderFactories.BINARIES,
container.get(), dummyBindingContext, ktFiles,
moduleFragment.descriptor, dummyBindingContext, ktFiles,
moduleConfiguration
).codegenFactory(
codegenFactory
@@ -30,8 +30,6 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.fir.analysis.FirAnalyzerFacade
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
@@ -41,9 +39,7 @@ import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.AnalyzingUtils
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.CompilerEnvironment
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
import org.jetbrains.kotlin.util.DummyLogger
import org.jetbrains.kotlin.util.Logger
import java.io.File
@@ -80,7 +76,7 @@ object GenerationUtils {
): GenerationState {
val project = files.first().project
val state = if (configuration.getBoolean(CommonConfigurationKeys.USE_FIR)) {
compileFilesUsingFrontendIR(project, files, configuration, classBuilderFactory, packagePartProvider, trace)
compileFilesUsingFrontendIR(project, files, configuration, classBuilderFactory, packagePartProvider)
} else {
compileFilesUsingStandardMode(project, files, configuration, classBuilderFactory, packagePartProvider, trace)
}
@@ -101,8 +97,7 @@ object GenerationUtils {
files: List<KtFile>,
configuration: CompilerConfiguration,
classBuilderFactory: ClassBuilderFactory,
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
trace: BindingTrace
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider
): GenerationState {
PsiElementFinder.EP.getPoint(project).unregisterExtension(JavaElementFinder::class.java)
@@ -123,13 +118,8 @@ object GenerationUtils {
jvmGeneratorExtensions = extensions
)
// Create and initialize the test module and its dependencies
val container = TopDownAnalyzerFacadeForJVM.createContainer(
project, files, trace, configuration, packagePartProvider, ::FileBasedDeclarationProviderFactory, CompilerEnvironment,
TopDownAnalyzerFacadeForJVM.newModuleSearchScope(project, files), emptyList()
)
val generationState = GenerationState.Builder(
project, classBuilderFactory, container.get<ModuleDescriptor>(), dummyBindingContext, files, configuration
project, classBuilderFactory, moduleFragment.descriptor, dummyBindingContext, files, configuration
).codegenFactory(
codegenFactory
).isIrBackend(