[FIR] Get rid of JavaSymbolProvider.getJavaTopLevelClasses

This commit is contained in:
Dmitriy Novozhilov
2020-08-13 14:25:45 +03:00
parent d7cfb2fb13
commit 4b6193159c
3 changed files with 35 additions and 34 deletions
@@ -146,16 +146,14 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() {
val symbolProvider = session.firSymbolProvider as FirCompositeSymbolProvider
val javaProvider = symbolProvider.providers.filterIsInstance<JavaSymbolProvider>().first()
val topLevelJavaClasses = topPsiClasses.map { it.classId(FqName.ROOT) }
fun processClassWithChildren(psiClass: PsiClass, parentFqName: FqName) {
val psiFile = psiClass.containingFile
val packageStatement = psiFile.children.filterIsInstance<PsiPackageStatement>().firstOrNull()
val packageName = packageStatement?.packageName
val fqName = parentFqName.child(Name.identifier(psiClass.name!!))
val classId = ClassId(packageName?.let { FqName(it) } ?: FqName.ROOT, fqName, false)
val classId = psiClass.classId(parentFqName)
javaProvider.getClassLikeSymbolByFqName(classId)
?: throw AssertionError(classId.asString())
psiClass.innerClasses.forEach {
processClassWithChildren(psiClass = it, parentFqName = fqName)
processClassWithChildren(psiClass = it, parentFqName = classId.relativeClassName)
}
}
for (psiClass in topPsiClasses) {
@@ -163,7 +161,8 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() {
}
val processedJavaClasses = mutableSetOf<FirJavaClass>()
for (javaClass in javaProvider.getJavaTopLevelClasses().sortedBy { it.name }) {
for (javaClassId in topLevelJavaClasses.sortedBy { it.shortClassName }) {
val javaClass = javaProvider.getClassLikeSymbolByFqName(javaClassId)?.fir ?: continue
if (javaClass !is FirJavaClass || javaClass in processedJavaClasses) continue
renderJavaClass(renderer, javaClass, session)
processedJavaClasses += javaClass
@@ -174,6 +173,14 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() {
KotlinTestUtils.assertEqualsToFile(expectedFile, javaFirDump)
}
private fun PsiClass.classId(parentFqName: FqName): ClassId {
val psiFile = this.containingFile
val packageStatement = psiFile.children.filterIsInstance<PsiPackageStatement>().firstOrNull()
val packageName = packageStatement?.packageName
val fqName = parentFqName.child(Name.identifier(this.name!!))
return ClassId(packageName?.let { FqName(it) } ?: FqName.ROOT, fqName, false)
}
companion object {
private const val FOREIGN_ANNOTATIONS_SOURCES_PATH = "third-party/annotations"
}