Simplify: FirSymbolProvider.getClassDeclaredPropertySymbols

This commit is contained in:
Mikhail Glukhikh
2020-12-07 13:40:33 +03:00
parent e344d9e438
commit d90cc452fe
3 changed files with 9 additions and 11 deletions
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.fir.resolve.bindSymbolToLookupTag
import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedReferenceError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedReferenceError
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredCallableSymbols import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredPropertySymbols
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.expectedConeType import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.expectedConeType
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe
@@ -557,10 +557,10 @@ private fun JavaAnnotationArgument.toFirExpression(
val classId = this@toFirExpression.enumClassId val classId = this@toFirExpression.enumClassId
val entryName = this@toFirExpression.entryName val entryName = this@toFirExpression.entryName
val calleeReference = if (classId != null && entryName != null) { val calleeReference = if (classId != null && entryName != null) {
val callableSymbol = session.firSymbolProvider.getClassDeclaredCallableSymbols( val propertySymbol = session.firSymbolProvider.getClassDeclaredPropertySymbols(
classId, entryName classId, entryName
).firstOrNull() ).firstOrNull()
callableSymbol?.let { propertySymbol?.let {
buildResolvedNamedReference { buildResolvedNamedReference {
name = entryName name = entryName
resolvedSymbol = it resolvedSymbol = it
@@ -197,16 +197,16 @@ class KotlinDeserializedJvmSymbolsProvider(
private fun ClassId.toEnumEntryReferenceExpression(name: Name): FirExpression { private fun ClassId.toEnumEntryReferenceExpression(name: Name): FirExpression {
return buildFunctionCall { return buildFunctionCall {
val entryCallableSymbol = val entryPropertySymbol =
this@KotlinDeserializedJvmSymbolsProvider.session.firSymbolProvider.getClassDeclaredCallableSymbols( this@KotlinDeserializedJvmSymbolsProvider.session.firSymbolProvider.getClassDeclaredPropertySymbols(
this@toEnumEntryReferenceExpression, name, this@toEnumEntryReferenceExpression, name,
).firstOrNull() ).firstOrNull()
calleeReference = when { calleeReference = when {
entryCallableSymbol != null -> { entryPropertySymbol != null -> {
buildResolvedNamedReference { buildResolvedNamedReference {
this.name = name this.name = name
resolvedSymbol = entryCallableSymbol resolvedSymbol = entryPropertySymbol
} }
} }
else -> { else -> {
@@ -35,13 +35,11 @@ abstract class FirSymbolProvider(val session: FirSession) : FirSessionComponent
abstract fun getPackage(fqName: FqName): FqName? // TODO: Replace to symbol sometime abstract fun getPackage(fqName: FqName): FqName? // TODO: Replace to symbol sometime
} }
fun FirSymbolProvider.getClassDeclaredCallableSymbols(classId: ClassId, name: Name): List<FirCallableSymbol<*>> { fun FirSymbolProvider.getClassDeclaredPropertySymbols(classId: ClassId, name: Name): List<FirVariableSymbol<*>> {
val classSymbol = getClassLikeSymbolByFqName(classId) as? FirRegularClassSymbol ?: return emptyList() val classSymbol = getClassLikeSymbolByFqName(classId) as? FirRegularClassSymbol ?: return emptyList()
val declaredMemberScope = declaredMemberScope(classSymbol.fir) val declaredMemberScope = declaredMemberScope(classSymbol.fir)
val result = mutableListOf<FirCallableSymbol<*>>() val result = mutableListOf<FirVariableSymbol<*>>()
declaredMemberScope.processFunctionsByName(name, result::add)
declaredMemberScope.processPropertiesByName(name, result::add) declaredMemberScope.processPropertiesByName(name, result::add)
if (name == classId.shortClassName) declaredMemberScope.processDeclaredConstructors(result::add)
return result return result
} }