[FIR] Store containingDeclarationSymbol for type parameters of substitution overrides
This commit is contained in:
committed by
teamcity
parent
1e925b5937
commit
35a2a6bcec
+4
-4
@@ -118,10 +118,10 @@ class FakeOverrideGenerator(
|
|||||||
declarationStorage::getCachedIrFunction,
|
declarationStorage::getCachedIrFunction,
|
||||||
declarationStorage::createIrFunction,
|
declarationStorage::createIrFunction,
|
||||||
createFakeOverrideSymbol = { firFunction, callableSymbol ->
|
createFakeOverrideSymbol = { firFunction, callableSymbol ->
|
||||||
|
val symbol = FirFakeOverrideGenerator.createSymbolForSubstitutionOverride(callableSymbol, firClass.symbol.classId)
|
||||||
FirFakeOverrideGenerator.createSubstitutionOverrideFunction(
|
FirFakeOverrideGenerator.createSubstitutionOverrideFunction(
|
||||||
session, firFunction, callableSymbol,
|
session, symbol, firFunction,
|
||||||
newDispatchReceiverType = firClass.defaultType(),
|
newDispatchReceiverType = firClass.defaultType(),
|
||||||
derivedClassId = firClass.symbol.classId,
|
|
||||||
isExpect = (firClass as? FirRegularClass)?.isExpect == true
|
isExpect = (firClass as? FirRegularClass)?.isExpect == true
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
@@ -142,10 +142,10 @@ class FakeOverrideGenerator(
|
|||||||
declarationStorage::getCachedIrProperty,
|
declarationStorage::getCachedIrProperty,
|
||||||
declarationStorage::createIrProperty,
|
declarationStorage::createIrProperty,
|
||||||
createFakeOverrideSymbol = { firProperty, callableSymbol ->
|
createFakeOverrideSymbol = { firProperty, callableSymbol ->
|
||||||
|
val symbolForOverride = FirFakeOverrideGenerator.createSymbolForSubstitutionOverride(callableSymbol, firClass.symbol.classId)
|
||||||
FirFakeOverrideGenerator.createSubstitutionOverrideProperty(
|
FirFakeOverrideGenerator.createSubstitutionOverrideProperty(
|
||||||
session, firProperty, callableSymbol,
|
session, symbolForOverride, firProperty,
|
||||||
newDispatchReceiverType = firClass.defaultType(),
|
newDispatchReceiverType = firClass.defaultType(),
|
||||||
derivedClassId = firClass.symbol.classId,
|
|
||||||
isExpect = (firClass as? FirRegularClass)?.isExpect == true
|
isExpect = (firClass as? FirRegularClass)?.isExpect == true
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|||||||
+16
-13
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.resolve.substitution.chain
|
|||||||
import org.jetbrains.kotlin.fir.scopes.FakeOverrideSubstitution
|
import org.jetbrains.kotlin.fir.scopes.FakeOverrideSubstitution
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
@@ -125,8 +126,10 @@ class FirClassSubstitutionScope(
|
|||||||
val member = original.fir
|
val member = original.fir
|
||||||
if (skipPrivateMembers && member.visibility == Visibilities.Private) return original
|
if (skipPrivateMembers && member.visibility == Visibilities.Private) return original
|
||||||
|
|
||||||
|
val symbolForOverride = FirFakeOverrideGenerator.createSymbolForSubstitutionOverride(original, newOwnerClassId)
|
||||||
|
|
||||||
val (newTypeParameters, newDispatchReceiverType, newReceiverType, newReturnType, newSubstitutor, fakeOverrideSubstitution) = createSubstitutedData(
|
val (newTypeParameters, newDispatchReceiverType, newReceiverType, newReturnType, newSubstitutor, fakeOverrideSubstitution) = createSubstitutedData(
|
||||||
member
|
member, symbolForOverride
|
||||||
)
|
)
|
||||||
val newParameterTypes = member.valueParameters.map {
|
val newParameterTypes = member.valueParameters.map {
|
||||||
it.returnTypeRef.coneType.substitute(newSubstitutor)
|
it.returnTypeRef.coneType.substitute(newSubstitutor)
|
||||||
@@ -141,10 +144,9 @@ class FirClassSubstitutionScope(
|
|||||||
if (original.dispatchReceiverType?.substitute(substitutor) != null) {
|
if (original.dispatchReceiverType?.substitute(substitutor) != null) {
|
||||||
return FirFakeOverrideGenerator.createSubstitutionOverrideFunction(
|
return FirFakeOverrideGenerator.createSubstitutionOverrideFunction(
|
||||||
session,
|
session,
|
||||||
|
symbolForOverride,
|
||||||
member,
|
member,
|
||||||
original,
|
|
||||||
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
||||||
derivedClassId = newOwnerClassId,
|
|
||||||
isExpect = makeExpect,
|
isExpect = makeExpect,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -158,14 +160,13 @@ class FirClassSubstitutionScope(
|
|||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
return FirFakeOverrideGenerator.createSubstitutionOverrideFunction(
|
return FirFakeOverrideGenerator.createSubstitutionOverrideFunction(
|
||||||
session,
|
session,
|
||||||
|
symbolForOverride,
|
||||||
member,
|
member,
|
||||||
original,
|
|
||||||
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
||||||
newReceiverType,
|
newReceiverType,
|
||||||
newReturnType,
|
newReturnType,
|
||||||
newParameterTypes,
|
newParameterTypes,
|
||||||
newTypeParameters as List<FirTypeParameter>,
|
newTypeParameters as List<FirTypeParameter>,
|
||||||
newOwnerClassId,
|
|
||||||
makeExpect,
|
makeExpect,
|
||||||
fakeOverrideSubstitution
|
fakeOverrideSubstitution
|
||||||
)
|
)
|
||||||
@@ -175,7 +176,8 @@ class FirClassSubstitutionScope(
|
|||||||
if (substitutor == ConeSubstitutor.Empty) return original
|
if (substitutor == ConeSubstitutor.Empty) return original
|
||||||
val constructor = original.fir
|
val constructor = original.fir
|
||||||
|
|
||||||
val (newTypeParameters, _, _, newReturnType, newSubstitutor, fakeOverrideSubstitution) = createSubstitutedData(constructor)
|
val symbolForOverride = FirConstructorSymbol(original.callableId)
|
||||||
|
val (newTypeParameters, _, _, newReturnType, newSubstitutor, fakeOverrideSubstitution) = createSubstitutedData(constructor, symbolForOverride)
|
||||||
|
|
||||||
// If constructor has a dispatch receiver, it should be an inner class' constructor.
|
// If constructor has a dispatch receiver, it should be an inner class' constructor.
|
||||||
// It means that we need to substitute its dispatcher as every other type,
|
// It means that we need to substitute its dispatcher as every other type,
|
||||||
@@ -191,7 +193,7 @@ class FirClassSubstitutionScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return FirFakeOverrideGenerator.createCopyForFirConstructor(
|
return FirFakeOverrideGenerator.createCopyForFirConstructor(
|
||||||
FirConstructorSymbol(original.callableId),
|
symbolForOverride,
|
||||||
session,
|
session,
|
||||||
constructor,
|
constructor,
|
||||||
FirDeclarationOrigin.SubstitutionOverride,
|
FirDeclarationOrigin.SubstitutionOverride,
|
||||||
@@ -209,8 +211,10 @@ class FirClassSubstitutionScope(
|
|||||||
val member = original.fir
|
val member = original.fir
|
||||||
if (skipPrivateMembers && member.visibility == Visibilities.Private) return original
|
if (skipPrivateMembers && member.visibility == Visibilities.Private) return original
|
||||||
|
|
||||||
|
val symbolForOverride = FirFakeOverrideGenerator.createSymbolForSubstitutionOverride(original, newOwnerClassId)
|
||||||
|
|
||||||
val (newTypeParameters, newDispatchReceiverType, newReceiverType, newReturnType, _, fakeOverrideSubstitution) = createSubstitutedData(
|
val (newTypeParameters, newDispatchReceiverType, newReceiverType, newReturnType, _, fakeOverrideSubstitution) = createSubstitutedData(
|
||||||
member
|
member, symbolForOverride
|
||||||
)
|
)
|
||||||
|
|
||||||
if (newReceiverType == null &&
|
if (newReceiverType == null &&
|
||||||
@@ -221,10 +225,9 @@ class FirClassSubstitutionScope(
|
|||||||
if (original.dispatchReceiverType?.substitute(substitutor) != null) {
|
if (original.dispatchReceiverType?.substitute(substitutor) != null) {
|
||||||
return FirFakeOverrideGenerator.createSubstitutionOverrideProperty(
|
return FirFakeOverrideGenerator.createSubstitutionOverrideProperty(
|
||||||
session,
|
session,
|
||||||
|
symbolForOverride,
|
||||||
member,
|
member,
|
||||||
original,
|
|
||||||
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
||||||
derivedClassId = newOwnerClassId,
|
|
||||||
isExpect = makeExpect,
|
isExpect = makeExpect,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -234,13 +237,12 @@ class FirClassSubstitutionScope(
|
|||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
return FirFakeOverrideGenerator.createSubstitutionOverrideProperty(
|
return FirFakeOverrideGenerator.createSubstitutionOverrideProperty(
|
||||||
session,
|
session,
|
||||||
|
symbolForOverride,
|
||||||
member,
|
member,
|
||||||
original,
|
|
||||||
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
newDispatchReceiverType ?: dispatchReceiverTypeForSubstitutedMembers,
|
||||||
newReceiverType,
|
newReceiverType,
|
||||||
newReturnType,
|
newReturnType,
|
||||||
newTypeParameters as List<FirTypeParameter>,
|
newTypeParameters as List<FirTypeParameter>,
|
||||||
newOwnerClassId,
|
|
||||||
makeExpect,
|
makeExpect,
|
||||||
fakeOverrideSubstitution
|
fakeOverrideSubstitution
|
||||||
)
|
)
|
||||||
@@ -255,11 +257,12 @@ class FirClassSubstitutionScope(
|
|||||||
val fakeOverrideSubstitution: FakeOverrideSubstitution?
|
val fakeOverrideSubstitution: FakeOverrideSubstitution?
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun createSubstitutedData(member: FirCallableDeclaration): SubstitutedData {
|
private fun createSubstitutedData(member: FirCallableDeclaration, symbolForOverride: FirBasedSymbol<*>): SubstitutedData {
|
||||||
member.ensureResolved(FirResolvePhase.TYPES)
|
member.ensureResolved(FirResolvePhase.TYPES)
|
||||||
val (newTypeParameters, substitutor) = FirFakeOverrideGenerator.createNewTypeParametersAndSubstitutor(
|
val (newTypeParameters, substitutor) = FirFakeOverrideGenerator.createNewTypeParametersAndSubstitutor(
|
||||||
session,
|
session,
|
||||||
member as FirTypeParameterRefsOwner,
|
member as FirTypeParameterRefsOwner,
|
||||||
|
symbolForOverride,
|
||||||
substitutor,
|
substitutor,
|
||||||
forceTypeParametersRecreation = dispatchReceiverTypeForSubstitutedMembers.lookupTag != member.dispatchReceiverClassOrNull()
|
forceTypeParametersRecreation = dispatchReceiverTypeForSubstitutedMembers.lookupTag != member.dispatchReceiverClassOrNull()
|
||||||
)
|
)
|
||||||
|
|||||||
+33
-23
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
|||||||
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.scopes.FakeOverrideSubstitution
|
import org.jetbrains.kotlin.fir.scopes.FakeOverrideSubstitution
|
||||||
import org.jetbrains.kotlin.fir.scopes.fakeOverrideSubstitution
|
import org.jetbrains.kotlin.fir.scopes.fakeOverrideSubstitution
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef
|
||||||
@@ -31,27 +32,29 @@ import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
|||||||
object FirFakeOverrideGenerator {
|
object FirFakeOverrideGenerator {
|
||||||
fun createSubstitutionOverrideFunction(
|
fun createSubstitutionOverrideFunction(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
|
symbolForSubstitutionOverride: FirNamedFunctionSymbol,
|
||||||
baseFunction: FirSimpleFunction,
|
baseFunction: FirSimpleFunction,
|
||||||
baseSymbol: FirNamedFunctionSymbol,
|
|
||||||
newDispatchReceiverType: ConeSimpleKotlinType?,
|
newDispatchReceiverType: ConeSimpleKotlinType?,
|
||||||
newReceiverType: ConeKotlinType? = null,
|
newReceiverType: ConeKotlinType? = null,
|
||||||
newReturnType: ConeKotlinType? = null,
|
newReturnType: ConeKotlinType? = null,
|
||||||
newParameterTypes: List<ConeKotlinType?>? = null,
|
newParameterTypes: List<ConeKotlinType?>? = null,
|
||||||
newTypeParameters: List<FirTypeParameter>? = null,
|
newTypeParameters: List<FirTypeParameter>? = null,
|
||||||
derivedClassId: ClassId? = null,
|
|
||||||
isExpect: Boolean = baseFunction.isExpect,
|
isExpect: Boolean = baseFunction.isExpect,
|
||||||
fakeOverrideSubstitution: FakeOverrideSubstitution? = null
|
fakeOverrideSubstitution: FakeOverrideSubstitution? = null
|
||||||
): FirNamedFunctionSymbol {
|
): FirNamedFunctionSymbol {
|
||||||
val symbol = if (derivedClassId == null) {
|
|
||||||
FirNamedFunctionSymbol(baseSymbol.callableId)
|
|
||||||
} else {
|
|
||||||
FirNamedFunctionSymbol(CallableId(derivedClassId, baseFunction.name))
|
|
||||||
}
|
|
||||||
createSubstitutionOverrideFunction(
|
createSubstitutionOverrideFunction(
|
||||||
symbol, session, baseFunction, newDispatchReceiverType, newReceiverType, newReturnType,
|
symbolForSubstitutionOverride, session, baseFunction, newDispatchReceiverType, newReceiverType, newReturnType,
|
||||||
newParameterTypes, newTypeParameters, isExpect, fakeOverrideSubstitution
|
newParameterTypes, newTypeParameters, isExpect, fakeOverrideSubstitution
|
||||||
)
|
)
|
||||||
return symbol
|
return symbolForSubstitutionOverride
|
||||||
|
}
|
||||||
|
|
||||||
|
fun createSymbolForSubstitutionOverride(baseSymbol: FirNamedFunctionSymbol, derivedClassId: ClassId? = null): FirNamedFunctionSymbol {
|
||||||
|
return if (derivedClassId == null) {
|
||||||
|
FirNamedFunctionSymbol(baseSymbol.callableId)
|
||||||
|
} else {
|
||||||
|
FirNamedFunctionSymbol(CallableId(derivedClassId, baseSymbol.callableId.callableName))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createSubstitutionOverrideFunction(
|
private fun createSubstitutionOverrideFunction(
|
||||||
@@ -112,7 +115,8 @@ object FirFakeOverrideGenerator {
|
|||||||
dispatchReceiverType = newDispatchReceiverType
|
dispatchReceiverType = newDispatchReceiverType
|
||||||
attributes = baseFunction.attributes.copy()
|
attributes = baseFunction.attributes.copy()
|
||||||
typeParameters += configureAnnotationsTypeParametersAndSignature(
|
typeParameters += configureAnnotationsTypeParametersAndSignature(
|
||||||
session, baseFunction, newParameterTypes, newTypeParameters, newReceiverType, newReturnType, fakeOverrideSubstitution
|
session, baseFunction, newParameterTypes, newTypeParameters,
|
||||||
|
newReceiverType, newReturnType, fakeOverrideSubstitution, newSymbol
|
||||||
).filterIsInstance<FirTypeParameter>()
|
).filterIsInstance<FirTypeParameter>()
|
||||||
deprecation = baseFunction.deprecation
|
deprecation = baseFunction.deprecation
|
||||||
}
|
}
|
||||||
@@ -146,7 +150,8 @@ object FirFakeOverrideGenerator {
|
|||||||
newTypeParameters,
|
newTypeParameters,
|
||||||
newReceiverType = null,
|
newReceiverType = null,
|
||||||
newReturnType,
|
newReturnType,
|
||||||
fakeOverrideSubstitution
|
fakeOverrideSubstitution,
|
||||||
|
fakeOverrideSymbol
|
||||||
)
|
)
|
||||||
|
|
||||||
dispatchReceiverType = newDispatchReceiverType
|
dispatchReceiverType = newDispatchReceiverType
|
||||||
@@ -167,7 +172,8 @@ object FirFakeOverrideGenerator {
|
|||||||
newTypeParameters: List<FirTypeParameterRef>?,
|
newTypeParameters: List<FirTypeParameterRef>?,
|
||||||
newReceiverType: ConeKotlinType?,
|
newReceiverType: ConeKotlinType?,
|
||||||
newReturnType: ConeKotlinType?,
|
newReturnType: ConeKotlinType?,
|
||||||
fakeOverrideSubstitution: FakeOverrideSubstitution?
|
fakeOverrideSubstitution: FakeOverrideSubstitution?,
|
||||||
|
symbolForOverride: FirBasedSymbol<*>,
|
||||||
): List<FirTypeParameterRef> {
|
): List<FirTypeParameterRef> {
|
||||||
return when {
|
return when {
|
||||||
baseFunction.typeParameters.isEmpty() -> {
|
baseFunction.typeParameters.isEmpty() -> {
|
||||||
@@ -182,7 +188,7 @@ object FirFakeOverrideGenerator {
|
|||||||
}
|
}
|
||||||
newTypeParameters == null -> {
|
newTypeParameters == null -> {
|
||||||
val (copiedTypeParameters, substitutor) = createNewTypeParametersAndSubstitutor(
|
val (copiedTypeParameters, substitutor) = createNewTypeParametersAndSubstitutor(
|
||||||
useSiteSession, baseFunction, ConeSubstitutor.Empty
|
useSiteSession, baseFunction, symbolForOverride, ConeSubstitutor.Empty
|
||||||
)
|
)
|
||||||
val copiedParameterTypes = baseFunction.valueParameters.map {
|
val copiedParameterTypes = baseFunction.valueParameters.map {
|
||||||
substitutor.substituteOrNull(it.returnTypeRef.coneType)
|
substitutor.substituteOrNull(it.returnTypeRef.coneType)
|
||||||
@@ -254,29 +260,31 @@ object FirFakeOverrideGenerator {
|
|||||||
|
|
||||||
fun createSubstitutionOverrideProperty(
|
fun createSubstitutionOverrideProperty(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
|
symbolForSubstitutionOverride: FirPropertySymbol,
|
||||||
baseProperty: FirProperty,
|
baseProperty: FirProperty,
|
||||||
baseSymbol: FirPropertySymbol,
|
|
||||||
newDispatchReceiverType: ConeSimpleKotlinType?,
|
newDispatchReceiverType: ConeSimpleKotlinType?,
|
||||||
newReceiverType: ConeKotlinType? = null,
|
newReceiverType: ConeKotlinType? = null,
|
||||||
newReturnType: ConeKotlinType? = null,
|
newReturnType: ConeKotlinType? = null,
|
||||||
newTypeParameters: List<FirTypeParameter>? = null,
|
newTypeParameters: List<FirTypeParameter>? = null,
|
||||||
derivedClassId: ClassId? = null,
|
|
||||||
isExpect: Boolean = baseProperty.isExpect,
|
isExpect: Boolean = baseProperty.isExpect,
|
||||||
fakeOverrideSubstitution: FakeOverrideSubstitution? = null
|
fakeOverrideSubstitution: FakeOverrideSubstitution? = null
|
||||||
): FirPropertySymbol {
|
): FirPropertySymbol {
|
||||||
val symbol = if (derivedClassId == null) {
|
|
||||||
FirPropertySymbol(baseSymbol.callableId)
|
|
||||||
} else {
|
|
||||||
FirPropertySymbol(CallableId(derivedClassId, baseProperty.name))
|
|
||||||
}
|
|
||||||
createCopyForFirProperty(
|
createCopyForFirProperty(
|
||||||
symbol, baseProperty, session, FirDeclarationOrigin.SubstitutionOverride, isExpect,
|
symbolForSubstitutionOverride, baseProperty, session, FirDeclarationOrigin.SubstitutionOverride, isExpect,
|
||||||
newDispatchReceiverType, newTypeParameters, newReceiverType, newReturnType,
|
newDispatchReceiverType, newTypeParameters, newReceiverType, newReturnType,
|
||||||
fakeOverrideSubstitution = fakeOverrideSubstitution
|
fakeOverrideSubstitution = fakeOverrideSubstitution
|
||||||
).apply {
|
).apply {
|
||||||
originalForSubstitutionOverrideAttr = baseProperty
|
originalForSubstitutionOverrideAttr = baseProperty
|
||||||
}
|
}
|
||||||
return symbol
|
return symbolForSubstitutionOverride
|
||||||
|
}
|
||||||
|
|
||||||
|
fun createSymbolForSubstitutionOverride(baseSymbol: FirPropertySymbol, derivedClassId: ClassId? = null): FirPropertySymbol {
|
||||||
|
return if (derivedClassId == null) {
|
||||||
|
FirPropertySymbol(baseSymbol.callableId)
|
||||||
|
} else {
|
||||||
|
FirPropertySymbol(CallableId(derivedClassId, baseSymbol.callableId.callableName))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createCopyForFirProperty(
|
fun createCopyForFirProperty(
|
||||||
@@ -333,7 +341,7 @@ object FirFakeOverrideGenerator {
|
|||||||
}
|
}
|
||||||
newTypeParameters == null -> {
|
newTypeParameters == null -> {
|
||||||
val (copiedTypeParameters, substitutor) = createNewTypeParametersAndSubstitutor(
|
val (copiedTypeParameters, substitutor) = createNewTypeParametersAndSubstitutor(
|
||||||
useSiteSession, baseProperty, ConeSubstitutor.Empty
|
useSiteSession, baseProperty, symbol, ConeSubstitutor.Empty
|
||||||
)
|
)
|
||||||
val (copiedReceiverType, possibleReturnType) = substituteReceiverAndReturnType(
|
val (copiedReceiverType, possibleReturnType) = substituteReceiverAndReturnType(
|
||||||
baseProperty, newReceiverType, newReturnType, substitutor
|
baseProperty, newReceiverType, newReturnType, substitutor
|
||||||
@@ -475,6 +483,7 @@ object FirFakeOverrideGenerator {
|
|||||||
fun createNewTypeParametersAndSubstitutor(
|
fun createNewTypeParametersAndSubstitutor(
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
member: FirTypeParameterRefsOwner,
|
member: FirTypeParameterRefsOwner,
|
||||||
|
symbolForOverride: FirBasedSymbol<*>,
|
||||||
substitutor: ConeSubstitutor,
|
substitutor: ConeSubstitutor,
|
||||||
forceTypeParametersRecreation: Boolean = true
|
forceTypeParametersRecreation: Boolean = true
|
||||||
): Pair<List<FirTypeParameterRef>, ConeSubstitutor> {
|
): Pair<List<FirTypeParameterRef>, ConeSubstitutor> {
|
||||||
@@ -491,6 +500,7 @@ object FirFakeOverrideGenerator {
|
|||||||
variance = typeParameter.variance
|
variance = typeParameter.variance
|
||||||
isReified = typeParameter.isReified
|
isReified = typeParameter.isReified
|
||||||
annotations += typeParameter.annotations
|
annotations += typeParameter.annotations
|
||||||
|
containingDeclarationSymbol = symbolForOverride
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -133,12 +133,13 @@ private fun FirTypeAliasSymbol.findSAMConstructorForTypeAlias(
|
|||||||
|
|
||||||
if (newReturnType == null && newParameterTypes.all { it == null }) return samConstructorForClass
|
if (newReturnType == null && newParameterTypes.all { it == null }) return samConstructorForClass
|
||||||
|
|
||||||
|
val symbolForOverride = FirFakeOverrideGenerator.createSymbolForSubstitutionOverride(namedSymbol, expansionRegularClass.classId)
|
||||||
|
|
||||||
return FirFakeOverrideGenerator.createSubstitutionOverrideFunction(
|
return FirFakeOverrideGenerator.createSubstitutionOverrideFunction(
|
||||||
session, samConstructorForClass, namedSymbol,
|
session, symbolForOverride, samConstructorForClass,
|
||||||
newDispatchReceiverType = null,
|
newDispatchReceiverType = null,
|
||||||
newReceiverType = null,
|
newReceiverType = null,
|
||||||
newReturnType, newParameterTypes, typeParameters,
|
newReturnType, newParameterTypes, typeParameters,
|
||||||
expansionRegularClass.classId,
|
|
||||||
).fir
|
).fir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user