[FIR IDE] Handle FirBackingField in buildVariableLikeSymbol

Do a small refactoring of `buildBackingFieldSymbol`
This commit is contained in:
Roman Golyshev
2021-09-13 19:41:08 +03:00
committed by teamcityserver
parent 57608d7eeb
commit 3c69a5efc8
2 changed files with 8 additions and 6 deletions
@@ -54,7 +54,7 @@ internal class KtSymbolByFirBuilder private constructor(
val withReadOnlyCaching: Boolean, val withReadOnlyCaching: Boolean,
private val symbolsCache: BuilderCache<FirDeclaration, KtSymbol>, private val symbolsCache: BuilderCache<FirDeclaration, KtSymbol>,
private val filesCache: BuilderCache<FirFile, KtFileSymbol>, private val filesCache: BuilderCache<FirFile, KtFileSymbol>,
private val backingFieldCache: BuilderCache<FirBackingFieldSymbol, KtBackingFieldSymbol>, private val backingFieldCache: BuilderCache<FirBackingField, KtBackingFieldSymbol>,
private val typesCache: BuilderCache<ConeKotlinType, KtType>, private val typesCache: BuilderCache<ConeKotlinType, KtType>,
) : ValidityTokenOwner { ) : ValidityTokenOwner {
private val resolveState by weakRef(resolveState) private val resolveState by weakRef(resolveState)
@@ -244,7 +244,9 @@ internal class KtSymbolByFirBuilder private constructor(
is FirValueParameter -> buildValueParameterSymbol(fir) is FirValueParameter -> buildValueParameterSymbol(fir)
is FirField -> buildFieldSymbol(fir) is FirField -> buildFieldSymbol(fir)
is FirEnumEntry -> buildEnumEntrySymbol(fir) // TODO enum entry should not be callable is FirEnumEntry -> buildEnumEntrySymbol(fir) // TODO enum entry should not be callable
else -> throwUnexpectedElementError(fir) is FirBackingField -> buildBackingFieldSymbol(fir)
is FirErrorProperty -> throwUnexpectedElementError(fir)
} }
} }
@@ -289,14 +291,14 @@ internal class KtSymbolByFirBuilder private constructor(
return symbolsCache.cache(fir) { KtFirJavaFieldSymbol(fir, resolveState, token, this@KtSymbolByFirBuilder) } return symbolsCache.cache(fir) { KtFirJavaFieldSymbol(fir, resolveState, token, this@KtSymbolByFirBuilder) }
} }
fun buildBackingFieldSymbol(fir: FirBackingFieldSymbol): KtFirBackingFieldSymbol { fun buildBackingFieldSymbol(fir: FirBackingField): KtFirBackingFieldSymbol {
return backingFieldCache.cache(fir) { return backingFieldCache.cache(fir) {
KtFirBackingFieldSymbol(fir.fir.propertySymbol.fir, resolveState, token, this@KtSymbolByFirBuilder) KtFirBackingFieldSymbol(fir.propertySymbol.fir, resolveState, token, this@KtSymbolByFirBuilder)
} }
} }
fun buildBackingFieldSymbolByProperty(fir: FirProperty): KtFirBackingFieldSymbol { fun buildBackingFieldSymbolByProperty(fir: FirProperty): KtFirBackingFieldSymbol {
val backingFieldSymbol = fir.backingField?.symbol val backingFieldSymbol = fir.backingField
?: error("FirProperty backingField is null") ?: error("FirProperty backingField is null")
return buildBackingFieldSymbol(backingFieldSymbol) return buildBackingFieldSymbol(backingFieldSymbol)
} }
@@ -83,7 +83,7 @@ internal object FirReferenceResolveHelper {
fun FirReference.toTargetSymbol(session: FirSession, symbolBuilder: KtSymbolByFirBuilder): Collection<KtSymbol> { fun FirReference.toTargetSymbol(session: FirSession, symbolBuilder: KtSymbolByFirBuilder): Collection<KtSymbol> {
return when (this) { return when (this) {
is FirBackingFieldReference -> { is FirBackingFieldReference -> {
listOfNotNull(symbolBuilder.variableLikeBuilder.buildBackingFieldSymbol(resolvedSymbol)) listOfNotNull(resolvedSymbol.fir.buildSymbol(symbolBuilder))
} }
is FirResolvedNamedReference -> { is FirResolvedNamedReference -> {
val fir = when (val symbol = resolvedSymbol) { val fir = when (val symbol = resolvedSymbol) {