implement KtFile.getClasses() in plugin (required to have coverage work, among other things)

This commit is contained in:
Dmitry Jemerov
2015-11-09 17:29:04 +01:00
parent 607f32615f
commit 1bc4420734
5 changed files with 92 additions and 1 deletions
@@ -309,7 +309,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
return getClassRelativeName(parent).child(name)
}
private fun createLightClassForDecompiledKotlinFile(file: KtFile): KtLightClassForDecompiledDeclaration? {
fun createLightClassForDecompiledKotlinFile(file: KtFile): KtLightClassForDecompiledDeclaration? {
val virtualFile = file.virtualFile ?: return null
val classOrObject = file.declarations.filterIsInstance<KtClassOrObject>().singleOrNull()
@@ -351,3 +351,21 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
private val LOG = Logger.getInstance(IDELightClassGenerationSupport::class.java)
}
}
class KtFileClassProviderImpl(val lightClassGenerationSupport: LightClassGenerationSupport) : KtFileClassProvider {
override fun getFileClasses(file: KtFile): Array<PsiClass> {
if (file.isCompiled) {
return arrayOf()
}
val result = arrayListOf<PsiClass>()
file.declarations.filterIsInstance<KtClassOrObject>().map { lightClassGenerationSupport.getPsiClass(it) }.filterNotNullTo(result)
val moduleInfo = file.getModuleInfo()
val fileClassFqName = file.javaFileFacadeFqName
lightClassGenerationSupport.getFacadeClasses(fileClassFqName, moduleInfo.contentScope()).filterTo(result) {
it is KtLightClassForFacade && file in it.files
}
return result.toTypedArray()
}
}