From 8ae9e7a106a74cd458505174eb724a402b694efc Mon Sep 17 00:00:00 2001 From: pyos Date: Wed, 10 Apr 2019 15:45:41 +0200 Subject: [PATCH] JVM_IR: unwrap fake overrides when computing property signatures --- .../kotlin/backend/jvm/lower/PropertyReferenceLowering.kt | 5 ++++- .../codegen/box/reflection/builtins/enumNameOrdinal.kt | 1 - .../box/reflection/properties/genericOverriddenProperty.kt | 1 - 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt index c7cf547d000..eb317bb38c7 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt @@ -56,9 +56,12 @@ internal class PropertyReferenceLowering(val context: JvmBackendContext) : Class private val IrMemberAccessExpression.field: IrFieldSymbol? get() = (this as? IrPropertyReference)?.field + private val IrSimpleFunction.signature: String + get() = context.state.typeMapper.mapSignatureSkipGeneric(collectRealOverrides().first().descriptor).toString() + private val IrMemberAccessExpression.signature: String get() = localPropertyIndices[getter]?.let { "" } - ?: getter?.owner?.let { context.state.typeMapper.mapSignatureSkipGeneric(it.descriptor).toString() } + ?: (getter?.owner as? IrSimpleFunction)?.signature // Plain Java fields do not have a getter, but can be referenced nonetheless. The signature should be // the one that a getter would have, if it existed. ?: TODO("plain Java field signature") diff --git a/compiler/testData/codegen/box/reflection/builtins/enumNameOrdinal.kt b/compiler/testData/codegen/box/reflection/builtins/enumNameOrdinal.kt index 8a0a4fe5e71..4e97f9c22df 100644 --- a/compiler/testData/codegen/box/reflection/builtins/enumNameOrdinal.kt +++ b/compiler/testData/codegen/box/reflection/builtins/enumNameOrdinal.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR // IGNORE_BACKEND: JS_IR, JS, NATIVE // WITH_REFLECT diff --git a/compiler/testData/codegen/box/reflection/properties/genericOverriddenProperty.kt b/compiler/testData/codegen/box/reflection/properties/genericOverriddenProperty.kt index f3f4ab72d5b..f2bfcf46290 100644 --- a/compiler/testData/codegen/box/reflection/properties/genericOverriddenProperty.kt +++ b/compiler/testData/codegen/box/reflection/properties/genericOverriddenProperty.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR // IGNORE_BACKEND: JS_IR // TODO: muted automatically, investigate should it be ran for JS or not // IGNORE_BACKEND: JS, NATIVE