FIR: record use of backing field symbol to indeed add a backing field
This commit is contained in:
committed by
Mikhail Glukhikh
parent
0cc3762f9a
commit
3e9ac75cfc
+4
-2
@@ -676,8 +676,10 @@ class Fir2IrDeclarationStorage(
|
||||
val setter = property.setter
|
||||
// TODO: this checks are very preliminary, FIR resolve should determine backing field presence itself
|
||||
if (property.isConst || (property.modality != Modality.ABSTRACT && (irParent !is IrClass || !irParent.isInterface))) {
|
||||
if (initializer != null || getter is FirDefaultPropertyGetter ||
|
||||
property.isVar && setter is FirDefaultPropertySetter
|
||||
if (initializer != null ||
|
||||
getter is FirDefaultPropertyGetter ||
|
||||
property.isVar && setter is FirDefaultPropertySetter ||
|
||||
property.backingFieldSymbol.isReferenced
|
||||
) {
|
||||
backingField = createBackingField(
|
||||
property, IrDeclarationOrigin.PROPERTY_BACKING_FIELD, descriptor,
|
||||
|
||||
@@ -515,6 +515,7 @@ class FirCallResolver(
|
||||
val candidate = candidates.single()
|
||||
val coneSymbol = candidate.symbol
|
||||
if (coneSymbol is FirBackingFieldSymbol) {
|
||||
coneSymbol.isReferenced = true
|
||||
return buildBackingFieldReference {
|
||||
this.source = source
|
||||
resolvedSymbol = coneSymbol
|
||||
|
||||
@@ -32,7 +32,10 @@ open class FirPropertySymbol(
|
||||
constructor(name: Name) : this(CallableId(name))
|
||||
}
|
||||
|
||||
class FirBackingFieldSymbol(callableId: CallableId) : FirVariableSymbol<FirProperty>(callableId)
|
||||
class FirBackingFieldSymbol(
|
||||
callableId: CallableId,
|
||||
var isReferenced: Boolean = false
|
||||
) : FirVariableSymbol<FirProperty>(callableId)
|
||||
|
||||
class FirDelegateFieldSymbol<D : FirVariable<D>>(callableId: CallableId) : FirVariableSymbol<D>(callableId) {
|
||||
val delegate: FirExpression
|
||||
|
||||
-1
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
abstract class A {
|
||||
val b = B("O")
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
class A {
|
||||
val value: String
|
||||
get() = field + "K"
|
||||
|
||||
Reference in New Issue
Block a user