Fix stdlib annotation enum deserialization issue From IntelliJ, when we access to an enum entry of a Kotlin stdlib annotation from other libraries, `StubBasedAnnotationDeserializer` generates `FirFromMissingDependenciesNamedReference`, which causes a type resolution issue for FIR2IR. This issue was fixed by a workaround commit 7db2fc522e9e333e69b92e46881214a040ac80c3 only for the stand-alone compiler. This commit uses `FirBuiltinSymbolProvider` for `LLStubBasedLibrarySymbolProviderFactory` to fix this issue for IDEA as well. ^KT-61757
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/LLStubBasedLibrarySymbolProviderFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/LLStubBasedLibrarySymbolProviderFactory.kt index 051733c..0a65870 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/LLStubBasedLibrarySymbolProviderFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/LLStubBasedLibrarySymbolProviderFactory.kt
@@ -7,25 +7,17 @@ import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInsVirtualFileProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirInternals import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirLibrarySymbolProviderFactory import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirModuleData import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirJavaSymbolProvider -import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirKotlinSymbolNamesProvider 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.java.FirJavaFacade -import org.jetbrains.kotlin.fir.resolve.providers.FirCompositeCachedSymbolNamesProvider -import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolNamesProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider -import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSyntheticFunctionInterfaceProvider +import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSymbolProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider -import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.load.kotlin.PackagePartProvider -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.psi.KtFile @LLFirInternals class LLStubBasedLibrarySymbolProviderFactory(private val project: Project) : LLFirLibrarySymbolProviderFactory() { @@ -123,50 +115,7 @@ kotlinScopeProvider: FirKotlinScopeProvider ): List<FirSymbolProvider> { return listOf( - StubBasedBuiltInsSymbolProvider(project, session, moduleData, kotlinScopeProvider) + FirBuiltinSymbolProvider(session, moduleData, kotlinScopeProvider) ) } -} - -private class StubBasedBuiltInsSymbolProvider( - project: Project, - session: FirSession, - moduleData: LLFirModuleData, - kotlinScopeProvider: FirKotlinScopeProvider, -) : StubBasedFirDeserializedSymbolProvider( - session, - SingleModuleDataProvider(moduleData), - kotlinScopeProvider, - project, - createBuiltInsScope(project), - isFallbackDependenciesProvider = false, -) { - private val syntheticFunctionInterfaceProvider = FirBuiltinSyntheticFunctionInterfaceProvider( - session, - moduleData, - kotlinScopeProvider - ) - - override val symbolNamesProvider: FirSymbolNamesProvider = FirCompositeCachedSymbolNamesProvider( - session, - listOf( - LLFirKotlinSymbolNamesProvider(declarationProvider, allowKotlinPackage), - syntheticFunctionInterfaceProvider.symbolNamesProvider, - ), - ) - - override fun getClassLikeSymbolByClassId(classId: ClassId): FirClassLikeSymbol<*>? { - return super.getClassLikeSymbolByClassId(classId) - ?: syntheticFunctionInterfaceProvider.getClassLikeSymbolByClassId(classId) - } - - override fun getDeclarationOriginFor(file: KtFile): FirDeclarationOrigin { - // this provider operates only on builtins files, no need to check anything - return FirDeclarationOrigin.BuiltIns - } -} - -private fun createBuiltInsScope(project: Project): GlobalSearchScope { - val builtInFiles = BuiltInsVirtualFileProvider.getInstance().getBuiltInVirtualFiles() - return GlobalSearchScope.filesScope(project, builtInFiles) } \ No newline at end of file