@@ -336,10 +336,21 @@ object RefChecks {
336
336
next == other || isInheritedAccessor(next, other)
337
337
}
338
338
339
+ /** Detect any param section where params in last position do not agree isRepeatedParam.
340
+ */
339
341
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)
343
354
344
355
/* Check that all conditions for overriding `other` by `member`
345
356
* of class `clazz` are met.
@@ -502,7 +513,7 @@ object RefChecks {
502
513
else if member.is(Exported ) then
503
514
overrideError(" cannot override since it comes from an export" )
504
515
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 )
506
517
else
507
518
overrideError(" needs `override` modifier" )
508
519
else if (other.is(AbsOverride ) && other.isIncompleteIn(clazz) && ! member.is(AbsOverride ))
0 commit comments