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 712ea2033b7..eb3fca4c7ff 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 @@ -22,12 +22,17 @@ 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.util.* +import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator +import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator +import org.jetbrains.kotlin.ir.util.IdSignatureComposer +import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.PsiSourceManager import org.jetbrains.kotlin.psi2ir.generators.GeneratorExtensions +import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl +import org.jetbrains.kotlin.psi2ir.generators.generateTypicalIrProviderList class Fir2IrConverter( private val moduleDescriptor: FirModuleDescriptor, @@ -256,7 +261,8 @@ class Fir2IrConverter( ): Fir2IrResult { val moduleDescriptor = FirModuleDescriptor(session) val symbolTable = SymbolTable(signaturer, irFactory) - val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor, extensions = generatorExtensions) + val typeTranslator = + TypeTranslatorImpl(symbolTable, languageVersionSettings, moduleDescriptor, extensions = generatorExtensions) val irBuiltIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable) FirBuiltinSymbols(irBuiltIns, moduleDescriptor.builtIns, symbolTable) val sourceManager = PsiSourceManager() 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 b714654b65c..52a7b71f42a 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 @@ -36,6 +36,8 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator import org.jetbrains.kotlin.psi2ir.PsiSourceManager +import org.jetbrains.kotlin.psi2ir.generators.DeclarationStubGeneratorImpl +import org.jetbrains.kotlin.psi2ir.generators.generateTypicalIrProviderList import org.jetbrains.kotlin.resolve.CleanableBindingContext class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory { @@ -68,9 +70,8 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory val functionFactory = IrFunctionFactory(psi2irContext.irBuiltIns, symbolTable) psi2irContext.irBuiltIns.functionFactory = functionFactory - val stubGenerator = DeclarationStubGenerator( - psi2irContext.moduleDescriptor, symbolTable, psi2irContext.irBuiltIns.languageVersionSettings, extensions - ) + val stubGenerator = + DeclarationStubGeneratorImpl(psi2irContext.moduleDescriptor, symbolTable, state.languageVersionSettings, extensions) val frontEndContext = object : TranslationPluginContext { override val moduleDescriptor: ModuleDescriptor get() = psi2irContext.moduleDescriptor @@ -224,13 +225,13 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory backendExtension: JvmBackendExtension, notifyCodegenStart: () -> Unit ) { - val irProviders = configureBuiltInsAndgenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, extensions) + val irProviders = configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, extensions) doGenerateFilesInternal( JvmIrBackendInput(state, irModuleFragment, symbolTable, sourceManager, phaseConfig, irProviders, extensions, backendExtension, notifyCodegenStart) ) } - fun configureBuiltInsAndgenerateIrProvidersInFrontendIRMode( + fun configureBuiltInsAndGenerateIrProvidersInFrontendIRMode( irModuleFragment: IrModuleFragment, symbolTable: SymbolTable, extensions: JvmGeneratorExtensions diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/compiler.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/compiler.kt index b2f62da625c..18fee60f04c 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/compiler.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/compiler.kt @@ -17,11 +17,11 @@ import org.jetbrains.kotlin.ir.backend.js.MainModule import org.jetbrains.kotlin.ir.backend.js.loadIr import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator -import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList import org.jetbrains.kotlin.ir.util.patchDeclarationParents import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.library.resolver.KotlinLibraryResolveResult import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.psi2ir.generators.generateTypicalIrProviderList import org.jetbrains.kotlin.wasm.ir.convertors.WasmIrToBinary import org.jetbrains.kotlin.wasm.ir.convertors.WasmIrToText import java.io.ByteArrayOutputStream diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt index 6e734ff1937..ec81dd3a93c 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext import org.jetbrains.kotlin.psi2ir.generators.GeneratorExtensions import org.jetbrains.kotlin.psi2ir.generators.ModuleGenerator +import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.utils.SmartList @@ -52,7 +53,7 @@ class Psi2IrTranslator( symbolTable: SymbolTable, extensions: GeneratorExtensions = GeneratorExtensions() ): GeneratorContext { - val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor, extensions = extensions) + val typeTranslator = TypeTranslatorImpl(symbolTable, languageVersionSettings, moduleDescriptor, extensions = extensions) return GeneratorContext( configuration, moduleDescriptor, diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ConstantValueGeneratorImpl.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ConstantValueGeneratorImpl.kt new file mode 100644 index 00000000000..511c1e1d339 --- /dev/null +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ConstantValueGeneratorImpl.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.psi2ir.generators + +import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor +import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET +import org.jetbrains.kotlin.ir.util.ConstantValueGenerator +import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable +import org.jetbrains.kotlin.ir.util.TypeTranslator +import org.jetbrains.kotlin.psi.psiUtil.endOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.resolve.source.PsiSourceElement +import org.jetbrains.kotlin.utils.addToStdlib.safeAs + +class ConstantValueGeneratorImpl( + moduleDescriptor: ModuleDescriptor, + symbolTable: ReferenceSymbolTable, + typeTranslator: TypeTranslator, +) : ConstantValueGenerator(moduleDescriptor, symbolTable, typeTranslator) { + override fun extractAnnotationOffsets(annotationDescriptor: AnnotationDescriptor): Pair { + val psi = annotationDescriptor.source.safeAs()?.psi + if (psi == null || psi.containingFile.fileType.isBinary) return UNDEFINED_OFFSET to UNDEFINED_OFFSET + return Pair(psi.startOffset, psi.endOffset) + } +} diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationStubGeneratorImpl.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationStubGeneratorImpl.kt new file mode 100644 index 00000000000..d58ee5d0220 --- /dev/null +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationStubGeneratorImpl.kt @@ -0,0 +1,48 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.psi2ir.generators + +import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.ir.declarations.lazy.LazyScopedTypeParametersResolver +import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns +import org.jetbrains.kotlin.ir.linkage.IrDeserializer +import org.jetbrains.kotlin.ir.linkage.IrProvider +import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator +import org.jetbrains.kotlin.ir.util.StubGeneratorExtensions +import org.jetbrains.kotlin.ir.util.SymbolTable +import org.jetbrains.kotlin.ir.util.TypeTranslator + +class DeclarationStubGeneratorImpl( + moduleDescriptor: ModuleDescriptor, + symbolTable: SymbolTable, + languageVersionSettings: LanguageVersionSettings, + extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY, +) : DeclarationStubGenerator(moduleDescriptor, symbolTable, extensions) { + override val typeTranslator: TypeTranslator = + TypeTranslatorImpl( + lazyTable, + languageVersionSettings, + moduleDescriptor, + { LazyScopedTypeParametersResolver(lazyTable) }, + true, + extensions + ) +} + +// In most cases, IrProviders list consist of an optional deserializer and a DeclarationStubGenerator. +fun generateTypicalIrProviderList( + moduleDescriptor: ModuleDescriptor, + irBuiltins: IrBuiltIns, + symbolTable: SymbolTable, + deserializer: IrDeserializer? = null, + extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY +): List { + val stubGenerator = DeclarationStubGeneratorImpl( + moduleDescriptor, symbolTable, irBuiltins.languageVersionSettings, extensions + ) + return listOfNotNull(deserializer, stubGenerator) +} diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt index 945a934e548..ea364a32613 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.ir.linkage.IrProvider import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator import org.jetbrains.kotlin.ir.util.StubGeneratorExtensions -import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList import org.jetbrains.kotlin.ir.util.patchDeclarationParents import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/TypeTranslatorImpl.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/TypeTranslatorImpl.kt new file mode 100644 index 00000000000..16edf96faa3 --- /dev/null +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/TypeTranslatorImpl.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.psi2ir.generators + +import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.ir.util.* +import org.jetbrains.kotlin.types.CommonSupertypes +import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.TypeApproximator + +class TypeTranslatorImpl( + symbolTable: ReferenceSymbolTable, + languageVersionSettings: LanguageVersionSettings, + moduleDescriptor: ModuleDescriptor, + typeParametersResolverBuilder: () -> TypeParametersResolver = { ScopedTypeParametersResolver() }, + enterTableScope: Boolean = false, + extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY, +) : TypeTranslator(symbolTable, languageVersionSettings, typeParametersResolverBuilder, enterTableScope, extensions) { + override val constantValueGenerator: ConstantValueGenerator = + ConstantValueGeneratorImpl(moduleDescriptor, symbolTable, this) + + private val typeApproximatorForNI = TypeApproximator(moduleDescriptor.builtIns) + + override fun approximateType(type: KotlinType): KotlinType = + typeApproximatorForNI.approximateDeclarationType(type, local = false, languageVersionSettings) + + override fun commonSupertype(types: Collection): KotlinType = + CommonSupertypes.commonSupertype(types) +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt index 1c936f77c9d..3fece329b0a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt @@ -14,21 +14,19 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.impl.* -import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.constants.* -import org.jetbrains.kotlin.resolve.source.PsiSourceElement import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.isError import org.jetbrains.kotlin.types.typeUtil.builtIns -import org.jetbrains.kotlin.utils.addToStdlib.safeAs -class ConstantValueGenerator( +abstract class ConstantValueGenerator( private val moduleDescriptor: ModuleDescriptor, private val symbolTable: ReferenceSymbolTable, private val typeTranslator: TypeTranslator, ) { + protected abstract fun extractAnnotationOffsets(annotationDescriptor: AnnotationDescriptor): Pair + private fun KotlinType.toIrType() = typeTranslator.translateType(this) fun generateConstantValueAsExpression( @@ -141,9 +139,7 @@ class ConstantValueGenerator( ?: throw AssertionError("No constructor for annotation class $annotationClassDescriptor") val primaryConstructorSymbol = symbolTable.referenceConstructor(primaryConstructorDescriptor) - val psi = annotationDescriptor.source.safeAs()?.psi - val startOffset = psi?.takeUnless { it.containingFile.fileType.isBinary }?.startOffset ?: UNDEFINED_OFFSET - val endOffset = psi?.takeUnless { it.containingFile.fileType.isBinary }?.endOffset ?: UNDEFINED_OFFSET + val (startOffset, endOffset) = extractAnnotationOffsets(annotationDescriptor) val irCall = IrConstructorCallImpl( startOffset, endOffset, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt index 4cfa44c0ad3..e9e6411d540 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.ir.util -import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET @@ -38,13 +37,12 @@ import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.addToStdlib.safeAs @OptIn(ObsoleteDescriptorBasedAPI::class) -class DeclarationStubGenerator( +abstract class DeclarationStubGenerator( val moduleDescriptor: ModuleDescriptor, val symbolTable: SymbolTable, - languageVersionSettings: LanguageVersionSettings, val extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY, ) : IrProvider { - private val lazyTable = symbolTable.lazyWrapper + protected val lazyTable = symbolTable.lazyWrapper var unboundSymbolGeneration: Boolean get() = lazyTable.stubGenerator != null @@ -52,15 +50,7 @@ class DeclarationStubGenerator( lazyTable.stubGenerator = if (value) this else null } - val typeTranslator: TypeTranslator = - TypeTranslator( - lazyTable, - languageVersionSettings, - moduleDescriptor, - { LazyScopedTypeParametersResolver(lazyTable) }, - true, - extensions - ) + abstract val typeTranslator: TypeTranslator private val facadeClassMap = mutableMapOf() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ExternalDependenciesGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ExternalDependenciesGenerator.kt index b68d078d741..20b7345f734 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ExternalDependenciesGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ExternalDependenciesGenerator.kt @@ -17,10 +17,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.analyzer.CompilationErrorException -import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.ir.declarations.IrDeclaration -import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns -import org.jetbrains.kotlin.ir.linkage.IrDeserializer import org.jetbrains.kotlin.ir.linkage.IrProvider import org.jetbrains.kotlin.ir.linkage.KotlinIrLinkerInternalException import org.jetbrains.kotlin.ir.symbols.IrSymbol @@ -63,17 +60,3 @@ fun List.getDeclaration(symbol: IrSymbol): IrDeclaration? = firstNotNullResult { provider -> provider.getDeclaration(symbol) } - -// In most cases, IrProviders list consist of an optional deserializer and a DeclarationStubGenerator. -fun generateTypicalIrProviderList( - moduleDescriptor: ModuleDescriptor, - irBuiltins: IrBuiltIns, - symbolTable: SymbolTable, - deserializer: IrDeserializer? = null, - extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY -): List { - val stubGenerator = DeclarationStubGenerator( - moduleDescriptor, symbolTable, irBuiltins.languageVersionSettings, extensions - ) - return listOfNotNull(deserializer, stubGenerator) -} \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt index 095b061aee1..5065cc7291c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt @@ -26,22 +26,23 @@ import org.jetbrains.kotlin.utils.threadLocal import java.util.* @OptIn(ObsoleteDescriptorBasedAPI::class) -class TypeTranslator( +abstract class TypeTranslator( private val symbolTable: ReferenceSymbolTable, val languageVersionSettings: LanguageVersionSettings, - moduleDescriptor: ModuleDescriptor, typeParametersResolverBuilder: () -> TypeParametersResolver = { ScopedTypeParametersResolver() }, private val enterTableScope: Boolean = false, private val extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY ) { - val constantValueGenerator: ConstantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable, this) + abstract val constantValueGenerator: ConstantValueGenerator + + protected abstract fun approximateType(type: KotlinType): KotlinType + + protected abstract fun commonSupertype(types: Collection): KotlinType private val typeParametersResolver by threadLocal { typeParametersResolverBuilder() } private val erasureStack = Stack() - private val typeApproximatorForNI = TypeApproximator(moduleDescriptor.builtIns) - fun enterScope(irElement: IrTypeParametersContainer) { typeParametersResolver.enterTypeParameterScope(irElement) if (enterTableScope) { @@ -155,7 +156,7 @@ class TypeTranslator( } private fun approximateUpperBounds(upperBounds: Collection, variance: Variance): IrTypeProjection { - val commonSupertype = CommonSupertypes.commonSupertype(upperBounds) + val commonSupertype = commonSupertype(upperBounds) return translateType(approximate(commonSupertype.replaceArgumentsWithStarProjections()), variance) } @@ -179,7 +180,7 @@ class TypeTranslator( // That's what old back-end effectively does. val typeConstructor = properlyApproximatedType.constructor if (typeConstructor is IntersectionTypeConstructor) { - val commonSupertype = CommonSupertypes.commonSupertype(typeConstructor.supertypes) + val commonSupertype = commonSupertype(typeConstructor.supertypes) return approximate(commonSupertype.replaceArgumentsWithStarProjections()) } @@ -194,11 +195,7 @@ class TypeTranslator( if (ktType.constructor.isDenotable && ktType.arguments.isEmpty()) ktType else - typeApproximatorForNI.approximateDeclarationType( - ktType, - local = false, - languageVersionSettings = languageVersionSettings - ) + approximateType(ktType) } else { // Hack to preserve *-projections in arguments in OI. // Expected to be removed as soon as OI is deprecated. diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index a39ecb3674d..35f6212ddf3 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt @@ -41,7 +41,10 @@ import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.descriptors.IrFunctionFactory import org.jetbrains.kotlin.ir.linkage.IrDeserializer import org.jetbrains.kotlin.ir.symbols.IrSymbol -import org.jetbrains.kotlin.ir.util.* +import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator +import org.jetbrains.kotlin.ir.util.IrMessageLogger +import org.jetbrains.kotlin.ir.util.SymbolTable +import org.jetbrains.kotlin.ir.util.noUnboundLeft import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy @@ -60,6 +63,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext +import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContextUtils import org.jetbrains.kotlin.storage.LockBasedStorageManager @@ -261,7 +265,7 @@ fun loadIr( val signaturer = IdSignatureDescriptor(mangler) val symbolTable = SymbolTable(signaturer, irFactory) val typeTranslator = - TypeTranslator(symbolTable, depsDescriptors.compilerConfiguration.languageVersionSettings, moduleDescriptor) + TypeTranslatorImpl(symbolTable, depsDescriptors.compilerConfiguration.languageVersionSettings, moduleDescriptor) val irBuiltIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable) val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) val irLinker = diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrTextDumpHandler.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrTextDumpHandler.kt index 205c682b4d8..4a39051bb63 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrTextDumpHandler.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrTextDumpHandler.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.psi2ir.generators.DeclarationStubGeneratorImpl import org.jetbrains.kotlin.test.backend.ir.IrBackendInput import org.jetbrains.kotlin.test.directives.CodegenTestDirectives import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.DUMP_EXTERNAL_CLASS @@ -86,7 +87,7 @@ class IrTextDumpHandler(testServices: TestServices) : AbstractIrHandler(testServ val mangler = JsManglerDesc val signaturer = IdSignatureDescriptor(mangler) val irModule = info.backendInput.irModuleFragment - val stubGenerator = DeclarationStubGenerator( + val stubGenerator = DeclarationStubGeneratorImpl( irModule.descriptor, SymbolTable(signaturer, IrFactoryImpl), // TODO module.languageVersionSettings diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt index d6c5b69a5ae..a6e4f844427 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt @@ -76,7 +76,7 @@ class Fir2IrResultsConverter( ).build() irModuleFragment.irBuiltins.functionFactory = IrFunctionFactory(irModuleFragment.irBuiltins, symbolTable) - val irProviders = codegenFactory.configureBuiltInsAndgenerateIrProvidersInFrontendIRMode( + val irProviders = codegenFactory.configureBuiltInsAndGenerateIrProvidersInFrontendIRMode( irModuleFragment, symbolTable, extensions diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt index 38c701f1909..fddf209fe63 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrGeneratorTestCase.kt @@ -34,12 +34,12 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.util.IdSignatureComposer import org.jetbrains.kotlin.ir.util.NameProvider import org.jetbrains.kotlin.ir.util.SymbolTable -import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator import org.jetbrains.kotlin.psi2ir.generators.GeneratorExtensions +import org.jetbrains.kotlin.psi2ir.generators.generateTypicalIrProviderList import org.jetbrains.kotlin.resolve.AnalyzingUtils import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.CompilerEnvironment @@ -48,7 +48,6 @@ import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.util.KtTestUtil.getAnnotationsJar import java.io.File -import java.util.* abstract class AbstractIrGeneratorTestCase : CodegenTestCase() { override fun doMultiFileTest(wholeFile: File, files: List) { diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt index 7ade4a7b952..602c03aa4fd 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.psi2ir.generators.DeclarationStubGeneratorImpl import org.jetbrains.kotlin.scripting.compiler.plugin.loadScriptConfiguration import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase @@ -54,7 +55,7 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() { val mangler = JsManglerDesc val signaturer = IdSignatureDescriptor(mangler) - val stubGenerator = DeclarationStubGenerator( + val stubGenerator = DeclarationStubGeneratorImpl( irModule.descriptor, SymbolTable(signaturer, IrFactoryImpl), // TODO myEnvironment.configuration.languageVersionSettings diff --git a/generators/build.gradle.kts b/generators/build.gradle.kts index ac1f859e942..496b8152213 100644 --- a/generators/build.gradle.kts +++ b/generators/build.gradle.kts @@ -37,6 +37,7 @@ dependencies { wasmApi(kotlinStdlib()) interpreterApi(project(":compiler:ir.tree")) interpreterApi(project(":compiler:ir.tree.impl")) + interpreterApi(project(":compiler:ir.psi2ir")) testCompile(builtinsSourceSet.output) testCompile(evaluateSourceSet.output) diff --git a/generators/interpreter/GenerateInterpreterMap.kt b/generators/interpreter/GenerateInterpreterMap.kt index fa7d47fdcd3..97c4598c54f 100644 --- a/generators/interpreter/GenerateInterpreterMap.kt +++ b/generators/interpreter/GenerateInterpreterMap.kt @@ -18,8 +18,11 @@ import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.types.impl.originalKotlinType -import org.jetbrains.kotlin.ir.util.* +import org.jetbrains.kotlin.ir.util.IdSignature +import org.jetbrains.kotlin.ir.util.IdSignatureComposer +import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.utils.Printer import java.io.File @@ -202,6 +205,6 @@ private fun getIrBuiltIns(): IrBuiltIns { override fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature? = null } val symbolTable = SymbolTable(signaturer, IrFactoryImpl) - val typeTranslator = TypeTranslator(symbolTable, languageSettings, moduleDescriptor) + val typeTranslator = TypeTranslatorImpl(symbolTable, languageSettings, moduleDescriptor) return IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable) } diff --git a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt index 6e44d8c0992..9099bbde064 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt @@ -55,6 +55,7 @@ import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStat import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator +import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.CompilerEnvironment import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource @@ -513,7 +514,7 @@ class GenerateIrRuntime { val mangler = JsManglerDesc val signaturer = IdSignatureDescriptor(mangler) val symbolTable = SymbolTable(signaturer, PersistentIrFactory()) - val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor) + val typeTranslator = TypeTranslatorImpl(symbolTable, languageVersionSettings, moduleDescriptor) val irBuiltIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable) val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) @@ -540,7 +541,7 @@ class GenerateIrRuntime { val mangler = JsManglerDesc val signaturer = IdSignatureDescriptor(mangler) val symbolTable = SymbolTable(signaturer, PersistentIrFactory()) - val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor) + val typeTranslator = TypeTranslatorImpl(symbolTable, languageVersionSettings, moduleDescriptor) val irBuiltIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable) val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsCoreScriptingCompiler.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsCoreScriptingCompiler.kt index 2e606576383..b86bfc21b7f 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsCoreScriptingCompiler.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsCoreScriptingCompiler.kt @@ -21,10 +21,10 @@ import org.jetbrains.kotlin.ir.backend.js.utils.NameTables import org.jetbrains.kotlin.ir.descriptors.IrFunctionFactory import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator import org.jetbrains.kotlin.ir.util.SymbolTable -import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator +import org.jetbrains.kotlin.psi2ir.generators.generateTypicalIrProviderList import org.jetbrains.kotlin.scripting.compiler.plugin.repl.ReplCodeAnalyzerBase import org.jetbrains.kotlin.serialization.js.ModuleKind import kotlin.script.experimental.api.valueOr diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt index bec45f501b0..c1bfa7b462c 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/repl/js/JsScriptDependencyCompiler.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.ir.descriptors.IrFunctionFactory import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl import org.jetbrains.kotlin.serialization.js.ModuleKind import org.jetbrains.kotlin.storage.LockBasedStorageManager @@ -41,7 +42,7 @@ class JsScriptDependencyCompiler( it.initialize(PackageFragmentProvider.Empty) } - val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor) + val typeTranslator = TypeTranslatorImpl(symbolTable, languageVersionSettings, moduleDescriptor) val irBuiltIns = IrBuiltIns(builtIns, typeTranslator, symbolTable) val functionFactory = IrFunctionFactory(irBuiltIns, symbolTable) irBuiltIns.functionFactory = functionFactory