[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"
}
@@ -413,14 +413,6 @@ class JavaSymbolProvider(
}
}
@TestOnly
fun getJavaTopLevelClasses(): List<FirRegularClass> {
return classCache.values
.filterIsInstance<FirRegularClassSymbol>()
.filter { it.classId.relativeClassName.parent().isRoot }
.map { it.fir }
}
private val knownClassNamesInPackage = mutableMapOf<FqName, Set<String>?>()
private fun hasTopLevelClassOf(classId: ClassId): Boolean {
@@ -19,11 +19,8 @@ import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
import org.jetbrains.kotlin.fir.extensions.extensionService
import org.jetbrains.kotlin.fir.extensions.registerExtensions
import org.jetbrains.kotlin.fir.java.*
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCompositeSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor
import org.jetbrains.kotlin.fir.resolve.transformers.createAllTransformerBasedResolveProcessors
@@ -140,22 +137,27 @@ abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
KotlinTestUtils.assertEqualsToFile(File(expectedPath), firFileDump)
}
val processedJavaClasses = mutableSetOf<FirJavaClass>()
val javaFirDump = StringBuilder().also { builder ->
val renderer = FirRenderer(builder)
for (session in sessions) {
val symbolProvider = session.firSymbolProvider as FirCompositeSymbolProvider
val javaProvider = symbolProvider.providers.filterIsInstance<JavaSymbolProvider>().first()
for (javaClass in javaProvider.getJavaTopLevelClasses().sortedBy { it.name }) {
if (javaClass !is FirJavaClass || javaClass in processedJavaClasses) continue
renderJavaClass(renderer, javaClass, session)
processedJavaClasses += javaClass
}
}
}.toString()
if (javaFirDump.isNotEmpty()) {
KotlinTestUtils.assertEqualsToFile(File("$dirPath/extraDump.java.txt"), javaFirDump)
}
/*
* This code is commented due to deleted JavaSymbolProvider.getJavaTopLevelClasses() method
* There is no replace for this code because of there are no tests for this test runner, so
* it is questionable, do we need java class check (or that test runner at all)
*/
// val processedJavaClasses = mutableSetOf<FirJavaClass>()
// val javaFirDump = StringBuilder().also { builder ->
// val renderer = FirRenderer(builder)
// for (session in sessions) {
// val symbolProvider = session.firSymbolProvider as FirCompositeSymbolProvider
// val javaProvider = symbolProvider.providers.filterIsInstance<JavaSymbolProvider>().first()
// for (javaClass in javaProvider.getJavaTopLevelClasses().sortedBy { it.name }) {
// if (javaClass !is FirJavaClass || javaClass in processedJavaClasses) continue
// renderJavaClass(renderer, javaClass, session)
// processedJavaClasses += javaClass
// }
// }
// }.toString()
// if (javaFirDump.isNotEmpty()) {
// KotlinTestUtils.assertEqualsToFile(File("$dirPath/extraDump.java.txt"), javaFirDump)
// }
}
}