From 01ca092f8bc9353aa49935aec7ca3f74abcbe148 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Tue, 8 Sep 2015 19:40:42 +0300 Subject: [PATCH] Cli light classes for file facades --- .../CliLightClassGenerationSupport.kt | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt index 67019fd9255..7d044ffb2d8 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackageViewDescriptor +import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.JetClassOrObject @@ -165,10 +166,9 @@ public class CliLightClassGenerationSupport(project: Project) : LightClassGenera } override fun findFilesForFacade(facadeFqName: FqName, scope: GlobalSearchScope): Collection { - // TODO We need a way to plug some platform-dependent stuff into LazyTopDownAnalyzer. - // It already performs some ad hoc stuff for packages->files mapping, anyway. - val filesInPackage = findFilesForPackage(facadeFqName.parent(), scope) - return PackagePartClassUtils.getFilesForPart(facadeFqName, filesInPackage) + return PackagePartClassUtils.getFilesWithCallables(findFilesForPackage(facadeFqName.parent(), scope)).filter { + JvmFileClassUtil.getFileClassInfoNoResolve(it).facadeClassFqName == facadeFqName + } } override fun getContextForFacade(files: Collection): LightClassConstructionContext { @@ -221,4 +221,16 @@ public class CliLightClassGenerationSupport(project: Project) : LightClassGenera return value } } + + override fun getFacadeClassesInPackage(packageFqName: FqName, scope: GlobalSearchScope): Collection { + return PackagePartClassUtils.getFilesWithCallables(findFilesForPackage(packageFqName, scope)).groupBy { + JvmFileClassUtil.getFileClassInfoNoResolve(it).facadeClassFqName + }.map { KotlinLightClassForFacade.createForFacade(psiManager, it.key, scope, it.value) }.filterNotNull() + } + + override fun getFacadeNames(packageFqName: FqName, scope: GlobalSearchScope): Collection { + return PackagePartClassUtils.getFilesWithCallables(findFilesForPackage(packageFqName, scope)).map { + JvmFileClassUtil.getFileClassInfoNoResolve(it).facadeClassFqName.shortName().asString() + } + } }