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
|
val setter = property.setter
|
||||||
// TODO: this checks are very preliminary, FIR resolve should determine backing field presence itself
|
// 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 (property.isConst || (property.modality != Modality.ABSTRACT && (irParent !is IrClass || !irParent.isInterface))) {
|
||||||
if (initializer != null || getter is FirDefaultPropertyGetter ||
|
if (initializer != null ||
|
||||||
property.isVar && setter is FirDefaultPropertySetter
|
getter is FirDefaultPropertyGetter ||
|
||||||
|
property.isVar && setter is FirDefaultPropertySetter ||
|
||||||
|
property.backingFieldSymbol.isReferenced
|
||||||
) {
|
) {
|
||||||
backingField = createBackingField(
|
backingField = createBackingField(
|
||||||
property, IrDeclarationOrigin.PROPERTY_BACKING_FIELD, descriptor,
|
property, IrDeclarationOrigin.PROPERTY_BACKING_FIELD, descriptor,
|
||||||
|
|||||||
@@ -515,6 +515,7 @@ class FirCallResolver(
|
|||||||
val candidate = candidates.single()
|
val candidate = candidates.single()
|
||||||
val coneSymbol = candidate.symbol
|
val coneSymbol = candidate.symbol
|
||||||
if (coneSymbol is FirBackingFieldSymbol) {
|
if (coneSymbol is FirBackingFieldSymbol) {
|
||||||
|
coneSymbol.isReferenced = true
|
||||||
return buildBackingFieldReference {
|
return buildBackingFieldReference {
|
||||||
this.source = source
|
this.source = source
|
||||||
resolvedSymbol = coneSymbol
|
resolvedSymbol = coneSymbol
|
||||||
|
|||||||
@@ -32,7 +32,10 @@ open class FirPropertySymbol(
|
|||||||
constructor(name: Name) : this(CallableId(name))
|
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) {
|
class FirDelegateFieldSymbol<D : FirVariable<D>>(callableId: CallableId) : FirVariableSymbol<D>(callableId) {
|
||||||
val delegate: FirExpression
|
val delegate: FirExpression
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
abstract class A {
|
abstract class A {
|
||||||
val b = B("O")
|
val b = B("O")
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
class A {
|
class A {
|
||||||
val value: String
|
val value: String
|
||||||
get() = field + "K"
|
get() = field + "K"
|
||||||
|
|||||||
Reference in New Issue
Block a user