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 7128afa9c45..d62cd85b35a 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 @@ -21,12 +21,10 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.symbols.IrClassSymbol -import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol -import org.jetbrains.kotlin.ir.symbols.IrSymbol -import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol +import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl +import org.jetbrains.kotlin.ir.symbols.impl.IrTypeAliasSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrTypeParameterSymbolImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.IdSignature @@ -365,11 +363,20 @@ class Fir2IrClassifierStorage( typeAlias: FirTypeAlias, parent: IrDeclarationParent ): IrTypeAlias { - return classifiersGenerator.createIrTypeAlias(typeAlias, parent).also { + val symbol = createTypeAliasSymbol(typeAlias) + return classifiersGenerator.createIrTypeAlias(typeAlias, parent, symbol).also { typeAliasCache[typeAlias] = it } } + private fun createTypeAliasSymbol(typeAlias: FirTypeAlias): IrTypeAliasSymbol { + val signature = signatureComposer.composeSignature(typeAlias) + return when { + signature != null -> symbolTable.referenceTypeAlias(signature) + else -> IrTypeAliasSymbolImpl() + } + } + internal fun getCachedTypeAlias(firTypeAlias: FirTypeAlias): IrTypeAlias? = typeAliasCache[firTypeAlias] // ------------------------------------ code fragments ------------------------------------ diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt index 20b58b0ca6f..ed2f69422c4 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrClassifiersGenerator.kt @@ -279,36 +279,26 @@ class Fir2IrClassifiersGenerator(val components: Fir2IrComponents) : Fir2IrCompo // ------------------------------------ typealiases ------------------------------------ - private fun declareIrTypeAlias(signature: IdSignature?, factory: (IrTypeAliasSymbol) -> IrTypeAlias): IrTypeAlias { - return if (signature == null) - factory(IrTypeAliasSymbolImpl()) - else - symbolTable.declareTypeAlias(signature, { IrTypeAliasPublicSymbolImpl(signature) }, factory) - } - fun createIrTypeAlias( typeAlias: FirTypeAlias, - parent: IrDeclarationParent + parent: IrDeclarationParent, + symbol: IrTypeAliasSymbol, ): IrTypeAlias = typeAlias.convertWithOffsets { startOffset, endOffset -> - val signature = signatureComposer.composeSignature(typeAlias) - declareIrTypeAlias(signature) { symbol -> - classifierStorage.preCacheTypeParameters(typeAlias, symbol) - val irTypeAlias = irFactory.createTypeAlias( - startOffset = startOffset, - endOffset = endOffset, - origin = IrDeclarationOrigin.DEFINED, - name = typeAlias.name, - visibility = components.visibilityConverter.convertToDescriptorVisibility(typeAlias.visibility), - symbol = symbol, - isActual = typeAlias.isActual, - expandedType = typeAlias.expandedTypeRef.toIrType(), - ).apply { - this.parent = parent - setTypeParameters(this, typeAlias) - setParent(parent) - addDeclarationToParent(this, parent) - } - irTypeAlias + classifierStorage.preCacheTypeParameters(typeAlias, symbol) + irFactory.createTypeAlias( + startOffset = startOffset, + endOffset = endOffset, + origin = IrDeclarationOrigin.DEFINED, + name = typeAlias.name, + visibility = components.visibilityConverter.convertToDescriptorVisibility(typeAlias.visibility), + symbol = symbol, + isActual = typeAlias.isActual, + expandedType = typeAlias.expandedTypeRef.toIrType(), + ).apply { + this.parent = parent + setTypeParameters(this, typeAlias) + setParent(parent) + addDeclarationToParent(this, parent) } }