[FIR] Add FirJavaElementFinder to session's components

This change allows us to use `IrInterpreter` to evaluate Kotlin's
const properties that were called from Java world

#KT-57802
This commit is contained in:
Ivan Kylchik
2023-04-24 17:06:51 +02:00
committed by Space Team
parent fbe00b1b91
commit 2af73c2b13
2 changed files with 10 additions and 2 deletions
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.KtVirtualFileSourceFile
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.SessionConfiguration
import org.jetbrains.kotlin.fir.java.FirJavaElementFinder
import org.jetbrains.kotlin.fir.java.FirJavaFacadeForSource
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
@@ -62,12 +63,16 @@ open class VfsBasedProjectEnvironment(
override fun getPackagePartProvider(fileSearchScope: AbstractProjectFileSearchScope): PackagePartProvider =
getPackagePartProviderFn(fileSearchScope.asPsiSearchScope())
@OptIn(SessionConfiguration::class)
override fun registerAsJavaElementFinder(firSession: FirSession) {
val psiFinderExtensionPoint = PsiElementFinder.EP.getPoint(project)
if (psiFinderExtensionPoint.extensionList.any { it is JavaElementFinder }) {
psiFinderExtensionPoint.unregisterExtension(JavaElementFinder::class.java)
}
psiFinderExtensionPoint.registerExtension(FirJavaElementFinder(firSession, project), project)
val firJavaElementFinder = FirJavaElementFinder(firSession, project)
firSession.register(FirJavaElementFinder::class, firJavaElementFinder)
psiFinderExtensionPoint.registerExtension(firJavaElementFinder, project)
}
private fun List<VirtualFile>.toSearchScope(allowOutOfProjectRoots: Boolean) =