[LL] Unify stub-based built-ins fir symbol provider with the rest
This commit is contained in:
committed by
teamcity
parent
9b82ff7a8d
commit
c94c5a7d58
+2
-32
@@ -15,7 +15,7 @@ import com.intellij.psi.util.CachedValuesManager
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirBuiltinsAndCloneableSessionProvider
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirBuiltinsAndCloneableSession
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.stubBased.deserialization.StubBasedFirDeserializedSymbolProvider
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.stubBased.deserialization.createStubBasedFirSymbolProviderForBuiltins
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtBuiltinsModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
|
||||
@@ -98,28 +98,7 @@ class LLFirBuiltinsSessionFactory(private val project: Project) {
|
||||
register(FirKotlinScopeProvider::class, kotlinScopeProvider)
|
||||
|
||||
val symbolProvider = createCompositeSymbolProvider(this) {
|
||||
val moduleDataProvider = SingleModuleDataProvider(moduleData)
|
||||
add(
|
||||
object : StubBasedFirDeserializedSymbolProvider(
|
||||
session,
|
||||
moduleDataProvider,
|
||||
kotlinScopeProvider,
|
||||
project,
|
||||
BuiltinsGlobalSearchScope(project),
|
||||
FirDeclarationOrigin.BuiltIns
|
||||
) {
|
||||
private val syntheticFunctionInterfaceProvider = FirBuiltinSyntheticFunctionInterfaceProvider(
|
||||
session,
|
||||
moduleData,
|
||||
kotlinScopeProvider
|
||||
)
|
||||
|
||||
override fun getClassLikeSymbolByClassId(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||
return super.getClassLikeSymbolByClassId(classId)
|
||||
?: syntheticFunctionInterfaceProvider.getClassLikeSymbolByClassId(classId)
|
||||
}
|
||||
}
|
||||
)
|
||||
add(createStubBasedFirSymbolProviderForBuiltins(project, session, moduleData, kotlinScopeProvider))
|
||||
add(FirExtensionSyntheticFunctionInterfaceProvider(session, moduleData, kotlinScopeProvider))
|
||||
add(FirCloneableSymbolProvider(session, moduleData, kotlinScopeProvider))
|
||||
}
|
||||
@@ -136,15 +115,6 @@ class LLFirBuiltinsSessionFactory(private val project: Project) {
|
||||
}
|
||||
}
|
||||
|
||||
internal class BuiltinsGlobalSearchScope(project: Project) : DelegatingGlobalSearchScope(project, allScope(project)) {
|
||||
override fun contains(file: VirtualFile): Boolean {
|
||||
if (file.extension != BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION) {
|
||||
return false
|
||||
}
|
||||
return super.contains(file)
|
||||
}
|
||||
}
|
||||
|
||||
private fun TargetPlatform.getAnalyzerServices() = when {
|
||||
isJvm() -> JvmPlatformAnalyzerServices
|
||||
isJs() -> JvmPlatformAnalyzerServices/*TODO*/
|
||||
|
||||
+38
@@ -11,12 +11,17 @@ import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analysis.decompiler.psi.KotlinBuiltInFileType
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSyntheticFunctionInterfaceProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||
import org.jetbrains.kotlin.library.KLIB_METADATA_FILE_EXTENSION
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
|
||||
|
||||
internal fun createStubBasedFirSymbolProviderForClassFiles(
|
||||
project: Project,
|
||||
@@ -51,6 +56,39 @@ internal fun createStubBasedFirSymbolProviderForKotlinNativeMetadataFiles(
|
||||
fileFilter = { file -> file.extension == KLIB_METADATA_FILE_EXTENSION },
|
||||
)
|
||||
|
||||
internal fun createStubBasedFirSymbolProviderForBuiltins(
|
||||
project: Project,
|
||||
session: FirSession,
|
||||
moduleData: LLFirModuleData,
|
||||
kotlinScopeProvider: FirKotlinScopeProvider,
|
||||
): StubBasedFirDeserializedSymbolProvider {
|
||||
return createFirSymbolProviderForScopeLimitedByFiles(
|
||||
project, DelegatingGlobalSearchScope.allScope(project),
|
||||
fileFilter = { file -> file.extension == BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION },
|
||||
symbolProviderFactory = { reducedScope: GlobalSearchScope ->
|
||||
object : StubBasedFirDeserializedSymbolProvider(
|
||||
session,
|
||||
SingleModuleDataProvider(moduleData),
|
||||
kotlinScopeProvider,
|
||||
project,
|
||||
reducedScope,
|
||||
FirDeclarationOrigin.BuiltIns
|
||||
) {
|
||||
private val syntheticFunctionInterfaceProvider = FirBuiltinSyntheticFunctionInterfaceProvider(
|
||||
session,
|
||||
moduleData,
|
||||
kotlinScopeProvider
|
||||
)
|
||||
|
||||
override fun getClassLikeSymbolByClassId(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||
return super.getClassLikeSymbolByClassId(classId)
|
||||
?: syntheticFunctionInterfaceProvider.getClassLikeSymbolByClassId(classId)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
internal fun createStubBasedFirSymbolProviderForScopeLimitedByFiles(
|
||||
project: Project,
|
||||
baseScope: GlobalSearchScope,
|
||||
|
||||
Reference in New Issue
Block a user