From d5286874bdaff761ba8b9632c6eec8914cb9313e Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Tue, 26 Jun 2018 14:49:08 +0300 Subject: [PATCH] Fix circular dependency: TypeTranslator <-> ConstantValueGenerator TODO proper DI? --- .../lower/KCallableNamePropertyLowering.kt | 4 ++-- .../kotlin/backend/common/lower/LowerUtils.kt | 4 +--- .../kotlin/ir/backend/js/JsIntrinsics.kt | 2 +- .../kotlin/psi2ir/Psi2IrTranslator.kt | 6 +++--- .../psi2ir/generators}/AnnotationGenerator.kt | 18 ++++++------------ .../kotlin/psi2ir/generators/BodyGenerator.kt | 3 +-- .../psi2ir/generators/DeclarationGenerator.kt | 3 +-- .../psi2ir/generators/GeneratorContext.kt | 15 ++++++++++++++- .../psi2ir/generators/ModuleGenerator.kt | 3 +-- .../psi2ir/generators/StatementGenerator.kt | 6 ++---- .../transformations/InsertImplicitCasts.kt | 9 +++++---- .../kotlin/ir/builders/IrGenerator.kt | 8 ++++++-- .../kotlin/ir/descriptors/IrBuiltIns.kt | 9 +++++---- .../kotlin/ir/util/ConstantValueGenerator.kt | 13 ++++--------- .../kotlin/ir/util/DeclarationStubGenerator.kt | 8 +++++++- .../ir/util/ExternalDependenciesGenerator.kt | 2 +- .../jetbrains/kotlin/ir/util/TypeTranslator.kt | 4 +--- 17 files changed, 61 insertions(+), 56 deletions(-) rename compiler/ir/{ir.tree/src/org/jetbrains/kotlin/ir/util => ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators}/AnnotationGenerator.kt (81%) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KCallableNamePropertyLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KCallableNamePropertyLowering.kt index d965cdefaac..287f7205b41 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KCallableNamePropertyLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KCallableNamePropertyLowering.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.builtins.getFunctionalClassKind import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope -import org.jetbrains.kotlin.ir.builders.IrGeneratorContext +import org.jetbrains.kotlin.ir.builders.IrGeneratorContextBase import org.jetbrains.kotlin.ir.builders.Scope import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.expressions.IrCall @@ -104,5 +104,5 @@ private class KCallableNamePropertyTransformer(val lower: KCallableNamePropertyL endOffset ) - class IrLoweringContext(backendContext: BackendContext) : IrGeneratorContext(backendContext.irBuiltIns) + class IrLoweringContext(backendContext: BackendContext) : IrGeneratorContextBase(backendContext.irBuiltIns) } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt index ecf392b5531..fde30783c33 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt @@ -28,7 +28,6 @@ import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* -import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid @@ -40,10 +39,9 @@ import org.jetbrains.kotlin.resolve.OverridingUtil import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.MemberScopeImpl -import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.Printer -class IrLoweringContext(backendContext: BackendContext) : IrGeneratorContext(backendContext.irBuiltIns) +class IrLoweringContext(backendContext: BackendContext) : IrGeneratorContextBase(backendContext.irBuiltIns) class DeclarationIrBuilder( backendContext: BackendContext, diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIntrinsics.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIntrinsics.kt index 4afd1ca7c6e..de6f0f91ebc 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIntrinsics.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIntrinsics.kt @@ -25,7 +25,7 @@ class JsIntrinsics( context: JsIrBackendContext ) { - private val stubBuilder = DeclarationStubGenerator(context.symbolTable, JsLoweredDeclarationOrigin.JS_INTRINSICS_STUB) + private val stubBuilder = DeclarationStubGenerator(context.module, context.symbolTable, JsLoweredDeclarationOrigin.JS_INTRINSICS_STUB) // Equality operations: 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 9780d59494f..c56a78b2d01 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 @@ -19,12 +19,12 @@ package org.jetbrains.kotlin.psi2ir import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrModuleFragment -import org.jetbrains.kotlin.ir.util.AnnotationGenerator import org.jetbrains.kotlin.ir.util.patchDeclarationParents +import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi2ir.generators.AnnotationGenerator import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext import org.jetbrains.kotlin.psi2ir.generators.ModuleGenerator -import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.psi2ir.transformations.insertImplicitCasts import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.utils.SmartList @@ -66,7 +66,7 @@ class Psi2IrTranslator(val configuration: Psi2IrConfiguration = Psi2IrConfigurat } private fun generateAnnotationsForDeclarations(context: GeneratorContext, irElement: IrElement) { - val annotationGenerator = AnnotationGenerator(context.moduleDescriptor, context.symbolTable) + val annotationGenerator = AnnotationGenerator(context) irElement.acceptVoid(annotationGenerator) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AnnotationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnnotationGenerator.kt similarity index 81% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AnnotationGenerator.kt rename to compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnnotationGenerator.kt index d27c6a8dcf5..2a514ff3759 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AnnotationGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnnotationGenerator.kt @@ -3,9 +3,8 @@ * that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.ir.util +package org.jetbrains.kotlin.psi2ir.generators -import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PropertySetterDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget @@ -13,16 +12,13 @@ import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid -import org.jetbrains.kotlin.types.KotlinType class AnnotationGenerator( - moduleDescriptor: ModuleDescriptor, - symbolTable: SymbolTable + context: GeneratorContext ) : IrElementVisitorVoid { - private val typeTranslator = TypeTranslator(moduleDescriptor, symbolTable) - private val scopedTypeParameterResolver = ScopedTypeParametersResolver() - private val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable, scopedTypeParameterResolver) + private val typeTranslator = context.typeTranslator + private val constantValueGenerator = context.constantValueGenerator override fun visitElement(element: IrElement) { element.acceptChildrenVoid(this) @@ -30,12 +26,12 @@ class AnnotationGenerator( override fun visitDeclaration(declaration: IrDeclaration) { if (declaration is IrTypeParametersContainer) { - scopedTypeParameterResolver.enterTypeParameterScope(declaration) + typeTranslator.enterScope(declaration) } generateAnnotationsForDeclaration(declaration) visitElement(declaration) if (declaration is IrTypeParametersContainer) { - scopedTypeParameterResolver.leaveTypeParameterScope() + typeTranslator.leaveScope() } } @@ -68,8 +64,6 @@ class AnnotationGenerator( } } - private fun KotlinType.toIrType() = typeTranslator.translateType(this) - private fun isAnnotationTargetMatchingDeclaration(target: AnnotationUseSiteTarget?, element: IrElement): Boolean = when (element) { is IrProperty -> diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt index 5c578d618a9..fed8c3218e2 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.ir.builders.Scope import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrSymbol -import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset @@ -40,7 +39,7 @@ class BodyGenerator( val scopeOwner: DeclarationDescriptor get() = scopeOwnerSymbol.descriptor - private val typeTranslator = TypeTranslator(context.moduleDescriptor, context.symbolTable) + private val typeTranslator = context.typeTranslator private fun KotlinType.toIrType() = typeTranslator.translateType(this) override val scope = Scope(scopeOwnerSymbol) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt index 1af3c781bb5..4ba2410311a 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrPropertyImpl import org.jetbrains.kotlin.ir.declarations.impl.IrTypeAliasImpl import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrSymbol -import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.ir.util.withScope import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset @@ -36,7 +35,7 @@ import org.jetbrains.kotlin.types.KotlinType class DeclarationGenerator(override val context: GeneratorContext) : Generator { - private val typeTranslator = TypeTranslator(context.moduleDescriptor, context.symbolTable) + private val typeTranslator = context.typeTranslator fun KotlinType.toIrType() = typeTranslator.translateType(this) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt index 4a97c82f505..3db9a3490f0 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/GeneratorContext.kt @@ -21,7 +21,9 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.NotFoundClasses import org.jetbrains.kotlin.ir.builders.IrGeneratorContext import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns +import org.jetbrains.kotlin.ir.util.ConstantValueGenerator import org.jetbrains.kotlin.ir.util.SymbolTable +import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.PsiSourceManager import org.jetbrains.kotlin.resolve.BindingContext @@ -32,7 +34,18 @@ class GeneratorContext( val moduleDescriptor: ModuleDescriptor, val bindingContext: BindingContext, val symbolTable: SymbolTable = SymbolTable() -) : IrGeneratorContext(IrBuiltIns(moduleDescriptor.builtIns, symbolTable)) { +) : IrGeneratorContext() { + + val constantValueGenerator: ConstantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable) + val typeTranslator: TypeTranslator = TypeTranslator(symbolTable) + + init { + typeTranslator.constantValueGenerator = constantValueGenerator + constantValueGenerator.typeTranslator = typeTranslator + } + + override val irBuiltIns: IrBuiltIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable) + val sourceManager = PsiSourceManager() // TODO: inject a correct StorageManager instance, or store NotFoundClasses inside ModuleDescriptor 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 8f87250ca69..75720ce09f4 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 @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl -import org.jetbrains.kotlin.ir.util.ConstantValueGenerator import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.BindingContext @@ -28,7 +27,7 @@ import org.jetbrains.kotlin.resolve.lazy.descriptors.findPackageFragmentForFile class ModuleGenerator(override val context: GeneratorContext) : Generator { - private val constantValueGenerator = ConstantValueGenerator(context.moduleDescriptor, context.symbolTable, null) + private val constantValueGenerator = context.constantValueGenerator fun generateModuleFragment(ktFiles: Collection): IrModuleFragment = generateModuleFragmentWithoutDependencies(ktFiles).also { irModule -> diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt index 808a3637716..6e7606fa5a2 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt @@ -28,8 +28,6 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrTypeAliasImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrSymbol -import org.jetbrains.kotlin.ir.util.ConstantValueGenerator -import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset @@ -56,7 +54,7 @@ class StatementGenerator( val scopeOwner: DeclarationDescriptor get() = bodyGenerator.scopeOwner - private val typeTranslator = TypeTranslator(context.moduleDescriptor, context.symbolTable) + private val typeTranslator = context.typeTranslator fun KotlinType.toIrType() = typeTranslator.translateType(this) @@ -222,7 +220,7 @@ class StatementGenerator( ) fun generateConstantExpression(expression: KtExpression, constant: CompileTimeConstant<*>): IrExpression = - ConstantValueGenerator(context.moduleDescriptor, context.symbolTable, null).generateConstantValueAsExpression( + context.constantValueGenerator.generateConstantValueAsExpression( expression.startOffset, expression.endOffset, constant.toConstantValue(getInferredTypeWithImplicitCastsOrFail(expression)) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/transformations/InsertImplicitCasts.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/transformations/InsertImplicitCasts.kt index 96e0cdc870f..895422b060b 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/transformations/InsertImplicitCasts.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/transformations/InsertImplicitCasts.kt @@ -19,13 +19,15 @@ package org.jetbrains.kotlin.psi2ir.transformations import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement -import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrField +import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classifierOrFail import org.jetbrains.kotlin.ir.types.impl.originalKotlinType -import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.psi2ir.containsNull import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext @@ -45,9 +47,8 @@ class InsertImplicitCasts(context: GeneratorContext) : IrElementTransformerVoid( private val builtIns = context.builtIns private val irBuiltIns = context.irBuiltIns - private val symbolTable = context.symbolTable - private val typeTranslator = TypeTranslator(context.moduleDescriptor, symbolTable) + private val typeTranslator = context.typeTranslator private fun KotlinType.toIrType() = typeTranslator.translateType(this) override fun visitCallableReference(expression: IrCallableReference): IrExpression = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/IrGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/IrGenerator.kt index 39f66a16594..9c934935d79 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/IrGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/IrGenerator.kt @@ -27,6 +27,10 @@ interface IrGeneratorWithScope : IrGenerator { val scope: Scope } -open class IrGeneratorContext(val irBuiltIns: IrBuiltIns) { +abstract class IrGeneratorContext { + abstract val irBuiltIns: IrBuiltIns + val builtIns: KotlinBuiltIns get() = irBuiltIns.builtIns -} \ No newline at end of file +} + +open class IrGeneratorContextBase(override val irBuiltIns: IrBuiltIns) : IrGeneratorContext() \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt index c4872de653e..0b43c1632cb 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt @@ -38,9 +38,11 @@ import org.jetbrains.kotlin.types.SimpleType import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.typeUtil.makeNullable -class IrBuiltIns(val builtIns: KotlinBuiltIns, outerSymbolTable: SymbolTable?) { - - constructor(builtIns: KotlinBuiltIns) : this(builtIns, null) +class IrBuiltIns( + val builtIns: KotlinBuiltIns, + private val typeTranslator: TypeTranslator, + outerSymbolTable: SymbolTable? = null +) { private val builtInsModule = builtIns.builtInsModule @@ -49,7 +51,6 @@ class IrBuiltIns(val builtIns: KotlinBuiltIns, outerSymbolTable: SymbolTable?) { private val symbolTable = outerSymbolTable ?: SymbolTable() private val stubBuilder = DeclarationStubGenerator(builtInsModule, symbolTable, IrDeclarationOrigin.IR_BUILTINS_STUB) - private val typeTranslator = TypeTranslator(builtInsModule, symbolTable) private fun ClassDescriptor.toIrSymbol() = symbolTable.referenceClass(this) private fun KotlinType.toIrType() = typeTranslator.translateType(this) 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 56bba04d291..44acbc1cebd 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 @@ -7,13 +7,13 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.impl.* +import org.jetbrains.kotlin.ir.types.classifierOrFail import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.constants.* @@ -24,11 +24,10 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs class ConstantValueGenerator( private val moduleDescriptor: ModuleDescriptor, - private val symbolTable: SymbolTable, - private val scopedTypeParameterResolver: ScopedTypeParametersResolver? + private val symbolTable: SymbolTable ) { - private val typeTranslator = TypeTranslator(moduleDescriptor, symbolTable) + lateinit var typeTranslator: TypeTranslator private fun KotlinType.toIrType() = typeTranslator.translateType(this) @@ -90,14 +89,10 @@ class ConstantValueGenerator( val classifierDescriptor = classifierKtType.constructor.declarationDescriptor ?: throw AssertionError("Unexpected KClassValue: $classifierKtType") - val typeParameterSymbol = classifierDescriptor.safeAs()?.let { - scopedTypeParameterResolver?.resolveScopedTypeParameter(it) - } - IrClassReferenceImpl( startOffset, endOffset, constantValue.getType(moduleDescriptor).toIrType(), - typeParameterSymbol ?: symbolTable.referenceClassifier(classifierDescriptor), + classifierDescriptor.defaultType.toIrType().classifierOrFail, classifierKtType.toIrType() ) } 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 54895eb9d1d..5c4c3d8850c 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 @@ -36,7 +36,13 @@ class DeclarationStubGenerator( val symbolTable: SymbolTable, val origin: IrDeclarationOrigin ) { - private val typeTranslator = TypeTranslator(moduleDescriptor, symbolTable) + private val typeTranslator = TypeTranslator(symbolTable) + private val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable) + + init { + typeTranslator.constantValueGenerator = constantValueGenerator + constantValueGenerator.typeTranslator = typeTranslator + } fun generateEmptyModuleFragmentStub(descriptor: ModuleDescriptor, irBuiltIns: IrBuiltIns): IrModuleFragment = IrModuleFragmentImpl(descriptor, irBuiltIns) 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 bc862bfbe58..e80d8c21a4c 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 @@ -29,7 +29,7 @@ class ExternalDependenciesGenerator( val symbolTable: SymbolTable, val irBuiltIns: IrBuiltIns ) { - private val stubGenerator = DeclarationStubGenerator(moduleDescriptor,symbolTable, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB) + private val stubGenerator = DeclarationStubGenerator(moduleDescriptor, symbolTable, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB) fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment) { DependencyGenerationTask(irModule).run() 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 4c44ba11d37..4525285ef03 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 @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer @@ -21,12 +20,11 @@ import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.typesApproximation.approximateCapturedTypes class TypeTranslator( - moduleDescriptor: ModuleDescriptor, private val symbolTable: SymbolTable ) { private val typeParametersResolver = ScopedTypeParametersResolver() - private val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable, typeParametersResolver) + lateinit var constantValueGenerator: ConstantValueGenerator fun enterScope(irElement: IrTypeParametersContainer) { typeParametersResolver.enterTypeParameterScope(irElement)