From d7cfb2fb132fe9af1bd377277d26fbe1a6709133 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 13 Aug 2020 13:44:37 +0300 Subject: [PATCH] [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 --- .../kotlin/fir/java/FirJavaElementFinder.kt | 5 ++--- .../KotlinDeserializedJvmSymbolsProvider.kt | 5 ----- .../kotlin/fir/resolve/providers/FirProvider.kt | 3 +++ .../fir/resolve/providers/FirSymbolProvider.kt | 3 --- .../providers/impl/FirBuiltinSymbolProvider.kt | 6 ------ .../providers/impl/FirCompositeSymbolProvider.kt | 4 ---- .../impl/FirDependenciesSymbolProviderImpl.kt | 6 +----- .../fir/resolve/providers/impl/FirProviderImpl.kt | 12 +++++++----- .../fir/low/level/api/providers/FirIdeProvider.kt | 5 +++++ .../frontend/api/fir/scopes/KtFirPackageScope.kt | 5 ++--- 10 files changed, 20 insertions(+), 34 deletions(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt index ea08c906fc7..2f08580b1d4 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt @@ -43,13 +43,12 @@ class FirJavaElementFinder( private val firProvider = session.firProvider 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) } override fun getClasses(psiPackage: PsiPackage, scope: GlobalSearchScope): Array { - return firProvider.symbolProvider - .getClassNamesInPackage(FqName(psiPackage.qualifiedName)) + return firProvider.getClassNamesInPackage(FqName(psiPackage.qualifiedName)) .mapNotNull { findClass(psiPackage.qualifiedName + "." + it.identifier, scope) } .toTypedArray() } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt index 97041024708..d0295752a3c 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt @@ -408,11 +408,6 @@ class KotlinDeserializedJvmSymbolsProvider( } } - override fun getClassNamesInPackage(fqName: FqName): Set = - javaClassFinder.findPackage(fqName) - ?.getClasses { true }.orEmpty() - .mapTo(sortedSetOf(), JavaClass::name) - private fun findRegularClass(classId: ClassId): FirRegularClass? = getClassLikeSymbolByFqName(classId)?.fir as? FirRegularClass diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt index 1375012fbd3..4fb2e45eddc 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name @RequiresOptIn annotation class FirProviderInternals @@ -44,4 +45,6 @@ abstract class FirProvider : FirSessionComponent { @FirProviderInternals abstract fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) + + abstract fun getClassNamesInPackage(fqName: FqName): Set } 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 dbbb7c6612d..52825154a88 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 @@ -56,9 +56,6 @@ abstract class FirSymbolProvider : FirSessionComponent { abstract fun getNestedClassifierScope(classId: ClassId): FirScope? - @Deprecated("will be deleted soon") - open fun getClassNamesInPackage(fqName: FqName): Set = emptySet() - abstract fun getPackage(fqName: FqName): FqName? // TODO: Replace to symbol sometime } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt index e8f8a80bc2d..5a8ae652428 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt @@ -257,12 +257,6 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider: } } - override fun getClassNamesInPackage(fqName: FqName): Set { - return allPackageFragments[fqName]?.flatMapTo(mutableSetOf()) { - it.getAllClassNames() - } ?: emptySet() - } - private fun findRegularClass(classId: ClassId): FirRegularClass? = getClassLikeSymbolByFqName(classId)?.fir 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 4626ce6a311..efd871dd039 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 @@ -36,8 +36,4 @@ class FirCompositeSymbolProvider(val providers: List) : FirSy override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? { return providers.firstNotNullResult { it.getClassLikeSymbolByFqName(classId) } } - - override fun getClassNamesInPackage(fqName: FqName): Set { - return providers.flatMapTo(mutableSetOf()) { it.getClassNamesInPackage(fqName) } - } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirDependenciesSymbolProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirDependenciesSymbolProviderImpl.kt index 116a3a6c2e0..2da2e0caa68 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirDependenciesSymbolProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirDependenciesSymbolProviderImpl.kt @@ -7,8 +7,8 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl import org.jetbrains.kotlin.fir.FirSession 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.providers.AbstractFirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.symbols.CallableId @@ -63,8 +63,4 @@ open class FirDependenciesSymbolProviderImpl(val session: FirSession) : Abstract null } } - - override fun getClassNamesInPackage(fqName: FqName): Set { - return dependencyProviders.flatMapTo(mutableSetOf()) { it.getClassNamesInPackage(fqName) } - } } 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 b6b2638bbb9..3cb186cf7dc 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 @@ -18,7 +18,9 @@ import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.KotlinScopeProvider import org.jetbrains.kotlin.fir.scopes.impl.nestedClassifierScope 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.name.ClassId import org.jetbrains.kotlin.name.FqName @@ -76,10 +78,6 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: KotlinSc if (getFirFilesByPackage(fqName).isNotEmpty()) return fqName return null } - - override fun getClassNamesInPackage(fqName: FqName): Set { - return state.classesInPackage[fqName] ?: emptySet() - } } @FirProviderInternals @@ -259,6 +257,10 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: KotlinSc state.setFrom(newState) } } + + override fun getClassNamesInPackage(fqName: FqName): Set { + return state.classesInPackage[fqName] ?: emptySet() + } } private const val rebuildIndex = true diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt index 26bd4c5201c..8928a64266c 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt @@ -112,6 +112,11 @@ internal class FirIdeProvider( TODO() } + override fun getClassNamesInPackage(fqName: FqName): Set { + // TODO: KT-41048 + return emptySet() + } + private inner class SymbolProvider : FirSymbolProvider() { override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List> = providerHelper.getTopLevelCallableSymbols(packageFqName, name) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt index 689a3bd5d77..2ff1ffc51f8 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt @@ -5,7 +5,6 @@ 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.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner @@ -25,7 +24,6 @@ internal class KtFirPackageScope( ) : KtPackageScope, ValidityTokenOwner { private val firScope by weakRef(firScope) override val fqName: FqName get() = firScope.fqName - private val provider get() = firScope.session.firSymbolProvider override fun getCallableNames(): Set = withValidityAssertion { // TODO: KT-41048 @@ -33,7 +31,8 @@ internal class KtFirPackageScope( } override fun getClassLikeSymbolNames(): Set = withValidityAssertion { - provider.getClassNamesInPackage(fqName) + // TODO: KT-41048 + emptySet() } override fun getCallableSymbols(): Sequence = withValidityAssertion {