From de2117663cd975e89f88be7a8f868b9af6b575d9 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 16 Feb 2017 14:04:37 +0300 Subject: [PATCH] Fix overload resolution ambiguity on *Array.clone() with runtime 1.0 #KT-16371 Fixed --- .../jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt index 39b429ba699..52b0c61742e 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt @@ -107,6 +107,12 @@ open class JvmBuiltInsSettings( override fun getFunctions(name: Name, classDescriptor: DeserializedClassDescriptor): Collection { if (name == CloneableClassScope.CLONE_NAME && KotlinBuiltIns.isArrayOrPrimitiveArray(classDescriptor)) { + // Do not create clone for arrays deserialized from metadata in the old (1.0) runtime, because clone is declared there anyway + if (classDescriptor.classProto.functionList.any { functionProto -> + classDescriptor.c.nameResolver.getName(functionProto.name) == CloneableClassScope.CLONE_NAME + }) { + return emptyList() + } return listOf(createCloneForArray( classDescriptor, cloneableType.memberScope.getContributedFunctions(name, NoLookupLocation.FROM_BUILTINS).single() )) @@ -199,6 +205,7 @@ open class JvmBuiltInsSettings( setOwner(arrayClassDescriptor) setVisibility(Visibilities.PUBLIC) setReturnType(arrayClassDescriptor.defaultType) + setDispatchReceiverParameter(arrayClassDescriptor.thisAsReceiverParameter) }.build()!! private fun SimpleFunctionDescriptor.isMutabilityViolation(isMutable: Boolean): Boolean {