diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt index b1890aa3d32..21d49a28e75 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.StandardClassIds +import org.jetbrains.kotlin.utils.addToStdlib.runIf import org.jetbrains.kotlin.utils.addToStdlib.runUnless class Fir2IrClassifierStorage( @@ -355,20 +356,17 @@ class Fir2IrClassifierStorage( ): IrClass { val origin = IrDeclarationOrigin.DEFINED val modality = Modality.FINAL - val signature = null val result = anonymousObject.convertWithOffsets { startOffset, endOffset -> - declareIrClass(signature) { symbol -> - irFactory.createClass( - startOffset, endOffset, origin, symbol, name, - // NB: for unknown reason, IR uses 'CLASS' kind for simple anonymous objects - anonymousObject.classKind.takeIf { it == ClassKind.ENUM_ENTRY } ?: ClassKind.CLASS, - components.visibilityConverter.convertToDescriptorVisibility(visibility), modality - ).apply { - metadata = FirMetadataSource.Class(anonymousObject) - setThisReceiver(anonymousObject.typeParameters) - if (irParent != null) { - this.parent = irParent - } + irFactory.createClass( + startOffset, endOffset, origin, IrClassSymbolImpl(), name, + // NB: for unknown reason, IR uses 'CLASS' kind for simple anonymous objects + anonymousObject.classKind.takeIf { it == ClassKind.ENUM_ENTRY } ?: ClassKind.CLASS, + components.visibilityConverter.convertToDescriptorVisibility(visibility), modality + ).apply { + metadata = FirMetadataSource.Class(anonymousObject) + setThisReceiver(anonymousObject.typeParameters) + if (irParent != null) { + this.parent = irParent } } }.declareSupertypesAndTypeParameters(anonymousObject) @@ -553,17 +551,6 @@ class Fir2IrClassifierStorage( if (firClass is FirAnonymousObject || firClass is FirRegularClass && firClass.visibility == Visibilities.Local) { return createLocalIrClassOnTheFly(firClass).symbol } - val signature = signatureComposer.composeSignature(firClass, forceTopLevelPrivate = forceTopLevelPrivate)!! - val symbol = symbolTable.referenceClass(signature) - if (symbol.isBound) { - val irClass = symbol.owner - classCache[firClass as FirRegularClass] = irClass - val mappedTypeParameters = firClass.typeParameters.filterIsInstance().zip(irClass.typeParameters) - for ((firTypeParameter, irTypeParameter) in mappedTypeParameters) { - typeParameterCache[firTypeParameter] = irTypeParameter - } - return symbol - } firClass as FirRegularClass val classId = firClassSymbol.classId val parentId = classId.outerClassId @@ -573,9 +560,12 @@ class Fir2IrClassifierStorage( // firClass may be referenced by some parent's type parameters as a bound. In that case, getIrClassSymbol will be called recursively. getCachedIrClass(firClass)?.let { return it.symbol } + val signature = runIf(generateSignatures) { + signatureComposer.composeSignature(firClass, forceTopLevelPrivate = forceTopLevelPrivate) + } val irClass = firClass.convertWithOffsets { startOffset, endOffset -> - symbolTable.declareClass(signature, { symbol }) { - Fir2IrLazyClass(components, startOffset, endOffset, firClass.irOrigin(firProvider), firClass, symbol).apply { + declareIrClass(signature) { irClassSymbol -> + Fir2IrLazyClass(components, startOffset, endOffset, firClass.irOrigin(firProvider), firClass, irClassSymbol).apply { parent = irParent } } @@ -584,7 +574,7 @@ class Fir2IrClassifierStorage( // NB: this is needed to prevent recursions in case of self bounds (irClass as Fir2IrLazyClass).prepareTypeParameters() - return symbol + return irClass.symbol } fun getIrClassSymbolForNotFoundClass(classLikeLookupTag: ConeClassLikeLookupTag): IrClassSymbol { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt index 0ce5537098a..24b9968d9e8 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponents.kt @@ -24,7 +24,7 @@ interface Fir2IrComponents { val converter: Fir2IrConverter val symbolTable: SymbolTable - val irBuiltIns: IrBuiltIns + val irBuiltIns: IrBuiltInsOverFir val builtIns: Fir2IrBuiltIns val irFactory: IrFactory val irProviders: List diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt index 297bd9a6b60..9517dc5c20d 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrComponentsStorage.kt @@ -33,7 +33,7 @@ class Fir2IrComponentsStorage( override lateinit var classifierStorage: Fir2IrClassifierStorage override lateinit var declarationStorage: Fir2IrDeclarationStorage - override lateinit var irBuiltIns: IrBuiltIns + override lateinit var irBuiltIns: IrBuiltInsOverFir override lateinit var builtIns: Fir2IrBuiltIns override lateinit var irProviders: List diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt index 21ae9985cb8..4d415f16cb2 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt @@ -49,7 +49,8 @@ class Fir2IrTypeConverter( StandardClassIds.Float to irBuiltIns.floatClass, StandardClassIds.Double to irBuiltIns.doubleClass, StandardClassIds.Char to irBuiltIns.charClass, - StandardClassIds.Array to irBuiltIns.arrayClass + StandardClassIds.Array to irBuiltIns.arrayClass, + INTRINSIC_CONST_EVALUATION_ANNOTATION to irBuiltIns.intrinsicConst ) } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt index 0f948c3e8e0..ecba08cc0c8 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt @@ -196,7 +196,7 @@ class IrBuiltInsOverFir( override val stringType: IrType get() = string.type private val intrinsicConstAnnotationFqName = kotlinInternalPackage.child(Name.identifier("IntrinsicConstEvaluation")) - private val intrinsicConst = kotlinInternalIrPackage.createClass(intrinsicConstAnnotationFqName).apply { + internal val intrinsicConst = kotlinInternalIrPackage.createClass(intrinsicConstAnnotationFqName).apply { owner.createConstructor() owner.finalizeClassDefinition() }