[FIR] Introduce separate getTopLevelFunction/PropertySymbols

This commit is contained in:
Mikhail Glukhikh
2020-12-14 13:23:22 +03:00
parent fd99f2b2cf
commit 4e4293b609
17 changed files with 297 additions and 117 deletions
@@ -71,6 +71,14 @@ class JavaSymbolProvider(
override fun getTopLevelCallableSymbolsTo(destination: MutableList<FirCallableSymbol<*>>, packageFqName: FqName, name: Name) {
}
@FirSymbolProviderInternals
override fun getTopLevelFunctionSymbolsTo(destination: MutableList<FirNamedFunctionSymbol>, packageFqName: FqName, name: Name) {
}
@FirSymbolProviderInternals
override fun getTopLevelPropertySymbolsTo(destination: MutableList<FirPropertySymbol>, packageFqName: FqName, name: Name) {
}
private fun JavaTypeParameter.toFirTypeParameterSymbol(
javaTypeParameterStack: JavaTypeParameterStack
): Pair<FirTypeParameterSymbol, Boolean> {
@@ -363,14 +363,14 @@ class KotlinDeserializedJvmSymbolsProvider(
return symbol
}
private fun loadFunctionsByName(part: PackagePartsCacheData, name: Name): List<FirCallableSymbol<*>> {
private fun loadFunctionsByName(part: PackagePartsCacheData, name: Name): List<FirNamedFunctionSymbol> {
val functionIds = part.topLevelFunctionNameIndex[name] ?: return emptyList()
return functionIds.map {
part.context.memberDeserializer.loadFunction(part.proto.getFunction(it)).symbol
}
}
private fun loadPropertiesByName(part: PackagePartsCacheData, name: Name): List<FirCallableSymbol<*>> {
private fun loadPropertiesByName(part: PackagePartsCacheData, name: Name): List<FirPropertySymbol> {
val propertyIds = part.topLevelPropertyNameIndex[name] ?: return emptyList()
return propertyIds.map {
part.context.memberDeserializer.loadProperty(part.proto.getProperty(it)).symbol
@@ -384,6 +384,20 @@ class KotlinDeserializedJvmSymbolsProvider(
}
}
@FirSymbolProviderInternals
override fun getTopLevelFunctionSymbolsTo(destination: MutableList<FirNamedFunctionSymbol>, packageFqName: FqName, name: Name) {
getPackageParts(packageFqName).flatMapTo(destination) { part ->
loadFunctionsByName(part, name)
}
}
@FirSymbolProviderInternals
override fun getTopLevelPropertySymbolsTo(destination: MutableList<FirPropertySymbol>, packageFqName: FqName, name: Name) {
getPackageParts(packageFqName).flatMapTo(destination) { part ->
loadPropertiesByName(part, name)
}
}
private fun getPackageParts(packageFqName: FqName): Collection<PackagePartsCacheData> {
return packagePartsCache.lookupCacheOrCalculate(packageFqName) {
try {