FIR IDE: fix getClosestAvailableParentContext

File could be physical yet the state is `FirModuleResolveStateDepended`
This commit is contained in:
Tianyu Geng
2021-09-13 11:39:35 -07:00
committed by Ilya Kirillov
parent 0ade231898
commit d968b2ba49
2 changed files with 5 additions and 8 deletions
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtLambdaExpression
internal class FirModuleResolveStateDepended(
private val originalState: FirModuleResolveStateImpl,
val originalState: FirModuleResolveStateImpl,
val towerProviderBuiltUponElement: FirTowerContextProvider,
private val ktToFirMapping: KtToFirMapping?,
) : FirModuleResolveState() {
@@ -102,7 +102,6 @@ object LowLevelFirApiFacadeForResolveOnAir {
place: KtElement,
): FirTowerContextProvider {
require(state is FirModuleResolveStateImpl)
require(place.isPhysical)
return if (place is KtFile) {
FileTowerProvider(place, onAirGetTowerContextForFile(state, place))
@@ -328,13 +327,11 @@ object LowLevelFirApiFacadeForResolveOnAir {
private class TowerProviderForElementForState(private val state: FirModuleResolveState) : FirTowerContextProvider {
override fun getClosestAvailableParentContext(ktElement: KtElement): FirTowerDataContext? {
return if (ktElement.isPhysical) {
onAirGetTowerContextProvider(state, ktElement).getClosestAvailableParentContext(ktElement)
} else {
require(state is FirModuleResolveStateDepended) {
"Invalid resolve state ${this::class.simpleName} but have to be ${FirModuleResolveStateDepended::class.simpleName}"
}
return if (state is FirModuleResolveStateDepended) {
state.towerProviderBuiltUponElement.getClosestAvailableParentContext(ktElement)
?: onAirGetTowerContextProvider(state.originalState, ktElement).getClosestAvailableParentContext(ktElement)
} else {
onAirGetTowerContextProvider(state, ktElement).getClosestAvailableParentContext(ktElement)
}
}
}