diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt index 35c74270c61..ef1e25138a4 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt @@ -218,22 +218,14 @@ class LibraryInfo(val project: Project, val library: Library) : IdeaModuleInfo, } data class LibrarySourceInfo(val project: Project, val library: Library) : IdeaModuleInfo, SourceForBinaryModuleInfo { - override val moduleOrigin: ModuleOrigin - get() = ModuleOrigin.OTHER override val name: Name = Name.special("") - override fun contentScope(): GlobalSearchScope = GlobalSearchScope.EMPTY_SCOPE - override fun sourceScope(): GlobalSearchScope = LibrarySourceScope(project, library) override val isLibrary: Boolean get() = true - override fun dependencies(): List { - return listOf(this) + LibraryInfo(project, library).dependencies() - } - override fun modulesWhoseInternalsAreVisible(): Collection { return listOf(LibraryInfo(project, library)) } @@ -321,4 +313,16 @@ interface BinaryModuleInfo : IdeaModuleInfo { interface SourceForBinaryModuleInfo : IdeaModuleInfo { val binariesModuleInfo: BinaryModuleInfo fun sourceScope(): GlobalSearchScope + + // module infos for library source do not have contents in the following sense: + // we can not provide a collection of files that is supposed to be analyzed in IDE independently + // + // as of now each source file is analyzed separately and depends on corresponding binaries + // see KotlinCacheServiceImpl#createFacadeForSyntheticFiles + override fun contentScope(): GlobalSearchScope = GlobalSearchScope.EMPTY_SCOPE + + override fun dependencies() = listOf(this) + binariesModuleInfo.dependencies() + + override val moduleOrigin: ModuleOrigin + get() = ModuleOrigin.OTHER } \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt index 4296fd639eb..f983301e24a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt @@ -219,9 +219,6 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { ) } - syntheticFileModule is ScriptDependenciesModuleInfo -> { - createFacadeForScriptDependencies(syntheticFileModule, files) - } syntheticFileModule is ScriptModuleInfo -> { val facadeForScriptDependencies = getFacadeForScriptDependencies(syntheticFileModule) val globalContext = facadeForScriptDependencies.globalContext.contextWithNewLockAndCompositeExceptionTracker() @@ -235,6 +232,23 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { ) ) } + syntheticFileModule is ScriptDependenciesModuleInfo -> { + createFacadeForScriptDependencies(syntheticFileModule, files) + } + syntheticFileModule is ScriptDependenciesSourceModuleInfo -> { + // TODO: can be optimized by caching facadeForScriptDependencies + val facadeForScriptDependencies = createFacadeForScriptDependencies(syntheticFileModule.binariesModuleInfo, files) + val globalContext = facadeForScriptDependencies.globalContext.contextWithNewLockAndCompositeExceptionTracker() + ProjectResolutionFacade( + "facadeForSynthetic in ScriptDependenciesSourceModuleInfo", + project, globalContext, + makeGlobalResolveSessionProvider( + reuseDataFrom = facadeForScriptDependencies, + allModules = syntheticFileModule.dependencies(), + moduleFilter = { it == syntheticFileModule } + ) + ) + } syntheticFileModule is LibrarySourceInfo || syntheticFileModule is NotUnderContentRootModuleInfo -> { val librariesFacade = librariesFacade(targetPlatform, sdk) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ScriptModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ScriptModuleInfos.kt index ade224dd8ee..35fc1b23805 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ScriptModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ScriptModuleInfos.kt @@ -74,7 +74,7 @@ class ScriptDependenciesModuleInfo( val project: Project, val dependencies: KotlinScriptExternalDependencies?, val scriptModuleInfo: ScriptModuleInfo? -): IdeaModuleInfo { +): IdeaModuleInfo, BinaryModuleInfo { override fun dependencies() = (listOf(this) + sdkDependencies(dependencies, project)) override val name = Name.special("