FIR: Use attribute instead of overriddenSymbol for synthetic type alias constructor
This commit is contained in:
@@ -225,6 +225,11 @@ internal tailrec fun FirCallableSymbol<*>.unwrapSubstitutionAndIntersectionOverr
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal tailrec fun FirCallableSymbol<*>.unwrapCallRepresentative(root: FirCallableSymbol<*> = this): FirCallableSymbol<*> {
|
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
|
if (fir.isIntersectionOverride) return this
|
||||||
|
|
||||||
val overriddenSymbol = fir.originalForSubstitutionOverride?.takeIf {
|
val overriddenSymbol = fir.originalForSubstitutionOverride?.takeIf {
|
||||||
|
|||||||
+7
-2
@@ -232,7 +232,7 @@ private fun prepareSubstitutingScopeForTypeAliasConstructors(
|
|||||||
typeAliasSymbol: FirTypeAliasSymbol,
|
typeAliasSymbol: FirTypeAliasSymbol,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
delegatingScope: FirScope
|
delegatingScope: FirScope
|
||||||
): FirScope? {
|
): FirScope {
|
||||||
val copyFactory2: ConstructorCopyFactory<FirConstructor> = factory@{ newReturnType, newParameterTypes, newTypeParameters ->
|
val copyFactory2: ConstructorCopyFactory<FirConstructor> = factory@{ newReturnType, newParameterTypes, newTypeParameters ->
|
||||||
buildConstructor {
|
buildConstructor {
|
||||||
source = this@factory.source
|
source = this@factory.source
|
||||||
@@ -329,7 +329,9 @@ private fun prepareCopyConstructorForTypealiasNestedClass(
|
|||||||
val extCopy = buildConstructorCopy(originalSymbol.fir) {
|
val extCopy = buildConstructorCopy(originalSymbol.fir) {
|
||||||
origin = FirDeclarationOrigin.Synthetic
|
origin = FirDeclarationOrigin.Synthetic
|
||||||
receiverTypeRef = innerTypeRef.withReplacedConeType(outerType)
|
receiverTypeRef = innerTypeRef.withReplacedConeType(outerType)
|
||||||
symbol = FirConstructorSymbol(originalSymbol.callableId, overriddenSymbol = originalSymbol)
|
symbol = FirConstructorSymbol(originalSymbol.callableId)
|
||||||
|
}.apply {
|
||||||
|
originalConstructorIfTypeAlias = originalSymbol.fir
|
||||||
}
|
}
|
||||||
return extCopy.symbol
|
return extCopy.symbol
|
||||||
}
|
}
|
||||||
@@ -337,3 +339,6 @@ private fun prepareCopyConstructorForTypealiasNestedClass(
|
|||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private object TypeAliasConstructorKey : FirDeclarationDataKey()
|
||||||
|
var FirConstructor.originalConstructorIfTypeAlias: FirConstructor? by FirDeclarationDataRegistry.data(TypeAliasConstructorKey)
|
||||||
|
|||||||
Reference in New Issue
Block a user