Ignore deserialized fake-override fields

Fix #1748
This commit is contained in:
Svyatoslav Scherbina
2018-07-03 14:49:32 +03:00
committed by SvyatoslavScherbina
parent dfc01847c5
commit 627d28db8a
2 changed files with 7 additions and 2 deletions
@@ -93,6 +93,7 @@ fun IrClass.getSuperInterfaces() = this.superClasses.map { it.owner }.filter { i
val IrProperty.konanBackingField: IrField?
get() {
assert(this.isReal)
this.backingField?.let { return it }
(this.descriptor as? DeserializedPropertyDescriptor)?.backingField?.let { backingFieldDescriptor ->
@@ -116,6 +117,10 @@ val IrField.containingClass get() = this.parent as? IrClass
val IrFunction.isReal get() = this.origin != IrDeclarationOrigin.FAKE_OVERRIDE
// Note: psi2ir doesn't set `origin = FAKE_OVERRIDE` for fields and properties yet.
val IrProperty.isReal: Boolean get() = this.descriptor.kind.isReal
val IrField.isReal: Boolean get() = this.descriptor.kind.isReal
val IrSimpleFunction.isOverridable: Boolean
get() = visibility != Visibilities.PRIVATE
&& modality != Modality.FINAL
@@ -127,8 +127,8 @@ private fun Context.getDeclaredFields(classDescriptor: ClassDescriptor): List<Ir
val irClass = classDescriptor
val fields = irClass.declarations.mapNotNull {
when (it) {
is IrField -> it
is IrProperty -> it.konanBackingField
is IrField -> it.takeIf { it.isReal }
is IrProperty -> it.takeIf { it.isReal }?.konanBackingField
else -> null
}
}