diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index f79c86d1e74..b77f0a87255 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -225,6 +225,11 @@ internal tailrec fun FirCallableSymbol<*>.unwrapSubstitutionAndIntersectionOverr } internal tailrec fun FirCallableSymbol<*>.unwrapCallRepresentative(root: FirCallableSymbol<*> = this): FirCallableSymbol<*> { + val fir = fir + if (fir is FirConstructor) { + val originalForTypeAlias = fir.originalConstructorIfTypeAlias + if (originalForTypeAlias != null) return originalForTypeAlias.symbol.unwrapCallRepresentative(this) + } if (fir.isIntersectionOverride) return this val overriddenSymbol = fir.originalForSubstitutionOverride?.takeIf { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt index fca0cfe2dba..9a624de00a7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt @@ -232,7 +232,7 @@ private fun prepareSubstitutingScopeForTypeAliasConstructors( typeAliasSymbol: FirTypeAliasSymbol, session: FirSession, delegatingScope: FirScope -): FirScope? { +): FirScope { val copyFactory2: ConstructorCopyFactory = factory@{ newReturnType, newParameterTypes, newTypeParameters -> buildConstructor { source = this@factory.source @@ -329,7 +329,9 @@ private fun prepareCopyConstructorForTypealiasNestedClass( val extCopy = buildConstructorCopy(originalSymbol.fir) { origin = FirDeclarationOrigin.Synthetic receiverTypeRef = innerTypeRef.withReplacedConeType(outerType) - symbol = FirConstructorSymbol(originalSymbol.callableId, overriddenSymbol = originalSymbol) + symbol = FirConstructorSymbol(originalSymbol.callableId) + }.apply { + originalConstructorIfTypeAlias = originalSymbol.fir } return extCopy.symbol } @@ -337,3 +339,6 @@ private fun prepareCopyConstructorForTypealiasNestedClass( } return null } + +private object TypeAliasConstructorKey : FirDeclarationDataKey() +var FirConstructor.originalConstructorIfTypeAlias: FirConstructor? by FirDeclarationDataRegistry.data(TypeAliasConstructorKey)