FIR IDE: run lazy resolve on declaration when getting phased fir
This commit is contained in:
+1
-9
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.resolve.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
@@ -28,16 +27,9 @@ fun <D> AbstractFirBasedSymbol<D>.phasedFir(
|
||||
"Incorrect resolvePhase: actual: $availablePhase, expected: $requiredPhase\n For: ${fir.render()}"
|
||||
}
|
||||
|
||||
val containingFile = when (this) {
|
||||
is FirCallableSymbol<*> -> provider.getFirCallableContainerFile(this)
|
||||
is FirClassLikeSymbol<*> -> provider.getFirClassifierContainerFile(this)
|
||||
else -> null
|
||||
}
|
||||
?: throw AssertionError("Cannot get container file by symbol: $this (${result.render()})")
|
||||
|
||||
val resolver = fir.session.phasedFirFileResolver
|
||||
?: error("phasedFirFileResolver should be defined when working with FIR in phased mode")
|
||||
resolver.resolveFile(containingFile, fromPhase = availablePhase, toPhase = requiredPhase)
|
||||
resolver.resolveDeclaration(fir, fromPhase = availablePhase, toPhase = requiredPhase)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
+2
-1
@@ -7,11 +7,12 @@ package org.jetbrains.kotlin.fir.resolve.transformers
|
||||
|
||||
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.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
|
||||
abstract class PhasedFirFileResolver : FirSessionComponent {
|
||||
abstract fun resolveFile(firFile: FirFile, fromPhase: FirResolvePhase, toPhase: FirResolvePhase)
|
||||
abstract fun resolveDeclaration(declaration: FirDeclaration, fromPhase: FirResolvePhase, toPhase: FirResolvePhase)
|
||||
}
|
||||
|
||||
internal val FirSession.phasedFirFileResolver: PhasedFirFileResolver? by FirSession.nullableSessionComponentAccessor()
|
||||
Reference in New Issue
Block a user