[FIR IDE] Remove withFirWithPossibleResolve inside function

This commit is contained in:
Igor Yakovlev
2021-07-21 16:56:34 +02:00
parent 563f8c8541
commit 4eb534e39b
6 changed files with 9 additions and 27 deletions
@@ -45,7 +45,7 @@ internal class KtFirCompletionCandidateChecker(
possibleExplicitReceiver: KtExpression?,
): KtExtensionApplicabilityResult = withValidityAssertion {
require(firSymbolForCandidate is KtFirSymbol<*>)
return firSymbolForCandidate.firRef.withFirWithPossibleResolveInside(
return firSymbolForCandidate.firRef.withFir(
phase = FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE
) { declaration ->
check(declaration is FirCallableDeclaration)
@@ -59,8 +59,8 @@ internal class KtFirScopeProvider(
private val packageMemberScopeCache = IdentityHashMap<KtPackageSymbol, KtPackageScope>()
private inline fun <T> KtSymbolWithMembers.withFirForScope(crossinline body: (FirClass) -> T): T? = when (this) {
is KtFirNamedClassOrObjectSymbol -> firRef.withFirWithPossibleResolveInside(FirResolvePhase.TYPES, body)
is KtFirAnonymousObjectSymbol -> firRef.withFirWithPossibleResolveInside(FirResolvePhase.TYPES, body)
is KtFirNamedClassOrObjectSymbol -> firRef.withFir(FirResolvePhase.TYPES, body)
is KtFirAnonymousObjectSymbol -> firRef.withFir(FirResolvePhase.TYPES, body)
is KtFirEnumEntrySymbol -> firRef.withFir(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) {
val initializer = it.initializer
check(initializer is FirAnonymousObject)
@@ -37,10 +37,10 @@ class KtFirOverrideInfoProvider(
require(classSymbol is KtFirSymbol<*>)
// Inspecting visibility requires resolving to status
return memberSymbol.firRef.withFirWithPossibleResolveInside(FirResolvePhase.STATUS) outer@{ memberFir ->
return memberSymbol.firRef.withFir(FirResolvePhase.STATUS) outer@{ memberFir ->
if (memberFir !is FirCallableDeclaration) return@outer false
classSymbol.firRef.withFirWithPossibleResolveInside inner@{ parentClassFir ->
classSymbol.firRef.withFir inner@{ parentClassFir ->
if (parentClassFir !is FirClass) return@inner false
memberFir.isVisibleInClass(parentClassFir)
@@ -53,10 +53,10 @@ class KtFirOverrideInfoProvider(
require(parentClassSymbol is KtFirSymbol<*>)
// Inspecting implementation status requires resolving to status
return memberSymbol.firRef.withFirWithPossibleResolveInside(FirResolvePhase.STATUS) outer@{ memberFir ->
return memberSymbol.firRef.withFir(FirResolvePhase.STATUS) outer@{ memberFir ->
if (memberFir !is FirCallableDeclaration) return@outer null
parentClassSymbol.firRef.withFirWithPossibleResolveInside inner@{ parentClassFir ->
parentClassSymbol.firRef.withFir inner@{ parentClassFir ->
if (parentClassFir !is FirClass) return@inner null
memberFir.symbol.getImplementationStatus(
@@ -69,7 +69,7 @@ internal fun FirRefWithValidityCheck<FirRegularClass>.superTypesAndAnnotationsLi
if(fir.resolvePhase >= FirResolvePhase.SUPER_TYPES) {
fir.superTypeRefs.mapToTypeAndAnnotations(this, builder)
} else null
} ?: withFirByTypeWithPossibleResolveInside(ResolveType.NoResolve) { fir ->
} ?: withFirByType(ResolveType.NoResolve) { fir ->
fir.resolveSupertypesInTheAir(builder.rootSession).mapToTypeAndAnnotations(this, builder)
}
}
@@ -31,7 +31,7 @@ internal class KtFirAnnotationCall(
}
override val classId: ClassId? by cached {
containingDeclaration.withFirByTypeWithPossibleResolveInside(ResolveType.AnnotationType) { fir ->
containingDeclaration.withFirByType(ResolveType.AnnotationType) { fir ->
annotationCallRef.getClassId(fir.moduleData.session)
}
}
@@ -45,24 +45,6 @@ internal class FirRefWithValidityCheck<out D : FirDeclaration>(fir: D, resolveSt
return action(fir)
}
/**
* Runs [action] with fir element with write action hold
* Consider using this then [action] may call some resolve
*/
inline fun <R> withFirWithPossibleResolveInside(
phase: FirResolvePhase = FirResolvePhase.RAW_FIR,
crossinline action: (fir: D) -> R
): R = withFir(phase, action)
/**
* Runs [action] with fir element with write action hold
* Consider using this then [action] may call some resolve
*/
inline fun <R> withFirByTypeWithPossibleResolveInside(
resolveType: ResolveType = ResolveType.NoResolve,
crossinline action: (fir: D) -> R
): R = withFirByType(resolveType, action)
val resolveState
get() = resolveStateWeakRef.get() ?: throw EntityWasGarbageCollectedException("FirModuleResolveState")