[FIR] avoid jumping from status transformer for local classes to unresolved non-local classes
We must resolve a non-local declaration before access if we want to jump from local to it to avoid possible problems with parallel resolution ^KT-56550
This commit is contained in:
committed by
Space Team
parent
71c66cdb01
commit
ba08f2c08a
+8
-1
@@ -190,6 +190,8 @@ abstract class AbstractFirStatusResolveTransformer(
|
||||
private val designationMapForLocalClasses: Map<FirClassLikeDeclaration, FirClassLikeDeclaration?>,
|
||||
private val scopeForLocalClass: FirScope?
|
||||
) : FirAbstractTreeTransformer<FirResolvedDeclarationStatus?>(phase = FirResolvePhase.STATUS) {
|
||||
private val isTransformerForLocalDeclarations: Boolean get() = scopeForLocalClass != null
|
||||
|
||||
@PrivateForInline
|
||||
val classes = mutableListOf<FirClass>()
|
||||
val statusResolver = FirStatusResolver(session, scopeSession)
|
||||
@@ -329,7 +331,12 @@ abstract class AbstractFirStatusResolveTransformer(
|
||||
|
||||
private fun forceResolveStatusOfCorrespondingClass(typeRef: FirTypeRef) {
|
||||
val superClassSymbol = typeRef.coneType.toSymbol(session)
|
||||
superClassSymbol?.lazyResolveToPhase(FirResolvePhase.STATUS.previous)
|
||||
if (isTransformerForLocalDeclarations) {
|
||||
superClassSymbol?.lazyResolveToPhase(FirResolvePhase.STATUS)
|
||||
} else {
|
||||
superClassSymbol?.lazyResolveToPhase(FirResolvePhase.STATUS.previous)
|
||||
}
|
||||
|
||||
when (superClassSymbol) {
|
||||
is FirRegularClassSymbol -> forceResolveStatusesOfClass(superClassSymbol.fir)
|
||||
is FirTypeAliasSymbol -> forceResolveStatusOfCorrespondingClass(superClassSymbol.fir.expandedTypeRef)
|
||||
|
||||
Reference in New Issue
Block a user