[kotlin fir] fix creating symbol not in analysis scope

^KTIJ-21504 fixed
This commit is contained in:
Ilya Kirillov
2022-04-19 13:17:28 +02:00
parent 25d6439471
commit 3b4eb2d788
7 changed files with 113 additions and 7 deletions
@@ -49,7 +49,7 @@ interface Fe10AnalysisFacade {
class Fe10AnalysisContext(
facade: Fe10AnalysisFacade,
contextElement: KtElement,
val contextElement: KtElement,
val token: ValidityToken
) : Fe10AnalysisFacade by facade {
val resolveSession: ResolveSession = getResolveSession(contextElement)
@@ -8,15 +8,24 @@ package org.jetbrains.kotlin.analysis.api.descriptors
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.components.*
import org.jetbrains.kotlin.analysis.api.descriptors.components.*
import org.jetbrains.kotlin.analysis.api.impl.base.components.KtAnalysisScopeProviderImpl
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolProvider
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
@Suppress("LeakingThis")
class KtFe10AnalysisSession(val analysisContext: Fe10AnalysisContext) : KtAnalysisSession(analysisContext.token) {
constructor(contextElement: KtElement, token: ValidityToken) :
this(Fe10AnalysisContext(Fe10AnalysisFacade.getInstance(contextElement.project), contextElement, token))
class KtFe10AnalysisSession(
val analysisContext: Fe10AnalysisContext,
override val useSiteModule: KtModule
) : KtAnalysisSession(analysisContext.token) {
constructor(contextElement: KtElement, token: ValidityToken) : this(
Fe10AnalysisContext(Fe10AnalysisFacade.getInstance(contextElement.project), contextElement, token),
contextElement.getKtModule()
)
override val smartCastProviderImpl: KtSmartCastProvider = KtFe10SmartCastProvider(this)
override val diagnosticProviderImpl: KtDiagnosticProvider = KtFe10DiagnosticProvider(this)
@@ -25,7 +34,8 @@ class KtFe10AnalysisSession(val analysisContext: Fe10AnalysisContext) : KtAnalys
override val symbolProviderImpl: KtSymbolProvider = KtFe10SymbolProvider(this)
override val callResolverImpl: KtCallResolver = KtFe10CallResolver(this)
override val completionCandidateCheckerImpl: KtCompletionCandidateChecker = KtFe10CompletionCandidateChecker(this)
override val symbolDeclarationOverridesProviderImpl: KtSymbolDeclarationOverridesProvider = KtFe10SymbolDeclarationOverridesProvider(this)
override val symbolDeclarationOverridesProviderImpl: KtSymbolDeclarationOverridesProvider =
KtFe10SymbolDeclarationOverridesProvider(this)
override val referenceShortenerImpl: KtReferenceShortener = KtFe10ReferenceShortener(this)
override val symbolDeclarationRendererProviderImpl: KtSymbolDeclarationRendererProvider = KtFe10SymbolDeclarationRendererProvider(this)
override val expressionTypeProviderImpl: KtExpressionTypeProvider = KtFe10ExpressionTypeProvider(this)
@@ -43,6 +53,7 @@ class KtFe10AnalysisSession(val analysisContext: Fe10AnalysisContext) : KtAnalys
override val importOptimizerImpl: KtImportOptimizer = KtFe10ImportOptimizer(this)
override val jvmTypeMapperImpl: KtJvmTypeMapper = KtFe10JvmTypeMapper(this)
override val symbolInfoProviderImpl: KtSymbolInfoProvider = KtFe10SymbolInfoProvider(this)
override val analysisScopeProviderImpl: KtAnalysisScopeProvider = KtAnalysisScopeProviderImpl(this, token)
override fun createContextDependentCopy(originalKtFile: KtFile, elementToReanalyze: KtElement): KtAnalysisSession {
return KtFe10AnalysisSession(elementToReanalyze, token)
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
import org.jetbrains.kotlin.analysis.api.tokens.ValidityTokenFactory
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
import org.jetbrains.kotlin.psi.KtElement
import java.lang.UnsupportedOperationException
@@ -24,7 +25,7 @@ class KtFe10AnalysisSessionProvider : KtAnalysisSessionProvider() {
@InvalidWayOfUsingAnalysisSession
override fun getAnalysisSessionBySymbol(contextSymbol: KtSymbol): KtAnalysisSession {
if (contextSymbol is KtFe10Symbol) {
return KtFe10AnalysisSession(contextSymbol.analysisContext)
return KtFe10AnalysisSession(contextSymbol.analysisContext, contextSymbol.analysisContext.contextElement.getKtModule())
} else {
val contextElement = contextSymbol.psi
if (contextElement is KtElement) {