[FIR] Type "top-level classifier names in package" as Name
- This is more consistent with "top-level callable names in package" and simplifies the set construction quite a bit, as we can avoid a lot of `asString` conversions.
This commit is contained in:
committed by
Space Team
parent
8034d522b9
commit
efe587691b
+1
-1
@@ -51,7 +51,7 @@ internal class LLFirCombinedJavaSymbolProvider private constructor(
|
||||
private val classCache: NullableCaffeineCache<ClassId, FirRegularClassSymbol> = NullableCaffeineCache { it.maximumSize(2500) }
|
||||
|
||||
override val symbolNamesProvider: FirSymbolNamesProvider = object : FirSymbolNamesProviderWithoutCallables() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String>? = null
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name>? = null
|
||||
override fun mayHaveTopLevelClassifier(classId: ClassId): Boolean = true
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ internal class LLFirCombinedSyntheticFunctionSymbolProvider private constructor(
|
||||
// `FirCompositeSymbolNamesProvider` defines `mayHaveSyntheticFunctionTypes` and `mayHaveSyntheticFunctionType` correctly, which is
|
||||
// needed for consistency should this symbol provider be part of another composite symbol provider.
|
||||
object : FirCompositeSymbolNamesProvider(providers.map { it.symbolNamesProvider }) {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String> = emptySet()
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name> = emptySet()
|
||||
override fun getPackageNamesWithTopLevelCallables(): Set<String> = emptySet()
|
||||
override fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set<Name> = emptySet()
|
||||
}
|
||||
|
||||
+2
-4
@@ -75,11 +75,9 @@ private class LLFirResolveExtensionToolSymbolNamesProvider(
|
||||
private val packageFilter: LLFirResolveExtensionToolPackageFilter,
|
||||
private val fileProvider: LLFirResolveExtensionsFileProvider,
|
||||
) : FirSymbolNamesProvider() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String> = forbidAnalysis {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name> = forbidAnalysis {
|
||||
if (!packageFilter.packageExists(packageFqName)) return emptySet()
|
||||
fileProvider.getFilesByPackage(packageFqName)
|
||||
.flatMap { it.getTopLevelClassifierNames() }
|
||||
.mapTo(mutableSetOf()) { it.asString() }
|
||||
fileProvider.getFilesByPackage(packageFqName).flatMap { it.getTopLevelClassifierNames() }.toSet()
|
||||
}
|
||||
|
||||
override fun getPackageNamesWithTopLevelCallables(): Set<String> = forbidAnalysis {
|
||||
|
||||
+2
-4
@@ -25,12 +25,10 @@ internal open class LLFirKotlinSymbolNamesProvider(
|
||||
private val declarationProvider: KotlinDeclarationProvider,
|
||||
private val allowKotlinPackage: Boolean? = null,
|
||||
) : FirSymbolNamesProvider() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String> {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name> {
|
||||
if (allowKotlinPackage == false && packageFqName.isKotlinPackage()) return emptySet()
|
||||
|
||||
return declarationProvider
|
||||
.getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName)
|
||||
.mapToSetOrEmpty { it.asString() }
|
||||
return declarationProvider.getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName)
|
||||
}
|
||||
|
||||
override fun getPackageNamesWithTopLevelCallables(): Set<String>? {
|
||||
|
||||
+4
-4
@@ -62,11 +62,11 @@ class NativeForwardDeclarationsSymbolProvider(
|
||||
}
|
||||
}
|
||||
|
||||
private val includedForwardDeclarationsByPackage: Map<FqName, Set<String>> by lazy {
|
||||
buildMap<FqName, MutableSet<String>> {
|
||||
private val includedForwardDeclarationsByPackage: Map<FqName, Set<Name>> by lazy {
|
||||
buildMap<FqName, MutableSet<Name>> {
|
||||
for (classId in includedForwardDeclarations) {
|
||||
getOrPut(classId.packageFqName) { mutableSetOf() }
|
||||
.add(classId.shortClassName.asString())
|
||||
.add(classId.shortClassName)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -157,7 +157,7 @@ class NativeForwardDeclarationsSymbolProvider(
|
||||
}
|
||||
|
||||
override val symbolNamesProvider: FirSymbolNamesProvider = object : FirSymbolNamesProviderWithoutCallables() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String> =
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name> =
|
||||
includedForwardDeclarationsByPackage[packageFqName].orEmpty()
|
||||
}
|
||||
}
|
||||
|
||||
+6
-3
@@ -94,8 +94,11 @@ abstract class AbstractFirDeserializedSymbolProvider(
|
||||
}
|
||||
|
||||
override val symbolNamesProvider: FirSymbolNamesProvider = object : FirCachedSymbolNamesProvider(session) {
|
||||
override fun computeTopLevelClassifierNames(packageFqName: FqName): Set<String>? {
|
||||
val classesInPackage = knownTopLevelClassesInPackage(packageFqName) ?: return null
|
||||
override fun computeTopLevelClassifierNames(packageFqName: FqName): Set<Name>? {
|
||||
val classesInPackage = knownTopLevelClassesInPackage(packageFqName)
|
||||
?.mapTo(mutableSetOf()) { Name.identifier(it) }
|
||||
?.ifEmpty { emptySet() }
|
||||
?: return null
|
||||
|
||||
if (packageFqName.asString() !in packageNamesForNonClassDeclarations) return classesInPackage
|
||||
|
||||
@@ -104,7 +107,7 @@ abstract class AbstractFirDeserializedSymbolProvider(
|
||||
|
||||
return buildSet {
|
||||
addAll(classesInPackage)
|
||||
typeAliasNames.mapTo(this) { it.asString() }
|
||||
addAll(typeAliasNames)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -88,9 +88,9 @@ open class FirBuiltinSymbolProvider(
|
||||
override fun getPackageNamesWithTopLevelCallables(): Set<String> =
|
||||
allPackageFragments.keys.mapTo(mutableSetOf()) { it.asString() }
|
||||
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String> =
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name> =
|
||||
allPackageFragments[packageFqName]?.flatMapTo(mutableSetOf()) { fragment ->
|
||||
fragment.classDataFinder.allClassIds.map { it.shortClassName.asString() }
|
||||
fragment.classDataFinder.allClassIds.map { it.shortClassName }
|
||||
}.orEmpty()
|
||||
|
||||
override fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set<Name> =
|
||||
|
||||
@@ -71,8 +71,10 @@ open class JavaSymbolProvider(
|
||||
override fun getPackage(fqName: FqName): FqName? = javaFacade.getPackage(fqName)
|
||||
|
||||
override val symbolNamesProvider: FirSymbolNamesProvider = object : FirSymbolNamesProviderWithoutCallables() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String>? =
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name>? =
|
||||
javaFacade.knownClassNamesInPackage(packageFqName)
|
||||
?.mapTo(mutableSetOf()) { Name.identifier(it) }
|
||||
?.ifEmpty { emptySet() }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
-4
@@ -64,12 +64,13 @@ class FirExtensionDeclarationsSymbolProvider private constructor(
|
||||
)
|
||||
}
|
||||
|
||||
private val classNamesInPackageCache: FirLazyValue<Map<FqName, Set<String>>> =
|
||||
private val classNamesInPackageCache: FirLazyValue<Map<FqName, Set<Name>>> =
|
||||
cachesFactory.createLazyValue {
|
||||
computeNamesGroupedByPackage(
|
||||
FirDeclarationGenerationExtension::getTopLevelClassIds,
|
||||
ClassId::packageFqName
|
||||
) { it.shortClassName.asString() }
|
||||
ClassId::packageFqName,
|
||||
ClassId::shortClassName,
|
||||
)
|
||||
}
|
||||
|
||||
private fun <I, N> computeNamesGroupedByPackage(
|
||||
@@ -148,7 +149,7 @@ class FirExtensionDeclarationsSymbolProvider private constructor(
|
||||
// ------------------------------------------ provider methods ------------------------------------------
|
||||
|
||||
override val symbolNamesProvider: FirSymbolNamesProvider = object : FirSymbolNamesProvider() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String> =
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name> =
|
||||
classNamesInPackageCache.getValue()[packageFqName] ?: emptySet()
|
||||
|
||||
override fun getPackageNamesWithTopLevelCallables(): Set<String> =
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ class FirSwitchableExtensionDeclarationsSymbolProvider private constructor(
|
||||
override fun getPackageNamesWithTopLevelCallables(): Set<String>? =
|
||||
if (disabled) null else delegate.symbolNamesProvider.getPackageNamesWithTopLevelCallables()
|
||||
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String>? =
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name>? =
|
||||
if (disabled) null else delegate.symbolNamesProvider.getTopLevelClassifierNamesInPackage(packageFqName)
|
||||
|
||||
override fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set<Name>? =
|
||||
|
||||
+4
-4
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.name.Name
|
||||
* A [FirSymbolNamesProvider] that caches all name sets.
|
||||
*/
|
||||
abstract class FirCachedSymbolNamesProvider(protected val session: FirSession) : FirSymbolNamesProvider() {
|
||||
abstract fun computeTopLevelClassifierNames(packageFqName: FqName): Set<String>?
|
||||
abstract fun computeTopLevelClassifierNames(packageFqName: FqName): Set<Name>?
|
||||
abstract fun computePackageNamesWithTopLevelCallables(): Set<String>?
|
||||
abstract fun computeTopLevelCallableNames(packageFqName: FqName): Set<Name>?
|
||||
|
||||
@@ -32,7 +32,7 @@ abstract class FirCachedSymbolNamesProvider(protected val session: FirSession) :
|
||||
private val topLevelCallableNamesByPackage =
|
||||
session.firCachesFactory.createCache(::computeTopLevelCallableNames)
|
||||
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String>? =
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name>? =
|
||||
topLevelClassifierNamesByPackage.getValue(packageFqName)
|
||||
|
||||
override fun getPackageNamesWithTopLevelCallables(): Set<String>? = topLevelCallablePackageNames
|
||||
@@ -49,7 +49,7 @@ class FirDelegatingCachedSymbolNamesProvider(
|
||||
session: FirSession,
|
||||
private val delegate: FirSymbolNamesProvider,
|
||||
) : FirCachedSymbolNamesProvider(session) {
|
||||
override fun computeTopLevelClassifierNames(packageFqName: FqName): Set<String>? =
|
||||
override fun computeTopLevelClassifierNames(packageFqName: FqName): Set<Name>? =
|
||||
delegate.getTopLevelClassifierNamesInPackage(packageFqName)
|
||||
|
||||
override fun computePackageNamesWithTopLevelCallables(): Set<String>? =
|
||||
@@ -68,7 +68,7 @@ open class FirCompositeCachedSymbolNamesProvider(
|
||||
session: FirSession,
|
||||
val providers: List<FirSymbolNamesProvider>,
|
||||
) : FirCachedSymbolNamesProvider(session) {
|
||||
override fun computeTopLevelClassifierNames(packageFqName: FqName): Set<String>? =
|
||||
override fun computeTopLevelClassifierNames(packageFqName: FqName): Set<Name>? =
|
||||
providers.flatMapToNullableSet { it.getTopLevelClassifierNamesInPackage(packageFqName) }
|
||||
|
||||
override fun computePackageNamesWithTopLevelCallables(): Set<String>? =
|
||||
|
||||
+6
-6
@@ -32,7 +32,7 @@ abstract class FirSymbolNamesProvider {
|
||||
* All usages must take into account that the result might not include `kotlin.FunctionN` (and others for which a [FunctionTypeKind]
|
||||
* exists).
|
||||
*/
|
||||
abstract fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String>?
|
||||
abstract fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name>?
|
||||
|
||||
/**
|
||||
* Returns the set of fully qualified package names which contain a top-level callable declaration within the provider's scope.
|
||||
@@ -96,16 +96,16 @@ abstract class FirSymbolNamesProvider {
|
||||
}
|
||||
}
|
||||
|
||||
private fun Set<String>.mayContainTopLevelClassifier(shortClassName: Name): Boolean {
|
||||
private fun Set<Name>.mayContainTopLevelClassifier(shortClassName: Name): Boolean {
|
||||
// Symbol providers can potentially provide symbols for special names. Hence, special names have to be allowed.
|
||||
return shortClassName.isSpecial || shortClassName.asString() in this
|
||||
return shortClassName.isSpecial || shortClassName in this
|
||||
}
|
||||
|
||||
/**
|
||||
* A [FirSymbolNamesProvider] for symbol providers which can't provide any symbol name sets.
|
||||
*/
|
||||
object FirNullSymbolNamesProvider : FirSymbolNamesProvider() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String>? = null
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name>? = null
|
||||
override fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set<Name>? = null
|
||||
override fun getPackageNamesWithTopLevelCallables(): Set<String>? = null
|
||||
override fun mayHaveTopLevelClassifier(classId: ClassId): Boolean = true
|
||||
@@ -116,7 +116,7 @@ object FirNullSymbolNamesProvider : FirSymbolNamesProvider() {
|
||||
* A [FirSymbolNamesProvider] for symbol providers which don't contain *any* symbols.
|
||||
*/
|
||||
object FirEmptySymbolNamesProvider : FirSymbolNamesProvider() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String> = emptySet()
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name> = emptySet()
|
||||
override fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set<Name> = emptySet()
|
||||
override fun getPackageNamesWithTopLevelCallables(): Set<String> = emptySet()
|
||||
override fun mayHaveTopLevelClassifier(classId: ClassId): Boolean = false
|
||||
@@ -130,7 +130,7 @@ abstract class FirSymbolNamesProviderWithoutCallables : FirSymbolNamesProvider()
|
||||
}
|
||||
|
||||
open class FirCompositeSymbolNamesProvider(val providers: List<FirSymbolNamesProvider>) : FirSymbolNamesProvider() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String>? {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name>? {
|
||||
return providers.flatMapToNullableSet { it.getTopLevelClassifierNamesInPackage(packageFqName) }
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ class FirCachingCompositeSymbolProvider(
|
||||
session,
|
||||
providers.map { it.symbolNamesProvider },
|
||||
) {
|
||||
override fun computeTopLevelClassifierNames(packageFqName: FqName): Set<String>? =
|
||||
override fun computeTopLevelClassifierNames(packageFqName: FqName): Set<Name>? =
|
||||
super.computeTopLevelClassifierNames(packageFqName).also {
|
||||
ensureNotNull(it) { "classifier names in package $packageFqName" }
|
||||
}
|
||||
|
||||
+1
-1
@@ -92,7 +92,7 @@ abstract class FirSyntheticFunctionInterfaceProviderBase(
|
||||
|
||||
override fun mayHaveSyntheticFunctionType(classId: ClassId): Boolean = classId.getAcceptableFunctionTypeKind() != null
|
||||
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String> =
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name> =
|
||||
// Generated function type names aren't included in the top-level classifier names set.
|
||||
emptySet()
|
||||
|
||||
|
||||
+2
-2
@@ -79,9 +79,9 @@ class FirCloneableSymbolProvider(
|
||||
}
|
||||
|
||||
override val symbolNamesProvider: FirSymbolNamesProvider = object : FirSymbolNamesProviderWithoutCallables() {
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String> =
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name> =
|
||||
if (packageFqName == StandardClassIds.Cloneable.packageFqName) {
|
||||
setOf(StandardClassIds.Cloneable.shortClassName.asString())
|
||||
setOf(StandardClassIds.Cloneable.shortClassName)
|
||||
} else emptySet()
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -85,8 +85,8 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: FirKotli
|
||||
override fun getPackageNamesWithTopLevelCallables(): Set<String> =
|
||||
state.allSubPackages.mapTo(mutableSetOf()) { it.asString() }
|
||||
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<String> =
|
||||
state.classifierInPackage[packageFqName].orEmpty().mapTo(mutableSetOf()) { it.asString() }
|
||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name> =
|
||||
state.classifierInPackage[packageFqName].orEmpty()
|
||||
|
||||
override fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set<Name> = buildSet {
|
||||
for (key in state.functionMap.keys) {
|
||||
|
||||
Reference in New Issue
Block a user