diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirIdeSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirIdeSessionFactory.kt index 8f55f2e1f74..bb519210aaf 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirIdeSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/FirIdeSessionFactory.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.fir.caches.FirCachesFactory import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider 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.deserialization.KotlinDeserializedJvmSymbolsProvider import org.jetbrains.kotlin.fir.resolve.providers.FirDependenciesSymbolProvider @@ -138,7 +139,12 @@ internal object FirIdeSessionFactory { this, providers = listOf( provider.symbolProvider, - JavaSymbolProvider(this, moduleData, project.createJavaClassFinder(contentScope)), + JavaSymbolProvider( + this, + JavaClassConverter( + this, moduleData, project.createJavaClassFinder(contentScope) + ) + ), ), dependencyProvider ) @@ -176,13 +182,17 @@ internal object FirIdeSessionFactory { registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) registerJavaSpecificResolveComponents() + val mainModuleData = KtModuleBasedModuleData(sourceModule).apply { bindSession(this@session) } + val kotlinSymbolProvider = KotlinDeserializedJvmSymbolsProvider( this@session, moduleDataProvider = createModuleDataProvider(sourceModule, this), kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped), packagePartProvider = project.createPackagePartProviderForLibrary(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)) register(FirProvider::class, FirIdeLibrariesSessionProvider(symbolProvider)) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/PsiBasedProjectEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/PsiBasedProjectEnvironment.kt index 35a2d4daeb4..894c424b550 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/PsiBasedProjectEnvironment.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/PsiBasedProjectEnvironment.kt @@ -14,12 +14,12 @@ import com.intellij.psi.PsiFile import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.ProjectScope import org.jetbrains.kotlin.asJava.finder.JavaElementFinder +import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSession 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.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.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.kotlin.PackagePartProvider @@ -50,9 +50,6 @@ class PsiBasedProjectEnvironment( override fun getKotlinClassFinder(fileSearchScope: AbstractProjectFileSearchScope): KotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(fileSearchScope.asPsiSearchScope()) - override fun getJavaClassFinder(fileSearchScope: AbstractProjectFileSearchScope): JavaClassFinder = - project.createJavaClassFinder(fileSearchScope.asPsiSearchScope()) - override fun getJavaModuleResolver(): JavaModuleResolver = JavaModuleResolver.getInstance(project) @@ -93,6 +90,11 @@ class PsiBasedProjectEnvironment( override fun getSearchScopeForProjectJavaSources(): AbstractProjectFileSearchScope = PsiBasedProjectFileSearchScope(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(project)) + override fun getJavaClassConverter( + firSession: FirSession, + baseModuleData: FirModuleData, + fileSearchScope: AbstractProjectFileSearchScope + ) = JavaClassConverter(firSession, baseModuleData, project.createJavaClassFinder(fileSearchScope.asPsiSearchScope())) } private fun AbstractProjectFileSearchScope.asPsiSearchScope() = diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt index 6bce9e18575..582d962c9f2 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt @@ -153,7 +153,7 @@ object FirSessionFactory { kotlinScopeProvider, it.packagePartProvider, projectEnvironment.getKotlinClassFinder(it.scope), - projectEnvironment.getJavaClassFinder(it.scope) + projectEnvironment.getJavaClassConverter(this, moduleData, it.scope), ) } @@ -165,7 +165,7 @@ object FirSessionFactory { listOfNotNull( firProvider.symbolProvider, symbolProviderForBinariesFromIncrementalCompilation, - JavaSymbolProvider(this, moduleData, projectEnvironment.getJavaClassFinder(scope)), + JavaSymbolProvider(this, projectEnvironment.getJavaClassConverter(this, moduleData, scope)), dependenciesSymbolProvider, ) ) @@ -213,7 +213,7 @@ object FirSessionFactory { kotlinScopeProvider, packagePartProvider, projectEnvironment.getKotlinClassFinder(scope), - projectEnvironment.getJavaClassFinder(scope) + projectEnvironment.getJavaClassConverter(this, moduleDataProvider.allModuleData.last(), scope) ) val builtinsModuleData = createModuleDataForBuiltins( diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt index 4efc0e50933..908eb41fa45 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt @@ -5,8 +5,9 @@ package org.jetbrains.kotlin.fir.session.environment +import org.jetbrains.kotlin.fir.FirModuleData 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.PackagePartProvider import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver @@ -40,8 +41,6 @@ interface AbstractProjectFileSearchScope { interface AbstractProjectEnvironment { fun getKotlinClassFinder(fileSearchScope: AbstractProjectFileSearchScope): KotlinClassFinder - fun getJavaClassFinder(fileSearchScope: AbstractProjectFileSearchScope): JavaClassFinder - fun getJavaModuleResolver(): JavaModuleResolver fun getPackagePartProvider(fileSearchScope: AbstractProjectFileSearchScope): PackagePartProvider @@ -53,4 +52,10 @@ interface AbstractProjectEnvironment { fun getSearchScopeForProjectLibraries(): AbstractProjectFileSearchScope fun getSearchScopeForProjectJavaSources(): AbstractProjectFileSearchScope + + fun getJavaClassConverter( + firSession: FirSession, + baseModuleData: FirModuleData, + fileSearchScope: AbstractProjectFileSearchScope + ): JavaClassConverter } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index b4ac10fa5b7..5efebdbc57a 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.fir.java import com.intellij.openapi.progress.ProcessCanceledException -import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.caches.firCachesFactory 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.FirPropertySymbol 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.FqName 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. // For library and incremental compilation sessions use `KotlinDeserializedJvmSymbolsProvider` // in order to load Kotlin classes as well. -class JavaSymbolProvider(session: FirSession, baseModuleData: FirModuleData, facade: JavaClassFinder) : FirSymbolProvider(session) { - private val javaClassConverter = JavaClassConverter(session, baseModuleData, facade) +class JavaSymbolProvider( + session: FirSession, + private val javaClassConverter: JavaClassConverter, +) : FirSymbolProvider(session) { private val classCache = session.firCachesFactory.createCacheWithPostCompute( diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt index 80101d3d8dd..f02ccb0ba4c 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt @@ -38,9 +38,8 @@ class KotlinDeserializedJvmSymbolsProvider( kotlinScopeProvider: FirKotlinScopeProvider, private val packagePartProvider: PackagePartProvider, private val kotlinClassFinder: KotlinClassFinder, - javaClassFinder: JavaClassFinder + private val javaClassConverter: JavaClassConverter, ) : AbstractFirDeserializedSymbolsProvider(session, moduleDataProvider, kotlinScopeProvider) { - private val javaClassConverter = JavaClassConverter(session, moduleDataProvider.allModuleData.last(), javaClassFinder) private val annotationsLoader = AnnotationsLoader(session, kotlinClassFinder) override fun computePackagePartsInfos(packageFqName: FqName): List {