Cli light classes for file facades
This commit is contained in:
+16
-4
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
|
||||||
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.JetClassOrObject
|
import org.jetbrains.kotlin.psi.JetClassOrObject
|
||||||
@@ -165,10 +166,9 @@ public class CliLightClassGenerationSupport(project: Project) : LightClassGenera
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun findFilesForFacade(facadeFqName: FqName, scope: GlobalSearchScope): Collection<JetFile> {
|
override fun findFilesForFacade(facadeFqName: FqName, scope: GlobalSearchScope): Collection<JetFile> {
|
||||||
// TODO We need a way to plug some platform-dependent stuff into LazyTopDownAnalyzer.
|
return PackagePartClassUtils.getFilesWithCallables(findFilesForPackage(facadeFqName.parent(), scope)).filter {
|
||||||
// It already performs some ad hoc stuff for packages->files mapping, anyway.
|
JvmFileClassUtil.getFileClassInfoNoResolve(it).facadeClassFqName == facadeFqName
|
||||||
val filesInPackage = findFilesForPackage(facadeFqName.parent(), scope)
|
}
|
||||||
return PackagePartClassUtils.getFilesForPart(facadeFqName, filesInPackage)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getContextForFacade(files: Collection<JetFile>): LightClassConstructionContext {
|
override fun getContextForFacade(files: Collection<JetFile>): LightClassConstructionContext {
|
||||||
@@ -221,4 +221,16 @@ public class CliLightClassGenerationSupport(project: Project) : LightClassGenera
|
|||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getFacadeClassesInPackage(packageFqName: FqName, scope: GlobalSearchScope): Collection<PsiClass> {
|
||||||
|
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<String> {
|
||||||
|
return PackagePartClassUtils.getFilesWithCallables(findFilesForPackage(packageFqName, scope)).map {
|
||||||
|
JvmFileClassUtil.getFileClassInfoNoResolve(it).facadeClassFqName.shortName().asString()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user