Analysis API FIR/FE1.0: fix backing field rendering & resolving
This commit is contained in:
+1
-1
@@ -304,7 +304,7 @@ internal class KtSymbolByFirBuilder private constructor(
|
||||
|
||||
fun buildBackingFieldSymbol(fir: FirBackingField): KtFirBackingFieldSymbol {
|
||||
return backingFieldCache.cache(fir) {
|
||||
KtFirBackingFieldSymbol(fir.propertySymbol.fir, resolveState, token, this@KtSymbolByFirBuilder)
|
||||
KtFirBackingFieldSymbol(fir, resolveState, token, this@KtSymbolByFirBuilder)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+11
-1
@@ -35,10 +35,16 @@ internal class FirIdeRenderer private constructor(
|
||||
is FirConstructor -> renderConstructor(declaration)
|
||||
is FirPropertyAccessor -> renderPropertyAccessor(declaration)
|
||||
is FirSimpleFunction -> renderSimpleFunction(declaration)
|
||||
is FirBackingField -> renderBackingField()
|
||||
is FirEnumEntry -> renderEnumEntry(declaration)
|
||||
is FirProperty -> renderProperty(declaration)
|
||||
is FirValueParameter -> renderValueParameter(declaration)
|
||||
is FirField -> TODO()
|
||||
is FirField -> renderPropertyOrField(declaration)
|
||||
is FirErrorFunction -> error("FirErrorFunction should not be rendered")
|
||||
is FirErrorProperty -> error("FirErrorProperty should not be rendered")
|
||||
is FirAnonymousInitializer -> error("FirAnonymousInitializer should not be rendered")
|
||||
is FirFile -> error("FirFile should not be rendered")
|
||||
is FirTypeParameter -> renderTypeParameter(declaration)
|
||||
is FirAnonymousFunction -> TODO()
|
||||
is FirErrorFunction -> Unit
|
||||
is FirErrorProperty -> Unit
|
||||
@@ -46,6 +52,10 @@ internal class FirIdeRenderer private constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun PrettyPrinter.renderBackingField() {
|
||||
append("field")
|
||||
}
|
||||
|
||||
private fun PrettyPrinter.renderProperty(property: FirProperty) {
|
||||
renderAnnotationsAndModifiers(property)
|
||||
renderValVarPrefix(property)
|
||||
|
||||
+1
@@ -69,6 +69,7 @@ internal abstract class FirIdeRendererBase(
|
||||
is FirTypeParameter -> declaration.name
|
||||
is FirTypeAlias -> declaration.name
|
||||
is FirEnumEntry -> declaration.name
|
||||
is FirField -> declaration.name
|
||||
else -> TODO("Unexpected declaration ${declaration::class.qualifiedName}")
|
||||
}
|
||||
append(name.render())
|
||||
|
||||
+16
-12
@@ -5,33 +5,38 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.fir.symbols
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirModuleResolveState
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirBackingFieldSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
|
||||
import org.jetbrains.kotlin.analysis.api.fir.utils.firRef
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtBackingFieldSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirModuleResolveState
|
||||
import org.jetbrains.kotlin.fir.declarations.FirBackingField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
|
||||
internal class KtFirBackingFieldSymbol(
|
||||
propertyFir: FirProperty,
|
||||
fir: FirBackingField,
|
||||
resolveState: FirModuleResolveState,
|
||||
override val token: ValidityToken,
|
||||
private val builder: KtSymbolByFirBuilder
|
||||
) : KtBackingFieldSymbol() {
|
||||
private val propertyFirRef = firRef(propertyFir, resolveState)
|
||||
) : KtBackingFieldSymbol(), KtFirSymbol<FirBackingField> {
|
||||
override val firRef = firRef(fir, resolveState)
|
||||
|
||||
override val origin: KtSymbolOrigin
|
||||
get() = withValidityAssertion { super<KtBackingFieldSymbol>.origin }
|
||||
|
||||
override val returnType: KtType by cached {
|
||||
propertyFirRef.returnType(FirResolvePhase.TYPES, builder)
|
||||
firRef.returnType(FirResolvePhase.TYPES, builder)
|
||||
}
|
||||
|
||||
override val owningProperty: KtKotlinPropertySymbol by propertyFirRef.withFirAndCache { fir ->
|
||||
builder.buildSymbol(fir) as KtKotlinPropertySymbol
|
||||
override val owningProperty: KtKotlinPropertySymbol by firRef.withFirAndCache { fir ->
|
||||
builder.buildSymbol(fir.propertySymbol.fir) as KtKotlinPropertySymbol
|
||||
}
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtBackingFieldSymbol> {
|
||||
@@ -44,11 +49,10 @@ internal class KtFirBackingFieldSymbol(
|
||||
|
||||
other as KtFirBackingFieldSymbol
|
||||
|
||||
if (this.token != other.token) return false
|
||||
return this.propertyFirRef == other.propertyFirRef
|
||||
return this.firRef == other.firRef
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return propertyFirRef.hashCode() * 31 + token.hashCode()
|
||||
return firRef.hashCode() * 31 + token.hashCode()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user