IR: IrField.isFakeOverride

This commit is contained in:
Dmitry Petrov
2019-10-23 18:02:40 +03:00
parent e9337ec8f2
commit edaa42ea46
10 changed files with 35 additions and 20 deletions
@@ -21,6 +21,7 @@ interface IrField :
val isFinal: Boolean
val isExternal: Boolean
val isStatic: Boolean
val isFakeOverride: Boolean
var initializer: IrExpressionBody?
@@ -43,7 +43,8 @@ class IrFieldImpl(
override val visibility: Visibility,
override val isFinal: Boolean,
override val isExternal: Boolean,
override val isStatic: Boolean
override val isStatic: Boolean,
override val isFakeOverride: Boolean
) : IrDeclarationBase(startOffset, endOffset, origin),
IrField {
@@ -60,7 +61,8 @@ class IrFieldImpl(
symbol.descriptor.name, type, visibility,
isFinal = !symbol.descriptor.isVar,
isExternal = symbol.descriptor.isEffectivelyExternal(),
isStatic = symbol.descriptor.dispatchReceiverParameter == null
isStatic = symbol.descriptor.dispatchReceiverParameter == null,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE
)
constructor(
@@ -34,6 +34,7 @@ class IrLazyField(
override val isFinal: Boolean,
override val isExternal: Boolean,
override val isStatic: Boolean,
override val isFakeOverride: Boolean,
stubGenerator: DeclarationStubGenerator,
typeTranslator: TypeTranslator
) : IrLazyDeclarationBase(startOffset, endOffset, origin, stubGenerator, typeTranslator),
@@ -50,11 +51,12 @@ class IrLazyField(
startOffset, endOffset, origin, symbol,
symbol.descriptor.name,
symbol.descriptor.visibility,
!symbol.descriptor.isVar,
symbol.descriptor.isEffectivelyExternal(),
symbol.descriptor.dispatchReceiverParameter == null,
stubGenerator,
typeTranslator
isFinal = !symbol.descriptor.isVar,
isExternal = symbol.descriptor.isEffectivelyExternal(),
isStatic = symbol.descriptor.dispatchReceiverParameter == null,
isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
stubGenerator = stubGenerator,
typeTranslator = typeTranslator
)
init {
@@ -243,9 +243,10 @@ open class DeepCopyIrTreeWithSymbols(
symbolRenamer.getFieldName(declaration.symbol),
declaration.type.remapType(),
declaration.visibility,
declaration.isFinal,
declaration.isExternal,
declaration.isStatic
isFinal = declaration.isFinal,
isExternal = declaration.isExternal,
isStatic = declaration.isStatic,
isFakeOverride = declaration.isFakeOverride
).apply {
transformAnnotations(declaration)
declaration.overriddenSymbols.mapTo(overriddenSymbols) {
@@ -431,7 +431,8 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
renderFlagsList(
"final".takeIf { isFinal },
"external".takeIf { isExternal },
"static".takeIf { isStatic }
"static".takeIf { isStatic },
"fake_override".takeIf { isFakeOverride }
)
override fun visitClass(declaration: IrClass, data: Nothing?): String =