From db7a7f6cd3d11b41723a7a29d00e534824bd022b Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 14 May 2020 15:51:20 +0300 Subject: [PATCH] [FIR2IR] Move facade classes generation to the main converter --- .../cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt | 2 +- .../jetbrains/kotlin/fir/backend/Fir2IrConverter.kt | 11 ++++++++++- .../kotlin/backend/jvm/JvmIrCodegenFactory.kt | 8 -------- .../org/jetbrains/kotlin/codegen/GenerationUtils.kt | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt index 2a2d557652e..4603c9af7ab 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt @@ -350,7 +350,7 @@ object KotlinToJVMBytecodeCompiler { Fir2IrConverter.createModuleFragment( session, resolveTransformer.scopeSession, firFiles, moduleConfiguration.languageVersionSettings, signaturer = signaturer, - generatorExtensions = JvmGeneratorExtensions(generateFacades = false) + generatorExtensions = JvmGeneratorExtensions() ) val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 557b201bf54..fdef7159224 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns +import org.jetbrains.kotlin.ir.descriptors.WrappedDeclarationDescriptor import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.PsiSourceManager @@ -187,9 +188,11 @@ class Fir2IrConverter( irFiles += converter.registerFileAndClasses(firFile) } val irModuleFragment = IrModuleFragmentImpl(moduleDescriptor, builtIns, irFiles) + val irProviders = + generateTypicalIrProviderList(irModuleFragment.descriptor, builtIns, symbolTable, extensions = generatorExtensions) val externalDependenciesGenerator = ExternalDependenciesGenerator( symbolTable, - generateTypicalIrProviderList(irModuleFragment.descriptor, builtIns, symbolTable, extensions = generatorExtensions), + irProviders, languageVersionSettings ) // Necessary call to generate built-in IR classes @@ -210,6 +213,12 @@ class Fir2IrConverter( } externalDependenciesGenerator.generateUnboundSymbolsAsDependencies() + val stubGenerator = irProviders.filterIsInstance().first() + for (descriptor in symbolTable.wrappedTopLevelCallableDescriptors()) { + val parentClass = stubGenerator.generateOrGetFacadeClass(descriptor as WrappedDeclarationDescriptor<*>) + descriptor.owner.parent = parentClass ?: continue + } + return Fir2IrResult(irModuleFragment, symbolTable, sourceManager, components) } } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt index 775038637ba..8c62f44467b 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt @@ -28,8 +28,6 @@ import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.descriptors.IrFunctionFactory -import org.jetbrains.kotlin.ir.descriptors.WrappedDeclarationDescriptor -import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList import org.jetbrains.kotlin.name.FqName @@ -55,12 +53,6 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory irModuleFragment.descriptor, irModuleFragment.irBuiltins, symbolTable, extensions = extensions ) - val stubGenerator = irProviders.filterIsInstance().first() - for (descriptor in symbolTable.wrappedTopLevelCallableDescriptors()) { - val parentClass = stubGenerator.generateOrGetFacadeClass(descriptor as WrappedDeclarationDescriptor<*>) - descriptor.owner.parent = parentClass ?: throw AssertionError("Facade class for ${descriptor.name} not found") - } - JvmBackendFacade.doGenerateFilesInternal( state, irModuleFragment, symbolTable, sourceManager, phaseConfig, irProviders, extensions, createCodegen ) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt index 99ccafb78c9..ec96d1e78b5 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt @@ -146,7 +146,7 @@ object GenerationUtils { configuration.languageVersionSettings, signaturer = IdSignatureDescriptor(JvmManglerDesc()), // TODO: differentiate JVM resolve from other targets, such as JS resolve. - generatorExtensions = JvmGeneratorExtensions(generateFacades = false) + generatorExtensions = JvmGeneratorExtensions() ) val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext