diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirSymbolProvider.kt index 046d97ce8e9..cf54f210bb4 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirSymbolProvider.kt @@ -55,6 +55,8 @@ abstract class FirSymbolProvider : FirSessionComponent { open fun getNestedClassesNamesInClass(classId: ClassId): Set = emptySet() abstract fun getPackage(fqName: FqName): FqName? // TODO: Replace to symbol sometime + + open fun getAllCallableNamesInPackage(): Set = emptySet() } fun FirSession.getNestedClassifierScope(lookupTag: ConeClassLikeLookupTag): FirScope? = diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCompositeSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCompositeSymbolProvider.kt index 83a20a3068b..4f8ec9d8719 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCompositeSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCompositeSymbolProvider.kt @@ -46,4 +46,8 @@ class FirCompositeSymbolProvider(val providers: List) : FirSy override fun getNestedClassesNamesInClass(classId: ClassId): Set { return providers.flatMapTo(mutableSetOf()) { it.getNestedClassesNamesInClass(classId) } } + + override fun getAllCallableNamesInPackage(): Set { + return providers.flatMapTo(mutableSetOf()) { it.getAllCallableNamesInPackage() } + } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt index 4293ab9178e..aec1bb094de 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt @@ -76,6 +76,12 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: KotlinSc klass.accept(FirRecorder, state to owner.file) } + override fun getAllCallableNamesInPackage(): Set { + return state.callableMap.keys.asSequence() + .filter { it.className == null } + .mapTo(mutableSetOf()) { it.callableName } + } + private val FirAnnotatedDeclaration.file: FirFile get() = when (this) { is FirFile -> this diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirLocalScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirLocalScope.kt index 6a10fa07d08..90cb94c1469 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirLocalScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirLocalScope.kt @@ -71,5 +71,5 @@ class FirLocalScope private constructor( override fun mayContainName(name: Name) = properties.containsKey(name) || functions[name].isNotEmpty() || classes.containsKey(name) - override fun getCallableNames(): Set = properties.keys + functions.keys + classes.keys + override fun getCallableNames(): Set = properties.keys + functions.keys } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirPackageMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirPackageMemberScope.kt index 950398edda3..90c18aa0a47 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirPackageMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirPackageMemberScope.kt @@ -56,4 +56,8 @@ class FirPackageMemberScope(val fqName: FqName, val session: FirSession) : FirSc } } } + + override fun getCallableNames(): Set { + return symbolProvider.getAllCallableNamesInPackage() + } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStaticScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStaticScope.kt index f6f3b2d3ded..2680407d6ff 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStaticScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStaticScope.kt @@ -35,4 +35,8 @@ class FirStaticScope(private val delegateScope: FirScope) : FirScope() { } } } + + override fun getCallableNames(): Set { + return delegateScope.getCallableNames() + } } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeProvider.kt index eaa26510018..5ca9d3c5f74 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeProvider.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeProvider.kt @@ -166,6 +166,11 @@ internal class FirIdeProvider( // TODO: check that this implementation is correct cacheProvider.recordGeneratedMember(owner, klass) } + + // TODO this should be reworked because [FirIdeProvider] should not have such method + override fun getAllCallableNamesInPackage(): Set { + return cacheProvider.getAllCallableNamesInPackage() + } } internal val FirSession.firIdeProvider: FirIdeProvider by FirSession.sessionComponentAccessor() \ No newline at end of file