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
|
||||
|
||||
internal class FirModuleResolveStateDepended(
|
||||
private val originalState: FirModuleResolveStateImpl,
|
||||
val originalState: FirModuleResolveStateImpl,
|
||||
val towerProviderBuiltUponElement: FirTowerContextProvider,
|
||||
private val ktToFirMapping: KtToFirMapping?,
|
||||
) : FirModuleResolveState() {
|
||||
|
||||
+4
-7
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user