FIR IDE: run lazy resolve on declaration when getting phased fir

This commit is contained in:
Ilya Kirillov
2020-08-25 18:28:28 +03:00
parent 78bb1f1076
commit 8faaff00fa
5 changed files with 46 additions and 14 deletions
@@ -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
}
@@ -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()