FIR: Unbound FirJavaElementFinder from Kotlin PSI

This commit is contained in:
Denis Zharkov
2020-02-10 15:14:37 +03:00
parent 9c1577092b
commit 61d02d9ecb
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
@@ -33,7 +32,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
import org.jetbrains.kotlin.resolve.jvm.KotlinFinderMarker import org.jetbrains.kotlin.resolve.jvm.KotlinFinderMarker
@@ -68,8 +66,7 @@ class FirJavaElementFinder(
firProvider.getFirClassifierByFqName(classId) as? FirRegularClass firProvider.getFirClassifierByFqName(classId) as? FirRegularClass
?: return null ?: return null
val ktFile = firClass.psi?.containingFile as? KtFile ?: return null val fileStub = createJavaFileStub(classId.packageFqName, psiManager)
val fileStub = createJavaFileStub(classId.packageFqName, listOf(ktFile))
return buildStub(firClass, fileStub).psi return buildStub(firClass, fileStub).psi
} }
@@ -187,20 +184,16 @@ private fun newTypeParameterList(parent: StubElement<*>, parameters: List<Pair<S
} }
} }
private fun createJavaFileStub(packageFqName: FqName, files: Collection<KtFile>): PsiJavaFileStub { private fun createJavaFileStub(packageFqName: FqName, psiManager: PsiManager): PsiJavaFileStub {
val javaFileStub = PsiJavaFileStubImpl(packageFqName.asString(), /*compiled = */true) val javaFileStub = PsiJavaFileStubImpl(packageFqName.asString(), /*compiled = */true)
javaFileStub.psiFactory = ClsStubPsiFactory.INSTANCE javaFileStub.psiFactory = ClsStubPsiFactory.INSTANCE
val fakeFile = object : ClsFileImpl(files.first().viewProvider) { val fakeFile = object : ClsFileImpl(DummyHolderViewProvider(psiManager)) {
override fun getStub() = javaFileStub override fun getStub() = javaFileStub
override fun getPackageName() = packageFqName.asString() override fun getPackageName() = packageFqName.asString()
override fun isPhysical() = false override fun isPhysical() = false
override fun getText(): String {
return files.singleOrNull()?.text ?: super.getText()
}
} }
javaFileStub.psi = fakeFile javaFileStub.psi = fakeFile