From d50c4d7211d2fa2617403b5edff75be669d20760 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 22 Nov 2018 13:01:32 +0300 Subject: [PATCH] Fix failing IR tests because of CCE in WrappedValueParameterDescriptor In previous commits, renderValueParameter began to calculate its containing declaration. However, WrappedValueParameterDescriptor assumes that parent of IrParameter is IrFunction, which is not true for dispatch receiver parameters. The correct fix would be not to create WrappedValueParameterDescriptor for dispatch receivers at all and use WrappedReceiverParameterDescriptor instead. In this fix, I just moved parameter' containing declaration calculation inside specific option which is usually false, thus hiding the found problem. --- .../kotlin/backend/common/descriptors/WrappedDescriptors.kt | 2 ++ .../org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt index 46a39d1fa8d..9df7a932815 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt @@ -88,6 +88,8 @@ abstract class WrappedCallableDescriptor( override fun getUserData(key: CallableDescriptor.UserDataKey?): V? = null } +// TODO: (Roman Artemev) do not create this kind of descriptor for dispatch receiver parameters +// WrappedReceiverParameterDescriptor should be used instead open class WrappedValueParameterDescriptor( annotations: Annotations = Annotations.EMPTY, sourceElement: SourceElement = SourceElement.NO_SOURCE diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index edf3e583ee8..68fdc00522f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -815,8 +815,7 @@ internal class DescriptorRendererImpl( renderModifier(builder, valueParameter.isCrossinline, "crossinline") renderModifier(builder, valueParameter.isNoinline, "noinline") - val containingDeclaration = valueParameter.containingDeclaration - if (renderAnnotationPropertiesInPrimaryConstructor && containingDeclaration.isAnnotationConstructor()) { + if (renderAnnotationPropertiesInPrimaryConstructor && valueParameter.containingDeclaration.isAnnotationConstructor()) { renderModifier(builder, actualPropertiesInPrimaryConstructor, "actual") renderModifier(builder, true, "val") }