From f6710613286d9464b8c90937b38971cc4a8caa08 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Fri, 23 Jul 2021 14:57:36 +0200 Subject: [PATCH] [FIR IDE] Add check resolved type for phase less than Types --- ...deDesignatedBodyResolveTransformerForReturnTypeCalculator.kt | 1 + .../FirIdeEnsureBasedTransformerForReturnTypeCalculator.kt | 2 ++ .../level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt | 1 + 3 files changed, 4 insertions(+) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator.kt index 977b4d6111d..949e1939613 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator.kt @@ -62,6 +62,7 @@ private class FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculatorImpl( private inline fun D.processCallable(body: (FirDeclarationDesignation) -> Unit) { if (this !== targetDeclaration) return + if (resolvePhase < FirResolvePhase.TYPES && returnTypeRef is FirResolvedTypeRef) return ensureResolved(FirResolvePhase.TYPES) if (returnTypeRef is FirImplicitTypeRef) { val declarationList = designation.filterIsInstance() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeEnsureBasedTransformerForReturnTypeCalculator.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeEnsureBasedTransformerForReturnTypeCalculator.kt index f0bf1b934db..0ad99f3ed8f 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeEnsureBasedTransformerForReturnTypeCalculator.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeEnsureBasedTransformerForReturnTypeCalculator.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDesignatedB import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession import org.jetbrains.kotlin.fir.symbols.ensureResolved import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef +import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef fun FirIdeEnsureBasedTransformerForReturnTypeCalculator( designation: Iterator, @@ -60,6 +61,7 @@ private class FirIdeEnsureBasedTransformerForReturnTypeCalculatorImpl( private fun T.ensureReturnType() { if (this !== targetDeclaration) return + if (resolvePhase < FirResolvePhase.TYPES && returnTypeRef is FirResolvedTypeRef) return ensureResolved(FirResolvePhase.TYPES) if (returnTypeRef is FirImplicitTypeRef) { ensureResolved(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt index 9a166ec21bf..be280b1a68d 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt @@ -43,6 +43,7 @@ internal fun FirLazyDeclarationResolver.lazyResolveDeclaration( } if (firDeclaration.resolvePhase < FirResolvePhase.TYPES) { + if (firDeclaration.returnTypeRef is FirResolvedTypeRef) return lazyResolveDeclaration( firDeclarationToResolve = firDeclaration, moduleFileCache = moduleFileCache,