From 0f016c89aa8d47855c204233129d036fd796629b Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Thu, 30 Sep 2021 15:45:33 -0700 Subject: [PATCH] FIR LL: use real FIR in HL API implementation In depended mode, a fake file is created and hence some generated FIR elements are based on this fake file. However, FIR cares about the identity of FIR elements: for example, loading overridden symbol does not work with fake FIR elements. This change makes LL API to always create FIR elements from the underlying real PSI so that HL API implementation to always use the real FIR element to answer queries. --- .../api/fir/FirModuleResolveStateImpl.kt | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/FirModuleResolveStateImpl.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/FirModuleResolveStateImpl.kt index 51780e4620f..f214458a49b 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/FirModuleResolveStateImpl.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/FirModuleResolveStateImpl.kt @@ -6,16 +6,6 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic -import org.jetbrains.kotlin.fir.declarations.FirDeclaration -import org.jetbrains.kotlin.fir.declarations.FirFile -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression -import org.jetbrains.kotlin.fir.expressions.FirAnonymousObjectExpression -import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.annotations.InternalForInline import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirModuleResolveState @@ -34,9 +24,20 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.FirIdeSourcesSes import org.jetbrains.kotlin.analysis.low.level.api.fir.util.FirDeclarationForCompiledElementSearcher import org.jetbrains.kotlin.analysis.low.level.api.fir.util.findSourceNonLocalFirDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getElementTextInContext +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.originalDeclaration import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule import org.jetbrains.kotlin.analysis.project.structure.getKtModule +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression +import org.jetbrains.kotlin.fir.expressions.FirAnonymousObjectExpression +import org.jetbrains.kotlin.fir.resolve.ScopeSession +import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.psi.* internal class FirModuleResolveStateImpl( @@ -84,8 +85,9 @@ internal class FirModuleResolveStateImpl( diagnosticsCollector.collectDiagnosticsForFile(ktFile, filter) @OptIn(InternalForInline::class) - override fun findSourceFirDeclaration(ktDeclaration: KtDeclaration): FirDeclaration = - findSourceFirDeclarationByExpression(ktDeclaration) + override fun findSourceFirDeclaration(ktDeclaration: KtDeclaration): FirDeclaration { + return findSourceFirDeclarationByExpression(ktDeclaration.originalDeclaration ?: ktDeclaration) + } @OptIn(InternalForInline::class) override fun findSourceFirDeclaration(ktDeclaration: KtLambdaExpression): FirDeclaration =