Fix overload resolution ambiguity on *Array.clone() with runtime 1.0
#KT-16371 Fixed
This commit is contained in:
+7
@@ -107,6 +107,12 @@ open class JvmBuiltInsSettings(
|
|||||||
|
|
||||||
override fun getFunctions(name: Name, classDescriptor: DeserializedClassDescriptor): Collection<SimpleFunctionDescriptor> {
|
override fun getFunctions(name: Name, classDescriptor: DeserializedClassDescriptor): Collection<SimpleFunctionDescriptor> {
|
||||||
if (name == CloneableClassScope.CLONE_NAME && KotlinBuiltIns.isArrayOrPrimitiveArray(classDescriptor)) {
|
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(
|
return listOf(createCloneForArray(
|
||||||
classDescriptor, cloneableType.memberScope.getContributedFunctions(name, NoLookupLocation.FROM_BUILTINS).single()
|
classDescriptor, cloneableType.memberScope.getContributedFunctions(name, NoLookupLocation.FROM_BUILTINS).single()
|
||||||
))
|
))
|
||||||
@@ -199,6 +205,7 @@ open class JvmBuiltInsSettings(
|
|||||||
setOwner(arrayClassDescriptor)
|
setOwner(arrayClassDescriptor)
|
||||||
setVisibility(Visibilities.PUBLIC)
|
setVisibility(Visibilities.PUBLIC)
|
||||||
setReturnType(arrayClassDescriptor.defaultType)
|
setReturnType(arrayClassDescriptor.defaultType)
|
||||||
|
setDispatchReceiverParameter(arrayClassDescriptor.thisAsReceiverParameter)
|
||||||
}.build()!!
|
}.build()!!
|
||||||
|
|
||||||
private fun SimpleFunctionDescriptor.isMutabilityViolation(isMutable: Boolean): Boolean {
|
private fun SimpleFunctionDescriptor.isMutabilityViolation(isMutable: Boolean): Boolean {
|
||||||
|
|||||||
Reference in New Issue
Block a user