[Analysis API] Load scripting extensions for script dangling files

The commit fixes failing 'ContextCollectorScriptTestGenerated'
for dangling file copies.
This commit is contained in:
Yan Zhulanow
2024-01-11 17:04:37 +09:00
committed by Space Team
parent e47f505eb9
commit 0502da474b
@@ -160,28 +160,32 @@ internal abstract class LLFirAbstractSessionFactory(protected val project: Proje
register(FirRegisteredPluginAnnotations::class, FirRegisteredPluginAnnotationsImpl(this))
register(FirJvmTypeMapper::class, FirJvmTypeMapper(this))
FirSessionConfigurator(this).apply {
val hostConfiguration = ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration) {}
val scriptDefinition = module.file.findScriptDefinition()
?: errorWithAttachment("Cannot load script definition") {
withVirtualFileEntry("file", module.file.virtualFile)
}
val extensionRegistrar = FirScriptingCompilerExtensionIdeRegistrar(
project,
hostConfiguration,
scriptDefinitionSources = emptyList(),
scriptDefinitions = listOf(scriptDefinition)
)
registerExtensions(extensionRegistrar.configure())
registerExtensions(FirScriptingSamWithReceiverExtensionRegistrar().configure())
}.configure()
registerScriptExtensions(this, module.file)
LLFirSessionConfigurator.configure(this)
}
}
private fun registerScriptExtensions(session: LLFirSession, file: KtFile) {
FirSessionConfigurator(session).apply {
val hostConfiguration = ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration) {}
val scriptDefinition = file.findScriptDefinition()
?: errorWithAttachment("Cannot load script definition") {
withVirtualFileEntry("file", file.virtualFile)
}
val extensionRegistrar = FirScriptingCompilerExtensionIdeRegistrar(
project,
hostConfiguration,
scriptDefinitionSources = emptyList(),
scriptDefinitions = listOf(scriptDefinition)
)
registerExtensions(extensionRegistrar.configure())
registerExtensions(FirScriptingSamWithReceiverExtensionRegistrar().configure())
}.configure()
}
fun createNotUnderContentRootResolvableSession(module: KtNotUnderContentRootModule): LLFirNotUnderContentRootResolvableModuleSession {
val builtinsSession = LLFirBuiltinsSessionFactory.getInstance(project).getBuiltinsSession(JvmPlatforms.unspecifiedJvmPlatform)
val languageVersionSettings = ProjectStructureProvider.getInstance(project).globalLanguageVersionSettings
@@ -532,6 +536,10 @@ internal abstract class LLFirAbstractSessionFactory(protected val project: Proje
.createIfNeeded(this)
?.also { register(FirSwitchableExtensionDeclarationsSymbolProvider::class, it) }
if (contextModule is KtScriptModule) {
registerScriptExtensions(this, contextModule.file)
}
val context = DanglingFileSessionCreationContext(
moduleData,
firProvider,