FIR: store substitution for properties with implicit return type

This commit is contained in:
Mikhail Glukhikh
2021-03-24 10:37:38 +03:00
parent 4768700600
commit 9ae41f5c07
2 changed files with 7 additions and 4 deletions
@@ -7,6 +7,6 @@ abstract class LightMemberImpl<out D : PsiMember>(computeRealDelegate: () -> D)
}
abstract class LightFieldImpl<D : PsiField>(computeRealDelegate: () -> D) : LightMemberImpl<PsiField>(computeRealDelegate) {
override val delegate: <!PROPERTY_TYPE_MISMATCH_ON_OVERRIDE!>D<!>
override val delegate: D
get() = super.delegate
}
@@ -121,7 +121,8 @@ class FirClassSubstitutionScope(
}
if (newReceiverType == null && newReturnType == null && newParameterTypes.all { it == null } &&
newTypeParameters === member.typeParameters && fakeOverrideSubstitution == null) {
newTypeParameters === member.typeParameters && fakeOverrideSubstitution == null
) {
return original
}
@@ -157,6 +158,7 @@ class FirClassSubstitutionScope(
if (newReturnType == null && newParameterTypes.all { it == null } && newTypeParameters === constructor.typeParameters) {
return original
}
return FirFakeOverrideGenerator.createSubstitutionOverrideConstructor(
FirConstructorSymbol(original.callableId),
session, constructor, dispatchReceiverTypeForSubstitutedMembers,
@@ -170,8 +172,9 @@ class FirClassSubstitutionScope(
if (skipPrivateMembers && member.visibility == Visibilities.Private) return original
val (newTypeParameters, newReceiverType, newReturnType, _, fakeOverrideSubstitution) = createSubstitutedData(member)
if (newReceiverType == null &&
newReturnType == null && newTypeParameters === member.typeParameters
if (newReceiverType == null && newReturnType == null &&
newTypeParameters === member.typeParameters && fakeOverrideSubstitution == null
) {
return original
}