[FIR] rename ensureResolve -> lazyResolveToPhase as it better describes function semantics

This commit is contained in:
Ilya Kirillov
2022-08-09 14:13:04 +02:00
parent e7e9c24473
commit 0748f28efe
64 changed files with 210 additions and 221 deletions
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
import org.jetbrains.kotlin.fir.symbols.ensureResolved
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
import java.util.*
@@ -23,7 +23,7 @@ private var FirDeclaration.actualForExpectMap: WeakHashMap<FirSession, FirBasedS
val FirBasedSymbol<*>.expectForActual: ExpectForActualData?
get() {
ensureResolved(FirResolvePhase.EXPECT_ACTUAL_MATCHING)
lazyResolveToPhase(FirResolvePhase.EXPECT_ACTUAL_MATCHING)
return fir.expectForActual
}
@@ -46,7 +46,7 @@ fun FirDeclaration.getActualForExpect(useSiteSession: FirSession): FirBasedSymbo
}
fun FirBasedSymbol<*>.getActualForExpect(session: FirSession): FirBasedSymbol<*>? {
ensureResolved(FirResolvePhase.EXPECT_ACTUAL_MATCHING)
lazyResolveToPhase(FirResolvePhase.EXPECT_ACTUAL_MATCHING)
return fir.getActualForExpect(session)
}
@@ -44,19 +44,19 @@ abstract class FirBasedSymbol<E : FirDeclaration> {
// NB: annotation argument mapping (w/ vararg) are built/replaced during call completion, hence BODY_RESOLVE.
// TODO(KT-53371): optimize ARGUMENTS_OF_ANNOTATIONS to build annotation argument mapping too.
// TODO(KT-53519): Even with BODY_RESOLVE, argument mapping for annotations on [FirValueParameter] is not properly built.
ensureResolved(FirResolvePhase.BODY_RESOLVE)
lazyResolveToPhase(FirResolvePhase.BODY_RESOLVE)
return fir.annotations
}
val resolvedAnnotationsWithClassIds: List<FirAnnotation>
get() {
ensureResolved(FirResolvePhase.TYPES)
lazyResolveToPhase(FirResolvePhase.TYPES)
return fir.annotations
}
val resolvedAnnotationClassIds: List<ClassId>
get() {
ensureResolved(FirResolvePhase.TYPES)
lazyResolveToPhase(FirResolvePhase.TYPES)
return fir.annotations.mapNotNull { (it.annotationTypeRef.coneType as? ConeClassLikeType)?.lookupTag?.classId }
}
}
@@ -0,0 +1,27 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.symbols
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSessionComponent
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
abstract class FirLazyDeclarationResolver : FirSessionComponent {
abstract fun lazyResolveToPhase(symbol: FirBasedSymbol<*>, toPhase: FirResolvePhase)
}
val FirSession.lazyDeclarationResolver: FirLazyDeclarationResolver by FirSession.sessionComponentAccessor()
fun FirBasedSymbol<*>.lazyResolveToPhase(toPhase: FirResolvePhase) {
val session = fir.moduleData.session
val phaseManager = session.lazyDeclarationResolver
phaseManager.lazyResolveToPhase(this, toPhase)
}
fun FirDeclaration.lazyResolveToPhase(toPhase: FirResolvePhase) {
symbol.lazyResolveToPhase(toPhase)
}
@@ -1,30 +0,0 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.symbols
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSessionComponent
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
abstract class FirPhaseManager : FirSessionComponent {
abstract fun ensureResolved(
symbol: FirBasedSymbol<*>,
requiredPhase: FirResolvePhase = FirResolvePhase.DECLARATIONS
)
}
val FirSession.phaseManager: FirPhaseManager by FirSession.sessionComponentAccessor()
fun FirBasedSymbol<*>.ensureResolved(requiredPhase: FirResolvePhase) {
val session = fir.moduleData.session
val phaseManager = session.phaseManager
phaseManager.ensureResolved(this, requiredPhase)
}
fun FirDeclaration.ensureResolved(requiredPhase: FirResolvePhase) {
symbol.ensureResolved(requiredPhase)
}
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.ensureResolved
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.Name
@@ -33,13 +33,13 @@ abstract class FirCallableSymbol<D : FirCallableDeclaration> : FirBasedSymbol<D>
val resolvedContextReceivers: List<FirContextReceiver>
get() {
ensureResolved(FirResolvePhase.TYPES)
lazyResolveToPhase(FirResolvePhase.TYPES)
return fir.contextReceivers
}
val resolvedStatus: FirResolvedDeclarationStatus
get() {
ensureResolved(FirResolvePhase.STATUS)
lazyResolveToPhase(FirResolvePhase.STATUS)
return fir.status as FirResolvedDeclarationStatus
}
@@ -60,15 +60,15 @@ abstract class FirCallableSymbol<D : FirCallableDeclaration> : FirBasedSymbol<D>
val deprecation: DeprecationsPerUseSite?
get() {
ensureResolved(FirResolvePhase.STATUS)
lazyResolveToPhase(FirResolvePhase.STATUS)
return fir.deprecation
}
private fun ensureType(typeRef: FirTypeRef?) {
when (typeRef) {
null, is FirResolvedTypeRef -> {}
is FirImplicitTypeRef -> ensureResolved(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE)
else -> ensureResolved(FirResolvePhase.TYPES)
is FirImplicitTypeRef -> lazyResolveToPhase(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE)
else -> lazyResolveToPhase(FirResolvePhase.TYPES)
}
}
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.ensureResolved
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.coneType
@@ -26,7 +26,7 @@ sealed class FirClassLikeSymbol<D : FirClassLikeDeclaration>(
val deprecation: DeprecationsPerUseSite?
get() {
ensureResolved(FirResolvePhase.COMPILER_REQUIRED_ANNOTATIONS)
lazyResolveToPhase(FirResolvePhase.COMPILER_REQUIRED_ANNOTATIONS)
return fir.deprecation
}
@@ -45,7 +45,7 @@ sealed class FirClassSymbol<C : FirClass>(classId: ClassId) : FirClassLikeSymbol
val resolvedSuperTypeRefs: List<FirResolvedTypeRef>
get() {
ensureResolved(FirResolvePhase.SUPER_TYPES)
lazyResolveToPhase(FirResolvePhase.SUPER_TYPES)
@Suppress("UNCHECKED_CAST")
return fir.superTypeRefs as List<FirResolvedTypeRef>
}
@@ -68,7 +68,7 @@ sealed class FirClassSymbol<C : FirClass>(classId: ClassId) : FirClassLikeSymbol
val resolvedStatus: FirResolvedDeclarationStatus
get() {
ensureResolved(FirResolvePhase.STATUS)
lazyResolveToPhase(FirResolvePhase.STATUS)
return fir.status as FirResolvedDeclarationStatus
}
}
@@ -79,7 +79,7 @@ class FirRegularClassSymbol(classId: ClassId) : FirClassSymbol<FirRegularClass>(
val resolvedContextReceivers: List<FirContextReceiver>
get() {
ensureResolved(FirResolvePhase.TYPES)
lazyResolveToPhase(FirResolvePhase.TYPES)
return fir.contextReceivers
}
}
@@ -93,13 +93,13 @@ class FirTypeAliasSymbol(classId: ClassId) : FirClassLikeSymbol<FirTypeAlias>(cl
val resolvedStatus: FirResolvedDeclarationStatus
get() {
ensureResolved(FirResolvePhase.STATUS)
lazyResolveToPhase(FirResolvePhase.STATUS)
return fir.status as FirResolvedDeclarationStatus
}
val resolvedExpandedTypeRef: FirResolvedTypeRef
get() {
ensureResolved(FirResolvePhase.SUPER_TYPES)
lazyResolveToPhase(FirResolvePhase.SUPER_TYPES)
return fir.expandedTypeRef as FirResolvedTypeRef
}
@@ -10,9 +10,8 @@ import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.resolvedSymbol
import org.jetbrains.kotlin.fir.symbols.ensureResolved
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.name.*
sealed class FirFunctionSymbol<D : FirFunction>(
@@ -23,7 +22,7 @@ sealed class FirFunctionSymbol<D : FirFunction>(
val resolvedContractDescription: FirResolvedContractDescription?
get() {
ensureResolved(FirResolvePhase.CONTRACTS)
lazyResolveToPhase(FirResolvePhase.CONTRACTS)
return when (this) {
is FirNamedFunctionSymbol -> fir.contractDescription
is FirPropertyAccessorSymbol -> fir.contractDescription
@@ -33,7 +32,7 @@ sealed class FirFunctionSymbol<D : FirFunction>(
val resolvedControlFlowGraphReference: FirControlFlowGraphReference?
get() {
ensureResolved(FirResolvePhase.BODY_RESOLVE)
lazyResolveToPhase(FirResolvePhase.BODY_RESOLVE)
return fir.controlFlowGraphReference
}
}
@@ -70,7 +69,7 @@ class FirConstructorSymbol(
val resolvedDelegatedConstructorCall: FirDelegatedConstructorCall?
get() {
if (fir.delegatedConstructor == null) return null
ensureResolved(FirResolvePhase.BODY_RESOLVE)
lazyResolveToPhase(FirResolvePhase.BODY_RESOLVE)
return fir.delegatedConstructor
}
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.ensureResolved
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.Variance
@@ -26,7 +26,7 @@ class FirTypeParameterSymbol : FirClassifierSymbol<FirTypeParameter>() {
val resolvedBounds: List<FirResolvedTypeRef>
get() {
ensureResolved(FirResolvePhase.TYPES)
lazyResolveToPhase(FirResolvePhase.TYPES)
@Suppress("UNCHECKED_CAST")
return fir.bounds as List<FirResolvedTypeRef>
}
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.ensureResolved
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -44,7 +44,7 @@ open class FirPropertySymbol(
val controlFlowGraphReference: FirControlFlowGraphReference?
get() {
ensureResolved(FirResolvePhase.BODY_RESOLVE)
lazyResolveToPhase(FirResolvePhase.BODY_RESOLVE)
return fir.controlFlowGraphReference
}