[LL FIR] simplify common library symbol provider

createCommonLibrarySymbolProvider is simplified to avoid module clashes
and extra search

^KTIJ-27159
^KT-58325
This commit is contained in:
Dmitrii Gridin
2023-10-06 14:21:47 +02:00
committed by Space Team
parent 79303ab2db
commit 5ebef0dfd1
2 changed files with 17 additions and 13 deletions
@@ -46,17 +46,15 @@ class LLStubBasedLibrarySymbolProviderFactory(private val project: Project) : LL
moduleDataProvider: SingleModuleDataProvider, moduleDataProvider: SingleModuleDataProvider,
packagePartProvider: PackagePartProvider, packagePartProvider: PackagePartProvider,
scope: GlobalSearchScope, scope: GlobalSearchScope,
): List<FirSymbolProvider> { ): List<FirSymbolProvider> = listOf(
return buildList { createStubBasedFirSymbolProviderForCommonMetadataFiles(
add(createStubBasedFirSymbolProviderForCommonMetadataFiles(project, scope, session, moduleDataProvider, kotlinScopeProvider)) project = project,
add( baseScope = scope,
// klib metadata symbol provider session = session,
createStubBasedFirSymbolProviderForKotlinNativeMetadataFiles( moduleDataProvider = moduleDataProvider,
project, scope, session, moduleDataProvider, kotlinScopeProvider kotlinScopeProvider = kotlinScopeProvider,
) )
) )
}
}
override fun createNativeLibrarySymbolProvider( override fun createNativeLibrarySymbolProvider(
session: FirSession, session: FirSession,
@@ -10,13 +10,13 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.search.DelegatingGlobalSearchScope import com.intellij.psi.search.DelegatingGlobalSearchScope
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.decompiler.psi.KotlinBuiltInFileType
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
import org.jetbrains.kotlin.library.KLIB_METADATA_FILE_EXTENSION import org.jetbrains.kotlin.library.KLIB_METADATA_FILE_EXTENSION
import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragment
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
internal fun createStubBasedFirSymbolProviderForClassFiles( internal fun createStubBasedFirSymbolProviderForClassFiles(
@@ -41,7 +41,13 @@ internal fun createStubBasedFirSymbolProviderForCommonMetadataFiles(
kotlinScopeProvider: FirKotlinScopeProvider, kotlinScopeProvider: FirKotlinScopeProvider,
): FirSymbolProvider = createStubBasedFirSymbolProviderForScopeLimitedByFiles( ): FirSymbolProvider = createStubBasedFirSymbolProviderForScopeLimitedByFiles(
project, baseScope, session, moduleDataProvider, kotlinScopeProvider, project, baseScope, session, moduleDataProvider, kotlinScopeProvider,
fileFilter = { file -> file.fileType == KotlinBuiltInFileType }, fileFilter = { file ->
val extension = file.extension
extension == BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION ||
extension == MetadataPackageFragment.METADATA_FILE_EXTENSION ||
// klib metadata symbol provider
extension == KLIB_METADATA_FILE_EXTENSION
},
) )
internal fun createStubBasedFirSymbolProviderForKotlinNativeMetadataFiles( internal fun createStubBasedFirSymbolProviderForKotlinNativeMetadataFiles(