FIR: Support nested light classes
This commit is contained in:
committed by
teamcityserver
parent
8ea97758c0
commit
6f55d23bab
@@ -37,9 +37,7 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.resolveSupertypesInTheAir
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.name.*
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
||||
import org.jetbrains.kotlin.resolve.jvm.KotlinFinderMarker
|
||||
|
||||
@@ -73,13 +71,25 @@ class FirJavaElementFinder(
|
||||
|
||||
override fun findClass(qualifiedName: String, scope: GlobalSearchScope): PsiClass? {
|
||||
if (qualifiedName.endsWith(".")) return null
|
||||
val classId = ClassId.topLevel(FqName(qualifiedName))
|
||||
|
||||
val firClass = firProviders.firstNotNullOfOrNull { it.getFirClassifierByFqName(classId) as? FirRegularClass } ?: return null
|
||||
val fqName = FqName(qualifiedName)
|
||||
|
||||
val fileStub = createJavaFileStub(classId.packageFqName, psiManager)
|
||||
for (topLevelClass in generateSequence(fqName) { it.parentOrNull() }) {
|
||||
if (topLevelClass.isRoot) break
|
||||
val classId = ClassId.topLevel(topLevelClass)
|
||||
|
||||
return buildStub(firClass, fileStub).psi
|
||||
val firClass = firProviders.firstNotNullOfOrNull { it.getFirClassifierByFqName(classId) as? FirRegularClass } ?: continue
|
||||
|
||||
val fileStub = createJavaFileStub(classId.packageFqName, psiManager)
|
||||
val topLevelResult = buildStub(firClass, fileStub).psi
|
||||
val tail = fqName.tail(topLevelClass).pathSegments()
|
||||
|
||||
return tail.fold(topLevelResult) { psiClass, segment ->
|
||||
psiClass.findInnerClassByName(segment.identifier, false) ?: return null
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
private fun buildStub(firClass: FirRegularClass, parent: StubElement<*>): PsiClassStub<*> {
|
||||
|
||||
Reference in New Issue
Block a user