FIR IDE: fix getClosestAvailableParentContext
File could be physical yet the state is `FirModuleResolveStateDepended`
This commit is contained in:
committed by
Ilya Kirillov
parent
0ade231898
commit
d968b2ba49
+1
-1
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.psi.KtFile
|
|||||||
import org.jetbrains.kotlin.psi.KtLambdaExpression
|
import org.jetbrains.kotlin.psi.KtLambdaExpression
|
||||||
|
|
||||||
internal class FirModuleResolveStateDepended(
|
internal class FirModuleResolveStateDepended(
|
||||||
private val originalState: FirModuleResolveStateImpl,
|
val originalState: FirModuleResolveStateImpl,
|
||||||
val towerProviderBuiltUponElement: FirTowerContextProvider,
|
val towerProviderBuiltUponElement: FirTowerContextProvider,
|
||||||
private val ktToFirMapping: KtToFirMapping?,
|
private val ktToFirMapping: KtToFirMapping?,
|
||||||
) : FirModuleResolveState() {
|
) : FirModuleResolveState() {
|
||||||
|
|||||||
+4
-7
@@ -102,7 +102,6 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
place: KtElement,
|
place: KtElement,
|
||||||
): FirTowerContextProvider {
|
): FirTowerContextProvider {
|
||||||
require(state is FirModuleResolveStateImpl)
|
require(state is FirModuleResolveStateImpl)
|
||||||
require(place.isPhysical)
|
|
||||||
|
|
||||||
return if (place is KtFile) {
|
return if (place is KtFile) {
|
||||||
FileTowerProvider(place, onAirGetTowerContextForFile(state, place))
|
FileTowerProvider(place, onAirGetTowerContextForFile(state, place))
|
||||||
@@ -328,13 +327,11 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
|
|
||||||
private class TowerProviderForElementForState(private val state: FirModuleResolveState) : FirTowerContextProvider {
|
private class TowerProviderForElementForState(private val state: FirModuleResolveState) : FirTowerContextProvider {
|
||||||
override fun getClosestAvailableParentContext(ktElement: KtElement): FirTowerDataContext? {
|
override fun getClosestAvailableParentContext(ktElement: KtElement): FirTowerDataContext? {
|
||||||
return if (ktElement.isPhysical) {
|
return if (state is FirModuleResolveStateDepended) {
|
||||||
onAirGetTowerContextProvider(state, ktElement).getClosestAvailableParentContext(ktElement)
|
|
||||||
} else {
|
|
||||||
require(state is FirModuleResolveStateDepended) {
|
|
||||||
"Invalid resolve state ${this::class.simpleName} but have to be ${FirModuleResolveStateDepended::class.simpleName}"
|
|
||||||
}
|
|
||||||
state.towerProviderBuiltUponElement.getClosestAvailableParentContext(ktElement)
|
state.towerProviderBuiltUponElement.getClosestAvailableParentContext(ktElement)
|
||||||
|
?: onAirGetTowerContextProvider(state.originalState, ktElement).getClosestAvailableParentContext(ktElement)
|
||||||
|
} else {
|
||||||
|
onAirGetTowerContextProvider(state, ktElement).getClosestAvailableParentContext(ktElement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user