@@ -336,10 +336,21 @@ object RefChecks {
336336 next == other || isInheritedAccessor(next, other)
337337 }
338338
339+ /** Detect any param section where params in last position do not agree isRepeatedParam.
340+ */
339341 def incompatibleRepeatedParam (member : Symbol , other : Symbol ): Boolean =
340- member.is(Method , butNot = JavaDefined ) && other.is(Method , butNot = JavaDefined ) && atPhase(typerPhase) {
341- member.info.paramInfoss.nestedZipExists(other.info.paramInfoss)(_.isRepeatedParam != _.isRepeatedParam)
342- }
342+ def loop (mParamInfoss : List [List [Type ]], oParamInfoss : List [List [Type ]]): Boolean =
343+ mParamInfoss match
344+ case Nil => false
345+ case h :: t =>
346+ oParamInfoss match
347+ case Nil => false
348+ case h2 :: t2 => h.nonEmpty && h2.nonEmpty && h.last.isRepeatedParam != h2.last.isRepeatedParam
349+ || loop(t, t2)
350+ member.is(Method , butNot = JavaDefined )
351+ && other.is(Method , butNot = JavaDefined )
352+ && atPhase(typerPhase):
353+ loop(member.info.paramInfoss, other.info.paramInfoss)
343354
344355 /* Check that all conditions for overriding `other` by `member`
345356 * of class `clazz` are met.
@@ -502,7 +513,7 @@ object RefChecks {
502513 else if member.is(Exported ) then
503514 overrideError(" cannot override since it comes from an export" )
504515 else if incompatibleRepeatedParam(member, other) then
505- overrideError( " cannot override because erased signatures conflict in repeated parameter " )
516+ report.error( DoubleDefinition (member, other, clazz), member.srcPos )
506517 else
507518 overrideError(" needs `override` modifier" )
508519 else if (other.is(AbsOverride ) && other.isIncompleteIn(clazz) && ! member.is(AbsOverride ))
0 commit comments