AA: better error message for file w/o containing module

...instead of throwing NoSuchElementException
This commit is contained in:
Jinseong Jeon
2023-06-30 22:26:03 -07:00
committed by Ilya Kirillov
parent b67b37cdb3
commit 5596c3ae80
3 changed files with 33 additions and 4 deletions
@@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.project.structure.*
import org.jetbrains.kotlin.psi.psiUtil.contains
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
class KtStaticModuleProvider(
private val builtinsModule: KtBuiltinsModule,
@@ -31,8 +32,13 @@ class KtStaticModuleProvider(
containingFileAsVirtualFile in binaryModule.contentScope
}?.let { return it }
return projectStructure.mainModules
.first { module -> element in module.ktModule.contentScope }
.ktModule
return projectStructure.mainModules.firstOrNull { module ->
element in module.ktModule.contentScope
}?.ktModule
?: throw KotlinExceptionWithAttachments("Cannot find KtModule; see the attachment for more details.")
.withAttachment(
containingFileAsVirtualFile.path,
allModules.joinToString(separator = System.lineSeparator()) { it.asDebugString() }
)
}
}
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirBu
import org.jetbrains.kotlin.analysis.project.structure.*
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
internal class KtModuleProviderImpl(
private val platform: TargetPlatform,
@@ -36,6 +37,7 @@ internal class KtModuleProviderImpl(
LLFirBuiltinsSessionFactory.getInstance(project).getBuiltinsSession(platform).ktModule as KtBuiltinsModule
}
@OptIn(KtModuleStructureInternals::class)
override fun getModule(element: PsiElement, contextualModule: KtModule?): KtModule {
val containingFileAsPsiFile = element.containingFile
?: return ktNotUnderContentRootModuleWithoutPsiFile
@@ -56,9 +58,16 @@ internal class KtModuleProviderImpl(
return builtinsModule
}
return mainModules.first { module ->
containingFileAsVirtualFile.analysisExtensionFileContextModule?.let { return it }
return mainModules.firstOrNull { module ->
containingFileAsVirtualFile in module.contentScope
}
?: throw KotlinExceptionWithAttachments("Cannot find KtModule; see the attachment for more details.")
.withAttachment(
containingFileAsVirtualFile.path,
mainModules.joinToString(separator = System.lineSeparator()) { it.asDebugString() }
)
}
internal val binaryModules: List<KtBinaryModule> by lazy {