@@ -135,7 +135,7 @@ object ParamOverridingCheck:
135
135
thisV.callConstructor(ref.symbol, args)
136
136
137
137
case _ =>
138
- report.error(" Unexpected rhs = " + ddef.rhs.show, ddef.rhs)
138
+ report.error(" Unexpected rhs = " + ddef.rhs.show + " in " + cls.show , ddef.rhs)
139
139
140
140
}
141
141
end extension
@@ -146,7 +146,7 @@ object ParamOverridingCheck:
146
146
* Check the specified concrete classes
147
147
*/
148
148
def checkClasses (concreteClasses : List [ClassSymbol ])(using Context ): Unit =
149
- for classSym <- concreteClasses if overrideClassParams(classSym) do
149
+ for classSym <- concreteClasses do
150
150
val thisRef = ThisRef (classSym, fields = mutable.Map .empty)
151
151
val tpl = classSym.defTree.asInstanceOf [TypeDef ].rhs.asInstanceOf [Template ]
152
152
for param <- tpl.constr.termParamss.flatten yield
@@ -331,33 +331,18 @@ object ParamOverridingCheck:
331
331
// check parameter access semantics
332
332
for
333
333
paramSym <- klass.paramGetters
334
- overridingSym = paramSym.overridingSymbol (thisV.klass)
335
- if overridingSym.exists
334
+ overridingSym = paramSym.matchingMember (thisV.klass.thisType )
335
+ if overridingSym.exists && overridingSym != paramSym && overridingSym.is( Flags . Override )
336
336
do
337
337
// println(paramSym.show + " is overridden in " + thisV.klass)
338
338
if ! overridingSym.is(Flags .ParamAccessor ) then
339
- report.warning(" Overriding parameter " + paramSym.show + " in " + klass.show + " as non-parameter in " + thisV.klass .show, overridingSym.defTree)
339
+ report.warning(" Overriding parameter " + paramSym.show + " in " + klass.show + " as non-parameter in " + overridingSym.owner .show, overridingSym.defTree)
340
340
else
341
341
val overridingValue = thisV.field(overridingSym)
342
342
// println(overridingSym.show + " in " + thisV.klass + " = " + overridingValue)
343
343
// println(paramSym.show + " in " + klass + " = " + thisV.field(paramSym))
344
344
if thisV.field(paramSym) != overridingValue then
345
- report.warning(" Incorrect overriding: " + paramSym.show + " in " + klass.show + " has a different value from " + overridingSym.show + " in " + thisV.klass .show, overridingValue.source )
345
+ report.warning(" Incorrect overriding: " + paramSym.show + " in " + klass.show + " has a different value from " + overridingSym.show + " in " + overridingSym.owner .show, overridingSym.defTree )
346
346
347
347
thisV
348
348
}
349
-
350
- // ------------------------- Helper methods ----------------------------------
351
-
352
- /** Does the given class override any class parameter? */
353
- def overrideClassParams (classSym : ClassSymbol )(using Context ): Boolean =
354
- classSym.info.baseClasses match
355
- case _ :: inherited =>
356
- inherited.exists(superCls => anyClassParameterOverridenBy(superCls, by = classSym))
357
-
358
- case Nil =>
359
- false
360
-
361
- /** Does the class `classSym` have any class parameter overridden by the class `by`? */
362
- def anyClassParameterOverridenBy (classSym : ClassSymbol , by : ClassSymbol )(using Context ): Boolean =
363
- classSym.paramGetters.exists(_.overridingSymbol(by).exists)
0 commit comments