[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");
|
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
|
@Test
|
||||||
@TestMetadata("listOf.kt")
|
@TestMetadata("listOf.kt")
|
||||||
public void testListOf() throws Exception {
|
public void testListOf() throws Exception {
|
||||||
|
|||||||
+6
@@ -76,6 +76,12 @@ public class FirIdeNormalAnalysisSourceModuleSymbolByFqNameTestGenerated extends
|
|||||||
runTest("analysis/analysis-api/testData/symbols/symbolByFqName/iterator.kt");
|
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
|
@Test
|
||||||
@TestMetadata("listOf.kt")
|
@TestMetadata("listOf.kt")
|
||||||
public void testListOf() throws Exception {
|
public void testListOf() throws Exception {
|
||||||
|
|||||||
+6
@@ -76,6 +76,12 @@ public class FirStandaloneNormalAnalysisSourceModuleSymbolByFqNameTestGenerated
|
|||||||
runTest("analysis/analysis-api/testData/symbols/symbolByFqName/iterator.kt");
|
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
|
@Test
|
||||||
@TestMetadata("listOf.kt")
|
@TestMetadata("listOf.kt")
|
||||||
public void testListOf() throws Exception {
|
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.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
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.LLFirJavaFacadeForBinaries
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule
|
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
|
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory
|
||||||
|
|
||||||
internal object LLFirLibraryProviderFactory {
|
internal object LLFirLibraryProviderFactory {
|
||||||
fun createLibraryProvidersForSingleBinaryModule(
|
fun createLibraryProvidersForScope(
|
||||||
session: LLFirSession,
|
session: LLFirSession,
|
||||||
moduleData: LLFirModuleData,
|
moduleData: LLFirModuleData,
|
||||||
module: KtBinaryModule,
|
|
||||||
kotlinScopeProvider: FirKotlinScopeProvider,
|
kotlinScopeProvider: FirKotlinScopeProvider,
|
||||||
project: Project,
|
project: Project,
|
||||||
builtinTypes: BuiltinTypes,
|
builtinTypes: BuiltinTypes,
|
||||||
): List<FirSymbolProvider> {
|
scope: GlobalSearchScope,
|
||||||
|
builtinSymbolProvider: FirSymbolProvider,
|
||||||
|
): LLFirModuleWithDependenciesSymbolProvider {
|
||||||
val moduleDataProvider = SingleModuleDataProvider(moduleData)
|
val moduleDataProvider = SingleModuleDataProvider(moduleData)
|
||||||
val scope = module.contentScope
|
|
||||||
val packagePartProvider = project.createPackagePartProvider(scope)
|
val packagePartProvider = project.createPackagePartProvider(scope)
|
||||||
return buildList {
|
return LLFirModuleWithDependenciesSymbolProvider(
|
||||||
add(
|
session,
|
||||||
|
LLFirDependentModuleProvidersByProviders(session, listOf(builtinSymbolProvider)),
|
||||||
|
providers = listOf(
|
||||||
JvmClassFileBasedSymbolProvider(
|
JvmClassFileBasedSymbolProvider(
|
||||||
session,
|
session,
|
||||||
moduleDataProvider,
|
moduleDataProvider,
|
||||||
@@ -41,10 +45,10 @@ internal object LLFirLibraryProviderFactory {
|
|||||||
packagePartProvider,
|
packagePartProvider,
|
||||||
VirtualFileFinderFactory.getInstance(project).create(scope),
|
VirtualFileFinderFactory.getInstance(project).create(scope),
|
||||||
LLFirJavaFacadeForBinaries(session, builtinTypes, project.createJavaClassFinder(scope), moduleDataProvider)
|
LLFirJavaFacadeForBinaries(session, builtinTypes, project.createJavaClassFinder(scope), moduleDataProvider)
|
||||||
)
|
),
|
||||||
)
|
OptionalAnnotationClassesProvider(session, moduleDataProvider, kotlinScopeProvider, packagePartProvider),
|
||||||
add(OptionalAnnotationClassesProvider(session, moduleDataProvider, kotlinScopeProvider, packagePartProvider))
|
),
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createLibraryProvidersForAllProjectLibraries(
|
fun createLibraryProvidersForAllProjectLibraries(
|
||||||
|
|||||||
+4
-8
@@ -59,20 +59,16 @@ class LLFirLibrarySessionFactory(
|
|||||||
val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped)
|
val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped)
|
||||||
register(FirKotlinScopeProvider::class, kotlinScopeProvider)
|
register(FirKotlinScopeProvider::class, kotlinScopeProvider)
|
||||||
|
|
||||||
val providers = LLFirLibraryProviderFactory.createLibraryProvidersForSingleBinaryModule(
|
val symbolProvider = LLFirLibraryProviderFactory.createLibraryProvidersForScope(
|
||||||
this,
|
this,
|
||||||
moduleData,
|
moduleData,
|
||||||
ktLibraryModule,
|
|
||||||
kotlinScopeProvider,
|
kotlinScopeProvider,
|
||||||
project,
|
project,
|
||||||
builtinTypes
|
builtinTypes,
|
||||||
|
ktLibraryModule.contentScope,
|
||||||
|
builtinsSession.symbolProvider
|
||||||
)
|
)
|
||||||
|
|
||||||
val symbolProvider = createCompositeSymbolProvider(this) {
|
|
||||||
addAll(providers)
|
|
||||||
add(builtinsSession.symbolProvider)
|
|
||||||
}
|
|
||||||
|
|
||||||
register(LLFirFirClassByPsiClassProvider::class, LLFirFirClassByPsiClassProvider(this))
|
register(LLFirFirClassByPsiClassProvider::class, LLFirFirClassByPsiClassProvider(this))
|
||||||
register(FirProvider::class, LLFirLibrarySessionProvider(symbolProvider))
|
register(FirProvider::class, LLFirLibrarySessionProvider(symbolProvider))
|
||||||
register(FirSymbolProvider::class, symbolProvider)
|
register(FirSymbolProvider::class, symbolProvider)
|
||||||
|
|||||||
Reference in New Issue
Block a user