[LL] retrieve module by original file
originalDeclaration is set for non-local declarations only, thus requesting symbols for local declarations still goes with non-physical elements This lead to ModuleKind.BINARY_MODULE for `NotUnderContentRootModule`s, because the declaring file is different KT-60377
This commit is contained in:
+5
-6
@@ -17,10 +17,9 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.retryOnInval
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirResolvableModuleSession
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionCache
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.*
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.FirDeclarationForCompiledElementSearcher
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.findSourceNonLocalFirDeclaration
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.originalDeclaration
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.requireIsInstance
|
||||
@@ -103,21 +102,21 @@ internal abstract class LLFirResolvableResolveSession(
|
||||
ktDeclaration: KtDeclaration,
|
||||
phase: FirResolvePhase
|
||||
): FirBasedSymbol<*> {
|
||||
val module = getModule(ktDeclaration.originalDeclaration ?: ktDeclaration)
|
||||
val containingKtFile = ktDeclaration.containingKtFile
|
||||
val module = getModule(containingKtFile.originalKtFile ?: containingKtFile)
|
||||
retryOnInvalidSession {
|
||||
return when (getModuleKind(module)) {
|
||||
ModuleKind.RESOLVABLE_MODULE -> findSourceFirSymbol(ktDeclaration, module).also { resolveFirToPhase(it.fir, phase) }
|
||||
ModuleKind.BINARY_MODULE -> findFirCompiledSymbol(ktDeclaration)
|
||||
ModuleKind.BINARY_MODULE -> findFirCompiledSymbol(ktDeclaration, module)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun findFirCompiledSymbol(ktDeclaration: KtDeclaration): FirBasedSymbol<*> {
|
||||
private fun findFirCompiledSymbol(ktDeclaration: KtDeclaration, module: KtModule): FirBasedSymbol<*> {
|
||||
require(ktDeclaration.containingKtFile.isCompiled) {
|
||||
"This method will only work on compiled declarations, but this declaration is not compiled: ${ktDeclaration.getElementTextInContext()}"
|
||||
}
|
||||
|
||||
val module = getModule(ktDeclaration)
|
||||
val session = getSessionFor(module)
|
||||
val searcher = FirDeclarationForCompiledElementSearcher(session.symbolProvider)
|
||||
val firDeclaration = searcher.findNonLocalDeclaration(ktDeclaration)
|
||||
|
||||
Reference in New Issue
Block a user