[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:
+8
-6
@@ -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() }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user