diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java index f4d17670b6d..feb52bc9c76 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java @@ -76,6 +76,12 @@ public class Fe10IdeNormalAnalysisSourceModuleSymbolByFqNameTestGenerated extend runTest("analysis/analysis-api/testData/symbols/symbolByFqName/iterator.kt"); } + @Test + @TestMetadata("kclass.kt") + public void testKclass() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByFqName/kclass.kt"); + } + @Test @TestMetadata("listOf.kt") public void testListOf() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java index d867e5035a2..672404c473b 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java @@ -76,6 +76,12 @@ public class FirIdeNormalAnalysisSourceModuleSymbolByFqNameTestGenerated extends runTest("analysis/analysis-api/testData/symbols/symbolByFqName/iterator.kt"); } + @Test + @TestMetadata("kclass.kt") + public void testKclass() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByFqName/kclass.kt"); + } + @Test @TestMetadata("listOf.kt") public void testListOf() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java index 3c788ba2910..daf14f32675 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByFqNameTestGenerated.java @@ -76,6 +76,12 @@ public class FirStandaloneNormalAnalysisSourceModuleSymbolByFqNameTestGenerated runTest("analysis/analysis-api/testData/symbols/symbolByFqName/iterator.kt"); } + @Test + @TestMetadata("kclass.kt") + public void testKclass() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByFqName/kclass.kt"); + } + @Test @TestMetadata("listOf.kt") public void testListOf() throws Exception { diff --git a/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.descriptors.txt new file mode 100644 index 00000000000..d869ea3af37 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.descriptors.txt @@ -0,0 +1,27 @@ +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: kotlin/reflect/KClass + classKind: INTERFACE + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: false + modality: ABSTRACT + name: KClass + origin: LIBRARY + superTypes: [ + kotlin/reflect/KDeclarationContainer + kotlin/reflect/KAnnotatedElement + kotlin/reflect/KClassifier + ] + symbolKind: TOP_LEVEL + typeParameters: [ + KtTypeParameterSymbol(T) + ] + visibility: Public + getContainingModule: Could not render due to kotlin.NotImplementedError: An operation is not implemented: org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10DescNamedClassOrObjectSymbol + + deprecationStatus: null \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.kt b/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.kt new file mode 100644 index 00000000000..60780e01f33 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.kt @@ -0,0 +1 @@ +class: kotlin/reflect/KClass diff --git a/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.pretty.txt new file mode 100644 index 00000000000..a8919cf7acc --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.pretty.txt @@ -0,0 +1 @@ +interface KClass : kotlin.reflect.KDeclarationContainer, kotlin.reflect.KAnnotatedElement, kotlin.reflect.KClassifier diff --git a/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.txt b/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.txt new file mode 100644 index 00000000000..98e404fc208 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByFqName/kclass.txt @@ -0,0 +1,26 @@ +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: kotlin/reflect/KClass + classKind: INTERFACE + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: false + modality: ABSTRACT + name: KClass + origin: LIBRARY + superTypes: [ + kotlin/reflect/KDeclarationContainer + kotlin/reflect/KAnnotatedElement + kotlin/reflect/KClassifier + ] + symbolKind: TOP_LEVEL + typeParameters: [ + KtTypeParameterSymbol(T) + ] + visibility: Public + getContainingModule: KtLibraryModule "Library kotlin-stdlib" + deprecationStatus: null diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibraryProviderFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibraryProviderFactory.kt index 418da79b5f2..7ecf956627f 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibraryProviderFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibraryProviderFactory.kt @@ -7,6 +7,8 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirDependentModuleProvidersByProviders +import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirModuleWithDependenciesSymbolProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirJavaFacadeForBinaries import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule @@ -21,19 +23,21 @@ import org.jetbrains.kotlin.load.java.createJavaClassFinder import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory internal object LLFirLibraryProviderFactory { - fun createLibraryProvidersForSingleBinaryModule( + fun createLibraryProvidersForScope( session: LLFirSession, moduleData: LLFirModuleData, - module: KtBinaryModule, kotlinScopeProvider: FirKotlinScopeProvider, project: Project, builtinTypes: BuiltinTypes, - ): List { + scope: GlobalSearchScope, + builtinSymbolProvider: FirSymbolProvider, + ): LLFirModuleWithDependenciesSymbolProvider { val moduleDataProvider = SingleModuleDataProvider(moduleData) - val scope = module.contentScope val packagePartProvider = project.createPackagePartProvider(scope) - return buildList { - add( + return LLFirModuleWithDependenciesSymbolProvider( + session, + LLFirDependentModuleProvidersByProviders(session, listOf(builtinSymbolProvider)), + providers = listOf( JvmClassFileBasedSymbolProvider( session, moduleDataProvider, @@ -41,10 +45,10 @@ internal object LLFirLibraryProviderFactory { packagePartProvider, VirtualFileFinderFactory.getInstance(project).create(scope), LLFirJavaFacadeForBinaries(session, builtinTypes, project.createJavaClassFinder(scope), moduleDataProvider) - ) - ) - add(OptionalAnnotationClassesProvider(session, moduleDataProvider, kotlinScopeProvider, packagePartProvider)) - } + ), + OptionalAnnotationClassesProvider(session, moduleDataProvider, kotlinScopeProvider, packagePartProvider), + ), + ) } fun createLibraryProvidersForAllProjectLibraries( diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibrarySessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibrarySessionFactory.kt index 89de823066c..2c5cc6a37a4 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibrarySessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibrarySessionFactory.kt @@ -59,20 +59,16 @@ class LLFirLibrarySessionFactory( val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped) register(FirKotlinScopeProvider::class, kotlinScopeProvider) - val providers = LLFirLibraryProviderFactory.createLibraryProvidersForSingleBinaryModule( + val symbolProvider = LLFirLibraryProviderFactory.createLibraryProvidersForScope( this, moduleData, - ktLibraryModule, kotlinScopeProvider, project, - builtinTypes + builtinTypes, + ktLibraryModule.contentScope, + builtinsSession.symbolProvider ) - val symbolProvider = createCompositeSymbolProvider(this) { - addAll(providers) - add(builtinsSession.symbolProvider) - } - register(LLFirFirClassByPsiClassProvider::class, LLFirFirClassByPsiClassProvider(this)) register(FirProvider::class, LLFirLibrarySessionProvider(symbolProvider)) register(FirSymbolProvider::class, symbolProvider)