@@ -97,18 +97,18 @@ object ParamOverridingCheck:
97
97
if ref.fieldInitialized(target) then
98
98
ref.field(target)
99
99
else
100
- Unknown (source)
100
+ Skolem (source)
101
101
else
102
102
if ref.klass.isSubClass(receiver.widenSingleton.classSymbol) then
103
103
report.error(" [Internal error] Unexpected resolution failure: ThisRef.klass = " + ref.klass.show + " , field = " + field.show, source)
104
- Unknown (source)
104
+ Skolem (source)
105
105
else
106
106
// This is possible due to incorrect type cast.
107
107
// See tests/init/pos/Type.scala
108
- Unknown (source)
108
+ Skolem (source)
109
109
110
110
case _ =>
111
- Unknown (source)
111
+ Skolem (source)
112
112
}
113
113
114
114
extension (thisV : ThisRef )
@@ -209,7 +209,7 @@ object ParamOverridingCheck:
209
209
Skolem (expr)
210
210
211
211
case _ =>
212
- Unknown (expr)
212
+ Skolem (expr)
213
213
214
214
/** Handle semantics of leaf nodes */
215
215
def eval (tp : Type , thisV : ThisRef , klass : ClassSymbol , source : Tree ): Contextual [Value ] = log(" evaluating " + tp.show, printer) {
@@ -225,9 +225,9 @@ object ParamOverridingCheck:
225
225
if enclosingClass == klass then
226
226
thisV.field(sym)
227
227
else
228
- Unknown (source)
228
+ Skolem (source)
229
229
else
230
- Unknown (source)
230
+ Skolem (source)
231
231
232
232
case tmref : TermRef =>
233
233
val cls = tmref.widenSingleton.classSymbol
@@ -248,7 +248,7 @@ object ParamOverridingCheck:
248
248
249
249
case _ =>
250
250
report.error(" [Internal error] unexpected type " + tp, source)
251
- Unknown (source)
251
+ Skolem (source)
252
252
}
253
253
254
254
/** Initialize part of an abstract object in `klass` of the inheritance chain */
@@ -331,17 +331,17 @@ object ParamOverridingCheck:
331
331
// check parameter access semantics
332
332
for
333
333
paramSym <- klass.paramGetters
334
- overridingSym = paramSym.matchingMember( thisV.klass.thisType)
335
- if overridingSym.exists && overridingSym ! = paramSym && overridingSym.is( Flags . Override )
334
+ subClass <- thisV.klass.baseClasses if subClass.isSubClass(klass) && subClass != klass
335
+ overridingSym = paramSym.overridingSymbol(subClass) if overridingSym.exists
336
336
do
337
337
// println(paramSym.show + " is overridden in " + thisV.klass)
338
338
if ! overridingSym.is(Flags .ParamAccessor ) then
339
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
- // println(overridingSym.show + " in " + thisV.klass + " = " + overridingValue)
343
- // println(paramSym.show + " in " + klass + " = " + thisV.field(paramSym))
344
342
if thisV.field(paramSym) != overridingValue then
343
+ // println(overridingSym.show + " in " + thisV.klass + " = " + overridingValue)
344
+ // println(paramSym.show + " in " + klass + " = " + thisV.field(paramSym))
345
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
0 commit comments