[LL FIR] make dependency from library on builtins invisible from outside
^KTIJ-23421 hide explicit builtins to reveal target platform dependencies. Otherwise, `expect` class from builtin of e.g. JDK would be found instead of actual dependency from Kotlin Runtime
This commit is contained in:
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
class: kotlin/reflect/KClass
|
||||
@@ -0,0 +1 @@
|
||||
interface KClass<T : kotlin.Any> : kotlin.reflect.KDeclarationContainer, kotlin.reflect.KAnnotatedElement, kotlin.reflect.KClassifier
|
||||
@@ -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
|
||||
+14
-10
@@ -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<FirSymbolProvider> {
|
||||
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(
|
||||
|
||||
+4
-8
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user