From 3c69a5efc89f69903227c8b77f6eb4d776acef74 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Mon, 13 Sep 2021 19:41:08 +0300 Subject: [PATCH] [FIR IDE] Handle `FirBackingField` in `buildVariableLikeSymbol` Do a small refactoring of `buildBackingFieldSymbol` --- .../idea/frontend/api/fir/KtSymbolByFirBuilder.kt | 12 +++++++----- .../idea/references/FirReferenceResolveHelper.kt | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt index ac52aac9bc7..63beb3dfc51 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt @@ -54,7 +54,7 @@ internal class KtSymbolByFirBuilder private constructor( val withReadOnlyCaching: Boolean, private val symbolsCache: BuilderCache, private val filesCache: BuilderCache, - private val backingFieldCache: BuilderCache, + private val backingFieldCache: BuilderCache, private val typesCache: BuilderCache, ) : ValidityTokenOwner { private val resolveState by weakRef(resolveState) @@ -244,7 +244,9 @@ internal class KtSymbolByFirBuilder private constructor( is FirValueParameter -> buildValueParameterSymbol(fir) is FirField -> buildFieldSymbol(fir) 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) } } - fun buildBackingFieldSymbol(fir: FirBackingFieldSymbol): KtFirBackingFieldSymbol { + fun buildBackingFieldSymbol(fir: FirBackingField): KtFirBackingFieldSymbol { 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 { - val backingFieldSymbol = fir.backingField?.symbol + val backingFieldSymbol = fir.backingField ?: error("FirProperty backingField is null") return buildBackingFieldSymbol(backingFieldSymbol) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt index 391d4e6da36..d4d2e0fa7ab 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt @@ -83,7 +83,7 @@ internal object FirReferenceResolveHelper { fun FirReference.toTargetSymbol(session: FirSession, symbolBuilder: KtSymbolByFirBuilder): Collection { return when (this) { is FirBackingFieldReference -> { - listOfNotNull(symbolBuilder.variableLikeBuilder.buildBackingFieldSymbol(resolvedSymbol)) + listOfNotNull(resolvedSymbol.fir.buildSymbol(symbolBuilder)) } is FirResolvedNamedReference -> { val fir = when (val symbol = resolvedSymbol) {