[FIR] Defer computation of enhanced return type when overridden has implicit return type

#KT-66048
This commit is contained in:
Kirill Rakhman
2024-02-27 16:46:06 +01:00
committed by Space Team
parent 888cac6fc0
commit 885ba11d97
6 changed files with 113 additions and 24 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.canHaveDeferredReturnTypeCalculation
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
@@ -36,7 +37,7 @@ class ReturnTypeCalculatorForFullBodyResolve private constructor(
override fun tryCalculateReturnTypeOrNull(declaration: FirCallableDeclaration): FirResolvedTypeRef? {
val returnTypeRef = declaration.returnTypeRef
if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef
if (declaration.origin.fromSupertypes) {
if (declaration.canHaveDeferredReturnTypeCalculation) {
return CallableCopyTypeCalculator.Forced.computeReturnType(declaration)
}
@@ -5,13 +5,15 @@
package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.canHaveDeferredReturnTypeCalculation
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.isCopyCreatedInScope
import org.jetbrains.kotlin.fir.scopes.CallableCopyTypeCalculator
import org.jetbrains.kotlin.fir.scopes.FirDelegatingTypeScope
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.name.Name
/**
@@ -59,7 +61,7 @@ class FirScopeWithCallableCopyReturnTypeUpdater(
}
private fun updateReturnType(declaration: FirCallableDeclaration) {
if (declaration.isCopyCreatedInScope) {
if (declaration.canHaveDeferredReturnTypeCalculation) {
callableCopyTypeCalculator.computeReturnType(declaration)
}
}