d3bd06d4e8
When a member in the interface of a non-abstract class is found to have an implementation with the correct name which does not override the representative declaration of the member in the interface (and thus has not been checked against that member for override validity), call the override check to check interface validity. Override relations thus checked produce an extra context message explaining that the override relation must hold because both members are inherited by a non-abstract class. Fixes https://github.com/dart-lang/sdk/issues/32014 Change-Id: I955f057e35fa30f33c19da37c9cea1262042431c Reviewed-on: https://dart-review.googlesource.com/c/74642 Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
31 lines
581 B
Dart
31 lines
581 B
Dart
// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
class Thing {}
|
|
|
|
class SubThing extends Thing {
|
|
void sub() {}
|
|
}
|
|
|
|
class A {
|
|
Thing get thing => new Thing();
|
|
}
|
|
|
|
abstract class B implements A {
|
|
@override
|
|
SubThing get thing;
|
|
}
|
|
|
|
class C extends A //
|
|
with //# mixin: compile-time error
|
|
B //# mixin: continued
|
|
{}
|
|
|
|
main() {
|
|
new C()
|
|
.thing //
|
|
.sub() //# mixin: continued
|
|
;
|
|
}
|