[FIR] Get rid of FirSymbolProvider.getClassNamesInPackage

There was one non-removable usage of those function in FirJavaElementFinder
  and three non-trivial implementation
- `FirProvider.SymbolProvider`
- `KotlinDeserializedJvmSymbolsProvider`
- `FirBuiltinSymbolProvider`

First implementation was moved to `FirProvider` and other two was
  deleted, because in FirJavaElementFinder we need lookup only in
  classes from source code, so such methods in library providers are
  useless

#KT-41048
This commit is contained in:
Dmitriy Novozhilov
2020-08-13 13:44:37 +03:00
parent b31f80aee3
commit d7cfb2fb13
10 changed files with 20 additions and 34 deletions
@@ -43,13 +43,12 @@ class FirJavaElementFinder(
private val firProvider = session.firProvider private val firProvider = session.firProvider
override fun findPackage(qualifiedName: String): PsiPackage? { override fun findPackage(qualifiedName: String): PsiPackage? {
if (firProvider.symbolProvider.getClassNamesInPackage(FqName(qualifiedName)).isEmpty()) return null if (firProvider.symbolProvider.getPackage(FqName(qualifiedName)) == null) return null
return PsiPackageImpl(psiManager, qualifiedName) return PsiPackageImpl(psiManager, qualifiedName)
} }
override fun getClasses(psiPackage: PsiPackage, scope: GlobalSearchScope): Array<PsiClass> { override fun getClasses(psiPackage: PsiPackage, scope: GlobalSearchScope): Array<PsiClass> {
return firProvider.symbolProvider return firProvider.getClassNamesInPackage(FqName(psiPackage.qualifiedName))
.getClassNamesInPackage(FqName(psiPackage.qualifiedName))
.mapNotNull { findClass(psiPackage.qualifiedName + "." + it.identifier, scope) } .mapNotNull { findClass(psiPackage.qualifiedName + "." + it.identifier, scope) }
.toTypedArray() .toTypedArray()
} }
@@ -408,11 +408,6 @@ class KotlinDeserializedJvmSymbolsProvider(
} }
} }
override fun getClassNamesInPackage(fqName: FqName): Set<Name> =
javaClassFinder.findPackage(fqName)
?.getClasses { true }.orEmpty()
.mapTo(sortedSetOf(), JavaClass::name)
private fun findRegularClass(classId: ClassId): FirRegularClass? = private fun findRegularClass(classId: ClassId): FirRegularClass? =
getClassLikeSymbolByFqName(classId)?.fir as? FirRegularClass getClassLikeSymbolByFqName(classId)?.fir as? FirRegularClass
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@RequiresOptIn @RequiresOptIn
annotation class FirProviderInternals annotation class FirProviderInternals
@@ -44,4 +45,6 @@ abstract class FirProvider : FirSessionComponent {
@FirProviderInternals @FirProviderInternals
abstract fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) abstract fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration)
abstract fun getClassNamesInPackage(fqName: FqName): Set<Name>
} }
@@ -56,9 +56,6 @@ abstract class FirSymbolProvider : FirSessionComponent {
abstract fun getNestedClassifierScope(classId: ClassId): FirScope? abstract fun getNestedClassifierScope(classId: ClassId): FirScope?
@Deprecated("will be deleted soon")
open fun getClassNamesInPackage(fqName: FqName): Set<Name> = emptySet()
abstract fun getPackage(fqName: FqName): FqName? // TODO: Replace to symbol sometime abstract fun getPackage(fqName: FqName): FqName? // TODO: Replace to symbol sometime
} }
@@ -257,12 +257,6 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider:
} }
} }
override fun getClassNamesInPackage(fqName: FqName): Set<Name> {
return allPackageFragments[fqName]?.flatMapTo(mutableSetOf()) {
it.getAllClassNames()
} ?: emptySet()
}
private fun findRegularClass(classId: ClassId): FirRegularClass? = private fun findRegularClass(classId: ClassId): FirRegularClass? =
getClassLikeSymbolByFqName(classId)?.fir getClassLikeSymbolByFqName(classId)?.fir
@@ -36,8 +36,4 @@ class FirCompositeSymbolProvider(val providers: List<FirSymbolProvider>) : FirSy
override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? { override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? {
return providers.firstNotNullResult { it.getClassLikeSymbolByFqName(classId) } return providers.firstNotNullResult { it.getClassLikeSymbolByFqName(classId) }
} }
override fun getClassNamesInPackage(fqName: FqName): Set<Name> {
return providers.flatMapTo(mutableSetOf()) { it.getClassNamesInPackage(fqName) }
}
} }
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.dependenciesWithoutSelf import org.jetbrains.kotlin.fir.dependenciesWithoutSelf
import org.jetbrains.kotlin.fir.resolve.providers.AbstractFirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.AbstractFirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.CallableId
@@ -63,8 +63,4 @@ open class FirDependenciesSymbolProviderImpl(val session: FirSession) : Abstract
null null
} }
} }
override fun getClassNamesInPackage(fqName: FqName): Set<Name> {
return dependencyProviders.flatMapTo(mutableSetOf()) { it.getClassNamesInPackage(fqName) }
}
} }
@@ -18,7 +18,9 @@ import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.KotlinScopeProvider import org.jetbrains.kotlin.fir.scopes.KotlinScopeProvider
import org.jetbrains.kotlin.fir.scopes.impl.nestedClassifierScope import org.jetbrains.kotlin.fir.scopes.impl.nestedClassifierScope
import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -76,10 +78,6 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: KotlinSc
if (getFirFilesByPackage(fqName).isNotEmpty()) return fqName if (getFirFilesByPackage(fqName).isNotEmpty()) return fqName
return null return null
} }
override fun getClassNamesInPackage(fqName: FqName): Set<Name> {
return state.classesInPackage[fqName] ?: emptySet()
}
} }
@FirProviderInternals @FirProviderInternals
@@ -259,6 +257,10 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: KotlinSc
state.setFrom(newState) state.setFrom(newState)
} }
} }
override fun getClassNamesInPackage(fqName: FqName): Set<Name> {
return state.classesInPackage[fqName] ?: emptySet()
}
} }
private const val rebuildIndex = true private const val rebuildIndex = true
@@ -112,6 +112,11 @@ internal class FirIdeProvider(
TODO() TODO()
} }
override fun getClassNamesInPackage(fqName: FqName): Set<Name> {
// TODO: KT-41048
return emptySet()
}
private inner class SymbolProvider : FirSymbolProvider() { private inner class SymbolProvider : FirSymbolProvider() {
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>> = override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>> =
providerHelper.getTopLevelCallableSymbols(packageFqName, name) providerHelper.getTopLevelCallableSymbols(packageFqName, name)
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.idea.frontend.api.fir.scopes package org.jetbrains.kotlin.idea.frontend.api.fir.scopes
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
@@ -25,7 +24,6 @@ internal class KtFirPackageScope(
) : KtPackageScope, ValidityTokenOwner { ) : KtPackageScope, ValidityTokenOwner {
private val firScope by weakRef(firScope) private val firScope by weakRef(firScope)
override val fqName: FqName get() = firScope.fqName override val fqName: FqName get() = firScope.fqName
private val provider get() = firScope.session.firSymbolProvider
override fun getCallableNames(): Set<Name> = withValidityAssertion { override fun getCallableNames(): Set<Name> = withValidityAssertion {
// TODO: KT-41048 // TODO: KT-41048
@@ -33,7 +31,8 @@ internal class KtFirPackageScope(
} }
override fun getClassLikeSymbolNames(): Set<Name> = withValidityAssertion { override fun getClassLikeSymbolNames(): Set<Name> = withValidityAssertion {
provider.getClassNamesInPackage(fqName) // TODO: KT-41048
emptySet()
} }
override fun getCallableSymbols(): Sequence<KtCallableSymbol> = withValidityAssertion { override fun getCallableSymbols(): Sequence<KtCallableSymbol> = withValidityAssertion {