[FIR] Support deferred return type computation for synthetic properties

#KT-66048 Fixed
This commit is contained in:
Kirill Rakhman
2024-03-06 17:52:29 +01:00
committed by Space Team
parent 973e337bf5
commit 89ecb92551
3 changed files with 4 additions and 3 deletions
@@ -348,6 +348,7 @@ fun BodyResolveComponents.typeFromCallee(access: FirElement, calleeReference: Fi
private fun BodyResolveComponents.typeFromSymbol(symbol: FirBasedSymbol<*>): FirResolvedTypeRef {
return when (symbol) {
is FirSyntheticPropertySymbol -> typeFromSymbol(symbol.getterSymbol!!.delegateFunctionSymbol)
is FirCallableSymbol<*> -> {
val returnTypeRef = returnTypeCalculator.tryCalculateReturnType(symbol.fir)
returnTypeRef.copyWithNewSource(null)
@@ -74,7 +74,7 @@ val FirCallableDeclaration.isSubstitutionOverride: Boolean get() = origin is Fir
val FirCallableDeclaration.isSubstitutionOrIntersectionOverride: Boolean get() = isSubstitutionOverride || isIntersectionOverride
val FirCallableDeclaration.isDelegated: Boolean get() = origin == FirDeclarationOrigin.Delegated
val FirCallableDeclaration.isCopyCreatedInScope: Boolean get() = isSubstitutionOrIntersectionOverride || isDelegated
val FirCallableDeclaration.canHaveDeferredReturnTypeCalculation: Boolean get() = isCopyCreatedInScope || origin == FirDeclarationOrigin.Enhancement
val FirCallableDeclaration.canHaveDeferredReturnTypeCalculation: Boolean get() = isCopyCreatedInScope || origin == FirDeclarationOrigin.Enhancement || origin == FirDeclarationOrigin.Synthetic.JavaProperty
val FirCallableSymbol<*>.isIntersectionOverride: Boolean get() = origin == FirDeclarationOrigin.IntersectionOverride
val FirCallableSymbol<*>.isSubstitutionOverride: Boolean get() = origin is FirDeclarationOrigin.SubstitutionOverride
@@ -55,9 +55,9 @@ open class KotlinClass {
class B : Java1() {
override fun a(): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>String?<!> = super.a()
override val b: String? = super.b
override val b: <!PROPERTY_TYPE_MISMATCH_ON_OVERRIDE!>String?<!> = super.b
override var c: <!VAR_TYPE_MISMATCH_ON_OVERRIDE!>String?<!> = super.c
override var d: String? = super.d
override var d: <!VAR_TYPE_MISMATCH_ON_OVERRIDE!>String?<!> = super.d
override var e: <!VAR_TYPE_MISMATCH_ON_OVERRIDE!>String?<!> = super.e
override var f: <!VAR_TYPE_MISMATCH_ON_OVERRIDE!>String?<!> = super.f
}