[Analysis API] Fix module provider for files from dependent sessions

Files coming from dependent sessions might be fully virtual, so there
won't be any backing 'VirtualFile'. However, they generally belong to
their original file's module.
This commit is contained in:
Yan Zhulanow
2023-08-01 14:46:59 +09:00
committed by Space Team
parent f503d2a3fc
commit 6413294f3f
@@ -18,16 +18,18 @@ class KtStaticModuleProvider(
) : KtStaticProjectStructureProvider() { ) : KtStaticProjectStructureProvider() {
@OptIn(KtModuleStructureInternals::class) @OptIn(KtModuleStructureInternals::class)
override fun getModule(element: PsiElement, contextualModule: KtModule?): KtModule { override fun getModule(element: PsiElement, contextualModule: KtModule?): KtModule {
val containingFileAsPsiFile = element.containingFile // Unwrap context-dependent file copies coming from dependent sessions
val containingFileAsVirtualFile = containingFileAsPsiFile.virtualFile val containingPsiFile = element.containingFile.originalFile
if (containingFileAsVirtualFile.extension == BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION) {
val containingVirtualFile = containingPsiFile.virtualFile
if (containingVirtualFile.extension == BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION) {
return builtinsModule return builtinsModule
} }
containingFileAsVirtualFile.analysisExtensionFileContextModule?.let { return it } containingVirtualFile.analysisExtensionFileContextModule?.let { return it }
projectStructure.binaryModules.firstOrNull { binaryModule -> projectStructure.binaryModules.firstOrNull { binaryModule ->
containingFileAsVirtualFile in binaryModule.contentScope containingVirtualFile in binaryModule.contentScope
}?.let { return it } }?.let { return it }
return projectStructure.mainModules.firstOrNull { module -> return projectStructure.mainModules.firstOrNull { module ->
@@ -35,7 +37,7 @@ class KtStaticModuleProvider(
}?.ktModule }?.ktModule
?: throw KotlinExceptionWithAttachments("Cannot find KtModule; see the attachment for more details.") ?: throw KotlinExceptionWithAttachments("Cannot find KtModule; see the attachment for more details.")
.withAttachment( .withAttachment(
containingFileAsVirtualFile.path, containingVirtualFile.path,
allKtModules.joinToString(separator = System.lineSeparator()) { it.asDebugString() } allKtModules.joinToString(separator = System.lineSeparator()) { it.asDebugString() }
) )
} }