IR KT-46578 add IrProperty#overriddenSymbols

This commit is contained in:
Dmitry Petrov
2021-05-11 16:23:27 +03:00
committed by teamcityserver
parent dc9d5cdf35
commit 53c1de172f
91 changed files with 1165 additions and 22 deletions
@@ -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")
@@ -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?
@@ -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) }
)
}
@@ -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()
}
@@ -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)
@@ -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,
)
}