FIR: Pull creation of JavaClassConverter to session factory

This commit is contained in:
Denis.Zharkov
2021-09-14 12:37:00 +03:00
committed by TeamCityServer
parent b6e3399cbd
commit 1fc2f13a35
6 changed files with 35 additions and 19 deletions
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.fir.caches.FirCachesFactory
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.fir.java.JavaClassConverter
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
import org.jetbrains.kotlin.fir.java.deserialization.KotlinDeserializedJvmSymbolsProvider import org.jetbrains.kotlin.fir.java.deserialization.KotlinDeserializedJvmSymbolsProvider
import org.jetbrains.kotlin.fir.resolve.providers.FirDependenciesSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirDependenciesSymbolProvider
@@ -138,7 +139,12 @@ internal object FirIdeSessionFactory {
this, this,
providers = listOf( providers = listOf(
provider.symbolProvider, provider.symbolProvider,
JavaSymbolProvider(this, moduleData, project.createJavaClassFinder(contentScope)), JavaSymbolProvider(
this,
JavaClassConverter(
this, moduleData, project.createJavaClassFinder(contentScope)
)
),
), ),
dependencyProvider dependencyProvider
) )
@@ -176,13 +182,17 @@ internal object FirIdeSessionFactory {
registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) registerCommonJavaComponents(JavaModuleResolver.getInstance(project))
registerJavaSpecificResolveComponents() registerJavaSpecificResolveComponents()
val mainModuleData = KtModuleBasedModuleData(sourceModule).apply { bindSession(this@session) }
val kotlinSymbolProvider = KotlinDeserializedJvmSymbolsProvider( val kotlinSymbolProvider = KotlinDeserializedJvmSymbolsProvider(
this@session, this@session,
moduleDataProvider = createModuleDataProvider(sourceModule, this), moduleDataProvider = createModuleDataProvider(sourceModule, this),
kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped), kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped),
packagePartProvider = project.createPackagePartProviderForLibrary(searchScope), packagePartProvider = project.createPackagePartProviderForLibrary(searchScope),
kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(searchScope), kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(searchScope),
javaClassFinder = project.createJavaClassFinder(searchScope) javaClassConverter = JavaClassConverter(
this@session, mainModuleData, project.createJavaClassFinder(searchScope)
)
) )
val symbolProvider = FirCompositeSymbolProvider(this, listOf(kotlinSymbolProvider, builtinsAndCloneableSession.symbolProvider)) val symbolProvider = FirCompositeSymbolProvider(this, listOf(kotlinSymbolProvider, builtinsAndCloneableSession.symbolProvider))
register(FirProvider::class, FirIdeLibrariesSessionProvider(symbolProvider)) register(FirProvider::class, FirIdeLibrariesSessionProvider(symbolProvider))
@@ -14,12 +14,12 @@ import com.intellij.psi.PsiFile
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.ProjectScope import com.intellij.psi.search.ProjectScope
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.java.FirJavaElementFinder import org.jetbrains.kotlin.fir.java.FirJavaElementFinder
import org.jetbrains.kotlin.fir.java.JavaClassConverter
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
import org.jetbrains.kotlin.load.java.JavaClassFinder
import org.jetbrains.kotlin.load.java.JavaClassFinderImpl
import org.jetbrains.kotlin.load.java.createJavaClassFinder import org.jetbrains.kotlin.load.java.createJavaClassFinder
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
@@ -50,9 +50,6 @@ class PsiBasedProjectEnvironment(
override fun getKotlinClassFinder(fileSearchScope: AbstractProjectFileSearchScope): KotlinClassFinder = override fun getKotlinClassFinder(fileSearchScope: AbstractProjectFileSearchScope): KotlinClassFinder =
VirtualFileFinderFactory.getInstance(project).create(fileSearchScope.asPsiSearchScope()) VirtualFileFinderFactory.getInstance(project).create(fileSearchScope.asPsiSearchScope())
override fun getJavaClassFinder(fileSearchScope: AbstractProjectFileSearchScope): JavaClassFinder =
project.createJavaClassFinder(fileSearchScope.asPsiSearchScope())
override fun getJavaModuleResolver(): JavaModuleResolver = override fun getJavaModuleResolver(): JavaModuleResolver =
JavaModuleResolver.getInstance(project) JavaModuleResolver.getInstance(project)
@@ -93,6 +90,11 @@ class PsiBasedProjectEnvironment(
override fun getSearchScopeForProjectJavaSources(): AbstractProjectFileSearchScope = override fun getSearchScopeForProjectJavaSources(): AbstractProjectFileSearchScope =
PsiBasedProjectFileSearchScope(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(project)) PsiBasedProjectFileSearchScope(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(project))
override fun getJavaClassConverter(
firSession: FirSession,
baseModuleData: FirModuleData,
fileSearchScope: AbstractProjectFileSearchScope
) = JavaClassConverter(firSession, baseModuleData, project.createJavaClassFinder(fileSearchScope.asPsiSearchScope()))
} }
private fun AbstractProjectFileSearchScope.asPsiSearchScope() = private fun AbstractProjectFileSearchScope.asPsiSearchScope() =
@@ -153,7 +153,7 @@ object FirSessionFactory {
kotlinScopeProvider, kotlinScopeProvider,
it.packagePartProvider, it.packagePartProvider,
projectEnvironment.getKotlinClassFinder(it.scope), projectEnvironment.getKotlinClassFinder(it.scope),
projectEnvironment.getJavaClassFinder(it.scope) projectEnvironment.getJavaClassConverter(this, moduleData, it.scope),
) )
} }
@@ -165,7 +165,7 @@ object FirSessionFactory {
listOfNotNull( listOfNotNull(
firProvider.symbolProvider, firProvider.symbolProvider,
symbolProviderForBinariesFromIncrementalCompilation, symbolProviderForBinariesFromIncrementalCompilation,
JavaSymbolProvider(this, moduleData, projectEnvironment.getJavaClassFinder(scope)), JavaSymbolProvider(this, projectEnvironment.getJavaClassConverter(this, moduleData, scope)),
dependenciesSymbolProvider, dependenciesSymbolProvider,
) )
) )
@@ -213,7 +213,7 @@ object FirSessionFactory {
kotlinScopeProvider, kotlinScopeProvider,
packagePartProvider, packagePartProvider,
projectEnvironment.getKotlinClassFinder(scope), projectEnvironment.getKotlinClassFinder(scope),
projectEnvironment.getJavaClassFinder(scope) projectEnvironment.getJavaClassConverter(this, moduleDataProvider.allModuleData.last(), scope)
) )
val builtinsModuleData = createModuleDataForBuiltins( val builtinsModuleData = createModuleDataForBuiltins(
@@ -5,8 +5,9 @@
package org.jetbrains.kotlin.fir.session.environment package org.jetbrains.kotlin.fir.session.environment
import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.load.java.JavaClassFinder import org.jetbrains.kotlin.fir.java.JavaClassConverter
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver
@@ -40,8 +41,6 @@ interface AbstractProjectFileSearchScope {
interface AbstractProjectEnvironment { interface AbstractProjectEnvironment {
fun getKotlinClassFinder(fileSearchScope: AbstractProjectFileSearchScope): KotlinClassFinder fun getKotlinClassFinder(fileSearchScope: AbstractProjectFileSearchScope): KotlinClassFinder
fun getJavaClassFinder(fileSearchScope: AbstractProjectFileSearchScope): JavaClassFinder
fun getJavaModuleResolver(): JavaModuleResolver fun getJavaModuleResolver(): JavaModuleResolver
fun getPackagePartProvider(fileSearchScope: AbstractProjectFileSearchScope): PackagePartProvider fun getPackagePartProvider(fileSearchScope: AbstractProjectFileSearchScope): PackagePartProvider
@@ -53,4 +52,10 @@ interface AbstractProjectEnvironment {
fun getSearchScopeForProjectLibraries(): AbstractProjectFileSearchScope fun getSearchScopeForProjectLibraries(): AbstractProjectFileSearchScope
fun getSearchScopeForProjectJavaSources(): AbstractProjectFileSearchScope fun getSearchScopeForProjectJavaSources(): AbstractProjectFileSearchScope
fun getJavaClassConverter(
firSession: FirSession,
baseModuleData: FirModuleData,
fileSearchScope: AbstractProjectFileSearchScope
): JavaClassConverter
} }
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.java package org.jetbrains.kotlin.fir.java
import com.intellij.openapi.progress.ProcessCanceledException import com.intellij.openapi.progress.ProcessCanceledException
import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.caches.firCachesFactory import org.jetbrains.kotlin.fir.caches.firCachesFactory
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
@@ -15,7 +14,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.load.java.JavaClassFinder
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.name.Name import org.jetbrains.kotlin.name.Name
@@ -24,8 +22,10 @@ import org.jetbrains.kotlin.name.Name
// Use it in application sessions for loading classes from Java files listed on the command line. // Use it in application sessions for loading classes from Java files listed on the command line.
// For library and incremental compilation sessions use `KotlinDeserializedJvmSymbolsProvider` // For library and incremental compilation sessions use `KotlinDeserializedJvmSymbolsProvider`
// in order to load Kotlin classes as well. // in order to load Kotlin classes as well.
class JavaSymbolProvider(session: FirSession, baseModuleData: FirModuleData, facade: JavaClassFinder) : FirSymbolProvider(session) { class JavaSymbolProvider(
private val javaClassConverter = JavaClassConverter(session, baseModuleData, facade) session: FirSession,
private val javaClassConverter: JavaClassConverter,
) : FirSymbolProvider(session) {
private val classCache = private val classCache =
session.firCachesFactory.createCacheWithPostCompute( session.firCachesFactory.createCacheWithPostCompute(
@@ -38,9 +38,8 @@ class KotlinDeserializedJvmSymbolsProvider(
kotlinScopeProvider: FirKotlinScopeProvider, kotlinScopeProvider: FirKotlinScopeProvider,
private val packagePartProvider: PackagePartProvider, private val packagePartProvider: PackagePartProvider,
private val kotlinClassFinder: KotlinClassFinder, private val kotlinClassFinder: KotlinClassFinder,
javaClassFinder: JavaClassFinder private val javaClassConverter: JavaClassConverter,
) : AbstractFirDeserializedSymbolsProvider(session, moduleDataProvider, kotlinScopeProvider) { ) : AbstractFirDeserializedSymbolsProvider(session, moduleDataProvider, kotlinScopeProvider) {
private val javaClassConverter = JavaClassConverter(session, moduleDataProvider.allModuleData.last(), javaClassFinder)
private val annotationsLoader = AnnotationsLoader(session, kotlinClassFinder) private val annotationsLoader = AnnotationsLoader(session, kotlinClassFinder)
override fun computePackagePartsInfos(packageFqName: FqName): List<PackagePartsCacheData> { override fun computePackagePartsInfos(packageFqName: FqName): List<PackagePartsCacheData> {