FIR IDE: lazy resolve property accessors
This commit is contained in:
+13
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.psi
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerDataContextCollector
|
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerDataContextCollector
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirDesignatedBodyResolveTransformerForIDE
|
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirDesignatedBodyResolveTransformerForIDE
|
||||||
@@ -37,6 +38,18 @@ internal class FirLazyDeclarationResolver(
|
|||||||
reresolveFile: Boolean = false,
|
reresolveFile: Boolean = false,
|
||||||
) {
|
) {
|
||||||
if (declaration.resolvePhase >= toPhase) return
|
if (declaration.resolvePhase >= toPhase) return
|
||||||
|
|
||||||
|
if (declaration is FirPropertyAccessor) {
|
||||||
|
val ktContainingProperty = when (val ktDeclaration = declaration.ktDeclaration) {
|
||||||
|
is KtPropertyAccessor -> ktDeclaration.property
|
||||||
|
is KtProperty -> ktDeclaration
|
||||||
|
else -> error("Invalid source of property accessor ${ktDeclaration::class}")
|
||||||
|
}
|
||||||
|
val containingProperty = ktContainingProperty
|
||||||
|
.findSourceNonLocalFirDeclaration(firFileBuilder, declaration.session.firSymbolProvider, moduleFileCache)
|
||||||
|
return lazyResolveDeclaration(containingProperty, moduleFileCache, toPhase, towerDataContextCollector)
|
||||||
|
}
|
||||||
|
|
||||||
val firFile = declaration.getContainingFile()
|
val firFile = declaration.getContainingFile()
|
||||||
?: error("FirFile was not found for\n${declaration.render()}")
|
?: error("FirFile was not found for\n${declaration.render()}")
|
||||||
val provider = firFile.session.firIdeProvider
|
val provider = firFile.session.firIdeProvider
|
||||||
|
|||||||
Reference in New Issue
Block a user