IR KT-46578 add IrProperty#overriddenSymbols
This commit is contained in:
committed by
teamcityserver
parent
dc9d5cdf35
commit
53c1de172f
+12
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.declarations.persistent.carriers.Carrier
|
||||
import org.jetbrains.kotlin.ir.declarations.persistent.carriers.PropertyCarrier
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
@@ -102,6 +103,17 @@ internal abstract class PersistentIrPropertyCommon(
|
||||
}
|
||||
}
|
||||
|
||||
override var overriddenSymbolsField: List<IrPropertySymbol> = emptyList()
|
||||
|
||||
override var overriddenSymbols: List<IrPropertySymbol>
|
||||
get() = getCarrier().overriddenSymbolsField
|
||||
set(v) {
|
||||
if (overriddenSymbols !== v) {
|
||||
setCarrier()
|
||||
overriddenSymbolsField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var metadata: MetadataSource? = null
|
||||
|
||||
@Suppress("LeakingThis")
|
||||
|
||||
+6
-2
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.ir.declarations.IrField
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
|
||||
@@ -22,6 +23,7 @@ internal interface PropertyCarrier : DeclarationCarrier{
|
||||
val getterSymbolField: IrSimpleFunctionSymbol?
|
||||
val setterField: IrSimpleFunction?
|
||||
val setterSymbolField: IrSimpleFunctionSymbol?
|
||||
val overriddenSymbolsField: List<IrPropertySymbol>
|
||||
|
||||
override fun clone(): PropertyCarrier {
|
||||
return PropertyCarrierImpl(
|
||||
@@ -31,7 +33,8 @@ internal interface PropertyCarrier : DeclarationCarrier{
|
||||
annotationsField,
|
||||
backingFieldSymbolField,
|
||||
getterSymbolField,
|
||||
setterSymbolField
|
||||
setterSymbolField,
|
||||
overriddenSymbolsField
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -43,7 +46,8 @@ internal class PropertyCarrierImpl(
|
||||
override val annotationsField: List<IrConstructorCall>,
|
||||
override val backingFieldSymbolField: IrFieldSymbol?,
|
||||
override val getterSymbolField: IrSimpleFunctionSymbol?,
|
||||
override val setterSymbolField: IrSimpleFunctionSymbol?
|
||||
override val setterSymbolField: IrSimpleFunctionSymbol?,
|
||||
override val overriddenSymbolsField: List<IrPropertySymbol>
|
||||
) : PropertyCarrier {
|
||||
|
||||
override val backingFieldField: IrField?
|
||||
|
||||
+2
-1
@@ -236,7 +236,8 @@ internal abstract class IrCarrierDeserializer {
|
||||
proto.annotationList.map { deserializeAnnotation(it) },
|
||||
if (proto.hasBackingField()) deserializeField(proto.backingField) else null,
|
||||
if (proto.hasGetter()) deserializeSimpleFunction(proto.getter) else null,
|
||||
if (proto.hasSetter()) deserializeSimpleFunction(proto.setter) else null
|
||||
if (proto.hasSetter()) deserializeSimpleFunction(proto.setter) else null,
|
||||
proto.overriddenSymbolsList.map { deserializePropertySymbol(it) }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -213,6 +213,7 @@ internal abstract class IrCarrierSerializer {
|
||||
carrier.backingFieldSymbolField?.let { proto.setBackingField(serializeField(it)) }
|
||||
carrier.getterSymbolField?.let { proto.setGetter(serializeSimpleFunction(it)) }
|
||||
carrier.setterSymbolField?.let { proto.setSetter(serializeSimpleFunction(it)) }
|
||||
proto.addAllOverriddenSymbols(carrier.overriddenSymbolsField.map { serializePropertySymbol(it) })
|
||||
return proto.build().toByteArray()
|
||||
}
|
||||
|
||||
|
||||
+3
@@ -152,6 +152,9 @@ internal object PersistentIrGenerator {
|
||||
val simpleFunctionProto = Proto("int64", "simpleFunction", +"Long", IrSimpleFunctionSymbol)
|
||||
val simpleFunctionSymbolListProto =
|
||||
Proto("int64", "simpleFunctionSymbol", +"Long", IrSimpleFunctionSymbol, fieldKind = FieldKind.REPEATED)
|
||||
val propertySymbolListProto =
|
||||
Proto("int64", "propertySymbol", +"Long", IrPropertySymbol, fieldKind = FieldKind.REPEATED)
|
||||
|
||||
val fieldProto = Proto("int64", "field", +"Long", IrFieldSymbol)
|
||||
|
||||
val visibilityProto = Proto(null, "visibility", +"Long", DescriptorVisibility)
|
||||
|
||||
+8
@@ -30,6 +30,11 @@ internal fun PersistentIrGenerator.generateProperty() {
|
||||
symbolToDeclaration = +"?.owner",
|
||||
declarationToSymbol = +"?.symbol"
|
||||
)
|
||||
val overriddenSymbolsField = Field(
|
||||
"overriddenSymbols",
|
||||
+"List<" + IrPropertySymbol + ">",
|
||||
propertySymbolListProto
|
||||
)
|
||||
|
||||
writeFile("PersistentIrPropertyCommon.kt", renderFile("org.jetbrains.kotlin.ir.declarations.persistent") {
|
||||
lines(
|
||||
@@ -55,6 +60,7 @@ internal fun PersistentIrGenerator.generateProperty() {
|
||||
backingFieldField.toPersistentField(+"null"),
|
||||
getterField.toPersistentField(+"null"),
|
||||
setterField.toPersistentField(+"null"),
|
||||
overriddenSymbolsField.toPersistentField(+"emptyList()"),
|
||||
+"override var metadata: " + MetadataSource + "? = null",
|
||||
lines(
|
||||
+"@Suppress(\"LeakingThis\")",
|
||||
@@ -71,6 +77,7 @@ internal fun PersistentIrGenerator.generateProperty() {
|
||||
backingFieldField,
|
||||
getterField,
|
||||
setterField,
|
||||
overriddenSymbolsField,
|
||||
)()
|
||||
})
|
||||
|
||||
@@ -79,5 +86,6 @@ internal fun PersistentIrGenerator.generateProperty() {
|
||||
backingFieldField,
|
||||
getterField,
|
||||
setterField,
|
||||
overriddenSymbolsField,
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user