K2 IDE SCRIPTS WIP
diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/AnalysisApiKtModuleProviderImpl.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/AnalysisApiKtModuleProviderImpl.kt index a4e14cf..7aa8839 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/AnalysisApiKtModuleProviderImpl.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/AnalysisApiKtModuleProviderImpl.kt
@@ -53,6 +53,7 @@ is KtSourceModule -> ktModule.moduleName is KtNotUnderContentRootModule -> TODO() is KtBuiltinsModule -> "Builtins for ${ktModule.platform}" + is KtScriptModule -> "script" }
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveStateService.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveStateService.kt index 30ebaa8..6cbd091 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveStateService.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirResolveStateService.kt
@@ -8,7 +8,6 @@ import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ProjectRootModificationTracker -import com.intellij.psi.util.PsiModificationTracker import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession @@ -61,6 +60,15 @@ ) } + is KtScriptModule -> { + LLFirSourceResolveSession( + useSiteSession.moduleComponents.globalResolveComponents, + sessionProviderStorage.project, + useSiteKtModule, + sessionProvider, + ) + } + is KtLibraryModule, is KtLibrarySourceModule -> { LLFirLibraryOrLibrarySourceResolvableResolveSession( useSiteSession.moduleComponents.globalResolveComponents,
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt index 5510a43..fae7fc4 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt
@@ -128,6 +128,9 @@ is FirBackingField -> declarationDesignationsToResolve(target.propertySymbol.fir) is FirTypeParameter -> declarationDesignationsToResolve(target.containingDeclarationSymbol.fir) is FirValueParameter -> declarationDesignationsToResolve(target.containingFunctionSymbol.fir) + is FirScript -> listOf( + FirDesignationWithFile(emptyList(), target, target.getContainingFile()!!) + ) is FirFile -> { val validForResolveDeclarations = buildList { add(target.annotationsContainer)
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt index 36077cd..ae89ef4 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt
@@ -13,9 +13,9 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirIdePredicateBasedProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirIdeRegisteredPluginAnnotations import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession -import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSourcesSession import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirExceptionHandler import org.jetbrains.kotlin.analysis.project.structure.KtCompilerPluginsProvider +import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule import org.jetbrains.kotlin.analysis.project.structure.moduleScopeProvider import org.jetbrains.kotlin.analysis.providers.createAnnotationResolver @@ -52,7 +52,7 @@ FirCompositeSymbolProvider(session, buildList(createSubProviders)) @SessionConfiguration -internal fun FirSession.registerCompilerPluginExtensions(project: Project, module: KtSourceModule) { +internal fun FirSession.registerCompilerPluginExtensions(project: Project, module: KtModule) { val extensionProvider = project.getService(KtCompilerPluginsProvider::class.java) ?: return FirSessionConfigurator(this).apply { @Suppress("UNCHECKED_CAST") @@ -67,12 +67,14 @@ } @SessionConfiguration -internal fun LLFirSourcesSession.registerCompilerPluginServices( +internal fun LLFirSession.registerCompilerPluginServices( contentScope: GlobalSearchScope, project: Project, - module: KtSourceModule + module: KtModule ) { - val projectWithDependenciesScope = contentScope.uniteWith(project.moduleScopeProvider.getModuleLibrariesScope(module)) + val projectWithDependenciesScope = + if (module is KtSourceModule) contentScope.uniteWith(project.moduleScopeProvider.getModuleLibrariesScope(module)) + else GlobalSearchScope.allScope(project) val annotationsResolver = project.createAnnotationResolver(projectWithDependenciesScope) // We need FirRegisteredPluginAnnotations and FirPredicateBasedProvider during extensions' registration process
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirIdePredicateBasedProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirIdePredicateBasedProvider.kt index 8df0ed2..4119f85 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirIdePredicateBasedProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirIdePredicateBasedProvider.kt
@@ -9,7 +9,7 @@ import kotlinx.collections.immutable.persistentListOf import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbol -import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSourcesSession +import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getContainingFile import org.jetbrains.kotlin.analysis.providers.KotlinAnnotationsResolver import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider @@ -40,7 +40,7 @@ * PSI index based implementation of [FirPredicateBasedProvider]. */ internal class LLFirIdePredicateBasedProvider( - private val session: LLFirSourcesSession, + private val session: LLFirSession, private val annotationsResolver: KotlinAnnotationsResolver, private val declarationProvider: KotlinDeclarationProvider, ) : FirPredicateBasedProvider() {
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt index c920200..89df743 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt
@@ -30,7 +30,10 @@ import org.jetbrains.kotlin.fir.backend.jvm.FirJvmTypeMapper import org.jetbrains.kotlin.fir.extensions.* import org.jetbrains.kotlin.fir.java.JavaSymbolProvider -import org.jetbrains.kotlin.fir.resolve.providers.* +import org.jetbrains.kotlin.fir.resolve.providers.DEPENDENCIES_SYMBOL_PROVIDER_QUALIFIED_KEY +import org.jetbrains.kotlin.fir.resolve.providers.FirProvider +import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider +import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider import org.jetbrains.kotlin.fir.session.* @@ -42,6 +45,115 @@ @OptIn(PrivateSessionConstructor::class, SessionConfiguration::class) internal object LLFirSessionFactory { + fun createScriptSession( + project: Project, + module: KtScriptModule, + globalResolveComponents: LLFirGlobalResolveComponents, + sessionInvalidator: LLFirSessionInvalidator, + sessionsCache: MutableMap<KtModule, LLFirSession>, + librariesSessionFactory: LLFirLibrarySessionFactory, + configureSession: (LLFirSession.() -> Unit)? = null + ): LLFirScriptSession { + sessionsCache[module]?.let { return it as LLFirScriptSession } + checkCanceled() + + val platform = module.platform + val builtinsSession = LLFirBuiltinsSessionFactory.getInstance(project).getBuiltinsSession(platform) + + val languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT + + val scopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped) + + val components = LLFirModuleResolveComponents(module, globalResolveComponents, scopeProvider, sessionInvalidator) + + val contentScope = module.contentScope + val session = LLFirScriptSession( + module, + project, + components, + builtinsSession.builtinTypes + ) + sessionsCache[module] = session + components.session = session + + return session.apply session@{ + val moduleData = LLFirModuleData(module).apply { bindSession(this@session) } + registerModuleData(moduleData) + register(FirKotlinScopeProvider::class, scopeProvider) + + registerIdeComponents(project) + registerCommonComponents(languageVersionSettings) + registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) + registerResolveComponents() + registerJavaSpecificResolveComponents() + + val provider = LLFirProvider( + this, + components, + project.createDeclarationProvider(contentScope), + project.createPackageProvider(contentScope), + /* Source modules can contain `kotlin` package only if `-Xallow-kotlin-package` is specified, this is handled in LLFirProvider */ + canContainKotlinPackage = false, + ) + + register(FirProvider::class, provider) + register(FirLazyDeclarationResolver::class, LLFirLazyDeclarationResolver()) + + registerCompilerPluginServices(contentScope, project, module) + registerCompilerPluginExtensions(project, module) + + val switchableExtensionDeclarationsSymbolProvider = FirSwitchableExtensionDeclarationsSymbolProvider.create(session)?.also { + register(FirSwitchableExtensionDeclarationsSymbolProvider::class, it) + } + + val dependencyProvider = LLFirDependentModuleProvidersBySessions(this) { + module.directRegularDependencies.mapNotNullTo(this) { dependency -> + when (dependency) { + is KtBuiltinsModule -> null // build in is already added + is KtBinaryModule -> LLFirLibrarySessionFactory.getInstance(project).getLibrarySession(dependency, sessionsCache) + is KtSourceModule -> { + createSourcesSession( + project, + dependency, + globalResolveComponents, + sessionInvalidator, + sessionsCache, + librariesSessionFactory = librariesSessionFactory, + configureSession = configureSession, + ) + } + is KtNotUnderContentRootModule -> error("Module $module cannot depend on ${dependency::class}: $dependency") + is KtLibrarySourceModule -> error("Module $module cannot depend on ${dependency::class}: $dependency") + is KtScriptModule -> TODO() + } + } + add(builtinsSession) + } + + val javaSymbolProvider = createJavaSymbolProvider(this, moduleData, project, contentScope) + register( + FirSymbolProvider::class, + LLFirModuleWithDependenciesSymbolProvider( + this, + dependencyProvider, + providers = listOfNotNull( + provider.symbolProvider, + switchableExtensionDeclarationsSymbolProvider, + javaSymbolProvider, + ), + ) + ) + register(JavaSymbolProvider::class, javaSymbolProvider) + + register(DEPENDENCIES_SYMBOL_PROVIDER_QUALIFIED_KEY, dependencyProvider) + register(FirJvmTypeMapper::class, FirJvmTypeMapper(this)) + register(LLFirFirClassByPsiClassProvider::class, LLFirFirClassByPsiClassProvider(this)) + + configureSession?.invoke(this) + extensionService.additionalCheckers.forEach(session.checkersComponent::register) + } + } + fun createSourcesSession( project: Project, module: KtSourceModule, @@ -130,6 +242,7 @@ } is KtNotUnderContentRootModule -> error("Module $module cannot depend on ${dependency::class}: $dependency") is KtLibrarySourceModule -> error("Module $module cannot depend on ${dependency::class}: $dependency") + is KtScriptModule -> TODO() } } add(builtinsSession)
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProviderStorage.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProviderStorage.kt index 8690c19..e88955a 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProviderStorage.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProviderStorage.kt
@@ -25,6 +25,7 @@ class LLFirSessionProviderStorage(val project: Project) { private val sourceAsUseSiteSessionCache = LLFirSessionsCache() private val libraryAsUseSiteSessionCache = LLFirSessionsCache() + private val scriptUseSiteSessionCache = LLFirSessionsCache() private val librariesSessionFactory = LLFirLibrarySessionFactory.getInstance(project) private val builtInsSessionFactory = LLFirBuiltinsSessionFactory.getInstance(project) @@ -49,9 +50,34 @@ LLFirSessionProvider(project, session, KtModuleToSessionMappingByMapImpl(mapOf(useSiteKtModule to session))) } + is KtScriptModule -> { + createSessionProviderForScriptSession(useSiteKtModule, configureSession) + } + else -> error("Unexpected ${useSiteKtModule::class.simpleName}") } + private fun createSessionProviderForScriptSession( + useSiteKtModule: KtScriptModule, + configureSession: (LLFirSession.() -> Unit)? + ): LLFirSessionProvider { + val (sessions, session) = scriptUseSiteSessionCache.withMappings(project) { mappings -> + val sessions = mutableMapOf<KtModule, LLFirSession>().apply { putAll(mappings) } + val session = LLFirSessionFactory.createScriptSession( + project, + useSiteKtModule, + globalComponents, + libraryAsUseSiteSessionCache.sessionInvalidator, + sessions, + librariesSessionFactory, + configureSession = configureSession, + ) + sessions to session + } + return LLFirSessionProvider(project, session, KtModuleToSessionMappingByMapImpl(sessions)) + } + + private fun createSessionProviderForSourceSession( useSiteKtModule: KtSourceModule,
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSourcesSession.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSourcesSession.kt index 3fa5f9f..ff302fb 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSourcesSession.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSourcesSession.kt
@@ -7,8 +7,7 @@ import com.intellij.openapi.project.Project import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents -import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirFileBuilder -import org.jetbrains.kotlin.analysis.project.structure.KtNotUnderContentRootModule +import org.jetbrains.kotlin.analysis.project.structure.KtScriptModule import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule import org.jetbrains.kotlin.fir.BuiltinTypes import org.jetbrains.kotlin.fir.PrivateSessionConstructor @@ -19,3 +18,11 @@ override val moduleComponents: LLFirModuleResolveComponents, builtinTypes: BuiltinTypes, ) : LLFirResolvableModuleSession(builtinTypes) + + +internal class LLFirScriptSession @PrivateSessionConstructor constructor( + override val ktModule: KtScriptModule, + override val project: Project, + override val moduleComponents: LLFirModuleResolveComponents, + builtinTypes: BuiltinTypes, +) : LLFirResolvableModuleSession(builtinTypes)
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirSourceResolveSession.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirSourceResolveSession.kt index 6e2de3c..9dd04b2 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirSourceResolveSession.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirSourceResolveSession.kt
@@ -9,10 +9,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveComponents import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionProvider -import org.jetbrains.kotlin.analysis.project.structure.KtBuiltinsModule -import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule -import org.jetbrains.kotlin.analysis.project.structure.KtModule -import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule +import org.jetbrains.kotlin.analysis.project.structure.* import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError import org.jetbrains.kotlin.diagnostics.KtPsiDiagnostic import org.jetbrains.kotlin.psi.KtElement @@ -37,6 +34,7 @@ override fun getModuleKind(module: KtModule): ModuleKind { return when (module) { is KtSourceModule -> ModuleKind.RESOLVABLE_MODULE + is KtScriptModule -> ModuleKind.RESOLVABLE_MODULE is KtBuiltinsModule, is KtLibraryModule -> ModuleKind.BINARY_MODULE else -> unexpectedElementError("module", module)
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyTransformerExecutor.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyTransformerExecutor.kt index d2a3737..26efb42 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyTransformerExecutor.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyTransformerExecutor.kt
@@ -24,7 +24,6 @@ towerDataContextCollector: FirTowerDataContextCollector?, firProviderInterceptor: FirProviderInterceptor?, ) { - val lazyTransformer = LazyTransformerFactory.createLazyTransformer( phase, designation,
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/contrainingFileUtils.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/contrainingFileUtils.kt index c9ad2c5..eafacda 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/contrainingFileUtils.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/contrainingFileUtils.kt
@@ -18,6 +18,14 @@ return when (this) { is FirFile -> this is FirFileAnnotationsContainer -> containingFileSymbol.fir + is FirScript -> { + val ktFile = psi?.containingFile as? KtFile + ?: error("File for dangling modifier list cannot be null") + val moduleComponents = llFirResolvableSession?.moduleComponents + ?: error("LLFirResolvableModuleSession for dangling modifier list cannot be null") + moduleComponents.cache.getCachedFirFile(ktFile) + ?: error("Fir file for dandling modifier list cannot be null") + } is FirTypeParameter -> containingDeclarationSymbol.fir.getContainingFile() is FirPropertyAccessor -> propertySymbol.fir.getContainingFile() is FirValueParameter -> containingFunctionSymbol.fir.getContainingFile()
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/KtCompilerPluginsProviderForTests.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/KtCompilerPluginsProviderForTests.kt index 6f7de0d..0bb765e 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/KtCompilerPluginsProviderForTests.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/KtCompilerPluginsProviderForTests.kt
@@ -7,11 +7,11 @@ import com.intellij.openapi.project.Project import org.jetbrains.kotlin.analysis.project.structure.KtCompilerPluginsProvider -import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule +import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor internal class KtCompilerPluginsProviderForTests(val project: Project) : KtCompilerPluginsProvider() { - override fun <T : Any> getRegisteredExtensions(module: KtSourceModule, extensionType: ProjectExtensionDescriptor<T>): List<T> { + override fun <T : Any> getRegisteredExtensions(module: KtModule, extensionType: ProjectExtensionDescriptor<T>): List<T> { return extensionType.getInstances(project) } }
diff --git a/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtCompilerPluginsProvider.kt b/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtCompilerPluginsProvider.kt index a453e25..e70d259 100644 --- a/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtCompilerPluginsProvider.kt +++ b/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtCompilerPluginsProvider.kt
@@ -14,5 +14,5 @@ /** * Returns a list of extensions of a base [extensionType] which are registered for [module] */ - public abstract fun <T : Any> getRegisteredExtensions(module: KtSourceModule, extensionType: ProjectExtensionDescriptor<T>): List<T> + public abstract fun <T : Any> getRegisteredExtensions(module: KtModule, extensionType: ProjectExtensionDescriptor<T>): List<T> }
diff --git a/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtModule.kt b/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtModule.kt index 9bd8090..6e10634 100644 --- a/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtModule.kt +++ b/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtModule.kt
@@ -146,6 +146,12 @@ get() = "Library sourced of $libraryName" } +public interface KtScriptModule : KtModule { + + override val moduleDescription: String + get() = "Script" +} + /** * Module which contains kotlin [builtins](https://kotlinlang.org/spec/built-in-types-and-their-semantics.html) for specific platform * Kotlin builtins are usually reside in the compiler, so [contentScope] and [getBinaryRoots] are empty