[FIR] Refactoring: Move set utility functions to setUtils.kt
This commit is contained in:
committed by
Space Team
parent
8d2bf8828c
commit
38ebe60e9f
+1
-2
@@ -6,8 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.util
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.util
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
||||||
import org.jetbrains.kotlin.analysis.utils.collections.filterToSetOrEmpty
|
|
||||||
import org.jetbrains.kotlin.analysis.utils.collections.mapToSetOrEmpty
|
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames
|
import org.jetbrains.kotlin.builtins.StandardNames
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolNamesProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolNamesProvider
|
||||||
@@ -15,6 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.FirDelegatingCachedSymbolNames
|
|||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirCachedSymbolNamesProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.FirCachedSymbolNamesProvider
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.utils.filterToSetOrEmpty
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A [FirSymbolNamesProvider] that fetches top-level names from a Kotlin [declarationProvider].
|
* A [FirSymbolNamesProvider] that fetches top-level names from a Kotlin [declarationProvider].
|
||||||
|
|||||||
+2
-4
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.name.*
|
|||||||
import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol
|
import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.getName
|
import org.jetbrains.kotlin.serialization.deserialization.getName
|
||||||
|
import org.jetbrains.kotlin.utils.mapToSetOrEmpty
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
class PackagePartsCacheData(
|
class PackagePartsCacheData(
|
||||||
@@ -95,10 +96,7 @@ abstract class AbstractFirDeserializedSymbolProvider(
|
|||||||
|
|
||||||
override val symbolNamesProvider: FirSymbolNamesProvider = object : FirCachedSymbolNamesProvider(session) {
|
override val symbolNamesProvider: FirSymbolNamesProvider = object : FirCachedSymbolNamesProvider(session) {
|
||||||
override fun computeTopLevelClassifierNames(packageFqName: FqName): Set<Name>? {
|
override fun computeTopLevelClassifierNames(packageFqName: FqName): Set<Name>? {
|
||||||
val classesInPackage = knownTopLevelClassesInPackage(packageFqName)
|
val classesInPackage = knownTopLevelClassesInPackage(packageFqName)?.mapToSetOrEmpty { Name.identifier(it) } ?: return null
|
||||||
?.mapTo(mutableSetOf()) { Name.identifier(it) }
|
|
||||||
?.ifEmpty { emptySet() }
|
|
||||||
?: return null
|
|
||||||
|
|
||||||
if (packageFqName.asString() !in packageNamesForNonClassDeclarations) return classesInPackage
|
if (packageFqName.asString() !in packageNamesForNonClassDeclarations) return classesInPackage
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.load.java.structure.JavaClass
|
|||||||
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
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.utils.mapToSetOrEmpty
|
||||||
|
|
||||||
// This symbol provider only loads JVM classes *not* annotated with Kotlin `@Metadata` annotation.
|
// This symbol provider only loads JVM classes *not* annotated with Kotlin `@Metadata` annotation.
|
||||||
// Use it in application sessions for loading classes from Java files listed on the command line.
|
// Use it in application sessions for loading classes from Java files listed on the command line.
|
||||||
@@ -72,9 +73,7 @@ open class JavaSymbolProvider(
|
|||||||
|
|
||||||
override val symbolNamesProvider: FirSymbolNamesProvider = object : FirSymbolNamesProviderWithoutCallables() {
|
override val symbolNamesProvider: FirSymbolNamesProvider = object : FirSymbolNamesProviderWithoutCallables() {
|
||||||
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name>? =
|
override fun getTopLevelClassifierNamesInPackage(packageFqName: FqName): Set<Name>? =
|
||||||
javaFacade.knownClassNamesInPackage(packageFqName)
|
javaFacade.knownClassNamesInPackage(packageFqName)?.mapToSetOrEmpty { Name.identifier(it) }
|
||||||
?.mapTo(mutableSetOf()) { Name.identifier(it) }
|
|
||||||
?.ifEmpty { emptySet() }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-6
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.impl.FirSyntheticFunctionInter
|
|||||||
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
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.utils.flatMapToNullableSet
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A [FirSymbolNamesProvider] that caches all name sets.
|
* A [FirSymbolNamesProvider] that caches all name sets.
|
||||||
@@ -102,9 +103,3 @@ open class FirCompositeCachedSymbolNamesProvider(
|
|||||||
create(session, providers.map { it.symbolNamesProvider })
|
create(session, providers.map { it.symbolNamesProvider })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Works almost as regular flatMap, but returns a set and returns null if any lambda call returned null
|
|
||||||
*/
|
|
||||||
inline fun <T, R> Iterable<T>.flatMapToNullableSet(transform: (T) -> Iterable<R>?): Set<R>? =
|
|
||||||
flatMapTo(mutableSetOf()) { transform(it) ?: return null }
|
|
||||||
|
|||||||
+1
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.builtins.functions.FunctionTypeKind
|
|||||||
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
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.utils.flatMapToNullableSet
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [FirSymbolNamesProvider] provides information about which symbols may be provided by a [FirSymbolProvider] given the symbol's name. This
|
* [FirSymbolNamesProvider] provides information about which symbols may be provided by a [FirSymbolProvider] given the symbol's name. This
|
||||||
|
|||||||
+9
-3
@@ -3,7 +3,13 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.utils.collections
|
package org.jetbrains.kotlin.utils
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Works almost as regular flatMap, but returns a set and returns null if any lambda call returned null
|
||||||
|
*/
|
||||||
|
inline fun <T, R> Iterable<T>.flatMapToNullableSet(transform: (T) -> Iterable<R>?): Set<R>? =
|
||||||
|
flatMapTo(mutableSetOf()) { transform(it) ?: return null }.ifEmpty { emptySet() }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maps all elements of this non-empty collection with the given [transform] function to a new mutable set, or returns [emptySet] if this
|
* Maps all elements of this non-empty collection with the given [transform] function to a new mutable set, or returns [emptySet] if this
|
||||||
@@ -12,8 +18,8 @@ package org.jetbrains.kotlin.analysis.utils.collections
|
|||||||
* [mapToSetOrEmpty] should be preferred over `collection.mapTo(mutableSetOf()) { ... }` when `collection` may be empty and the resulting
|
* [mapToSetOrEmpty] should be preferred over `collection.mapTo(mutableSetOf()) { ... }` when `collection` may be empty and the resulting
|
||||||
* set may be cached, because [mapToSetOrEmpty] saves memory by avoiding the creation of an empty mutable set.
|
* set may be cached, because [mapToSetOrEmpty] saves memory by avoiding the creation of an empty mutable set.
|
||||||
*/
|
*/
|
||||||
public inline fun <T, R> Collection<T>.mapToSetOrEmpty(transform: (T) -> R): Set<R> =
|
inline fun <T, R> Collection<T>.mapToSetOrEmpty(transform: (T) -> R): Set<R> =
|
||||||
if (isNotEmpty()) mapTo(mutableSetOf(), transform) else emptySet()
|
if (isNotEmpty()) mapTo(mutableSetOf(), transform) else emptySet()
|
||||||
|
|
||||||
public inline fun <T> Collection<T>.filterToSetOrEmpty(predicate: (T) -> Boolean): Set<T> =
|
inline fun <T> Collection<T>.filterToSetOrEmpty(predicate: (T) -> Boolean): Set<T> =
|
||||||
filterTo(mutableSetOf(), predicate).ifEmpty { emptySet() }
|
filterTo(mutableSetOf(), predicate).ifEmpty { emptySet() }
|
||||||
Reference in New Issue
Block a user