From e4ad6698fb78911167a166bd73cd3fffcde416b6 Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Thu, 19 Mar 2020 00:36:36 +0300 Subject: [PATCH] [IR] Fix fake override checkers --- .../src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt | 2 +- .../ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt index 7728ce3890b..496b052254a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt @@ -65,7 +65,7 @@ val IrValueParameter.isVararg get() = this.varargElementType != null val IrFunction.isSuspend get() = this is IrSimpleFunction && this.isSuspend -val IrFunction.isReal get() = this.origin != IrDeclarationOrigin.FAKE_OVERRIDE +val IrFunction.isReal get() = !(this is IrSimpleFunction && isFakeOverride) fun IrSimpleFunction.overrides(other: IrSimpleFunction): Boolean { if (this == other) return true diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index 471cb17ba84..f5a90d682d5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -386,11 +386,13 @@ fun IrAnnotationContainer.hasAnnotation(symbol: IrClassSymbol) = val IrConstructor.constructedClassType get() = (parent as IrClass).thisReceiver?.type!! fun IrFunction.isFakeOverriddenFromAny(): Boolean { - if (origin != IrDeclarationOrigin.FAKE_OVERRIDE) { + val simpleFunction = this as? IrSimpleFunction ?: return false + + if (!simpleFunction.isFakeOverride) { return (parent as? IrClass)?.thisReceiver?.type?.isAny() ?: false } - return (this as IrSimpleFunction).overriddenSymbols.all { it.owner.isFakeOverriddenFromAny() } + return simpleFunction.overriddenSymbols.all { it.owner.isFakeOverriddenFromAny() } } fun IrCall.isSuperToAny() = superQualifierSymbol?.let { this.symbol.owner.isFakeOverriddenFromAny() } ?: false