From 35e2561dab11d2d646f3ba3529121c4a8c91bae4 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Tue, 1 Feb 2022 16:06:41 +0300 Subject: [PATCH] KTIJ-20637 Group files by module and create facade class for each one Before all files were going to `getOrCreateSymbolLightFacade`. If there were both compiled and source files, it caused exceptions later (see `SymbolLightClassFacadeCache.getOrCreateFirLightFacadeNoCache`). When grouped by the `KtModule`, each file group should contain either only sources or only compiled classes. ^KTIJ-20637 Fixed --- .../classes/symbol/IDEKotlinAsJavaFirSupport.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/IDEKotlinAsJavaFirSupport.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/IDEKotlinAsJavaFirSupport.kt index 90475c4977a..ae843a2a955 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/IDEKotlinAsJavaFirSupport.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/IDEKotlinAsJavaFirSupport.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtScript -import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty class IDEKotlinAsJavaFirSupport(private val project: Project) : KotlinAsJavaSupport() { override fun findClassOrObjectDeclarationsInPackage( @@ -91,13 +90,15 @@ class IDEKotlinAsJavaFirSupport(private val project: Project) : KotlinAsJavaSupp override fun getLightClassForScript(script: KtScript): KtLightClass = error("Should not be called") - override fun getFacadeClasses(facadeFqName: FqName, scope: GlobalSearchScope): Collection = - //TODO Split by modules - findFilesForFacade(facadeFqName, scope).ifNotEmpty { - listOfNotNull( - project.getService(SymbolLightClassFacadeCache::class.java).getOrCreateSymbolLightFacade(this.toList(), facadeFqName) - ) - } ?: emptyList() + override fun getFacadeClasses(facadeFqName: FqName, scope: GlobalSearchScope): Collection { + val filesByModule = findFilesForFacade(facadeFqName, scope).groupBy { it.getKtModule(project) } + + val lightClassFacadeCache = project.getService(SymbolLightClassFacadeCache::class.java) + + return filesByModule.values.mapNotNull { files -> + lightClassFacadeCache.getOrCreateSymbolLightFacade(files, facadeFqName) + } + } override fun getScriptClasses(scriptFqName: FqName, scope: GlobalSearchScope): Collection = error("Should not be called")