Skip to content

Commit de21176

Browse files
committed
Fix overload resolution ambiguity on *Array.clone() with runtime 1.0
#KT-16371 Fixed
1 parent 9d11f0b commit de21176

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JvmBuiltInsSettings.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ open class JvmBuiltInsSettings(
107107

108108
override fun getFunctions(name: Name, classDescriptor: DeserializedClassDescriptor): Collection<SimpleFunctionDescriptor> {
109109
if (name == CloneableClassScope.CLONE_NAME && KotlinBuiltIns.isArrayOrPrimitiveArray(classDescriptor)) {
110+
// Do not create clone for arrays deserialized from metadata in the old (1.0) runtime, because clone is declared there anyway
111+
if (classDescriptor.classProto.functionList.any { functionProto ->
112+
classDescriptor.c.nameResolver.getName(functionProto.name) == CloneableClassScope.CLONE_NAME
113+
}) {
114+
return emptyList()
115+
}
110116
return listOf(createCloneForArray(
111117
classDescriptor, cloneableType.memberScope.getContributedFunctions(name, NoLookupLocation.FROM_BUILTINS).single()
112118
))
@@ -199,6 +205,7 @@ open class JvmBuiltInsSettings(
199205
setOwner(arrayClassDescriptor)
200206
setVisibility(Visibilities.PUBLIC)
201207
setReturnType(arrayClassDescriptor.defaultType)
208+
setDispatchReceiverParameter(arrayClassDescriptor.thisAsReceiverParameter)
202209
}.build()!!
203210

204211
private fun SimpleFunctionDescriptor.isMutabilityViolation(isMutable: Boolean): Boolean {

0 commit comments

Comments
 (0)