blob: e415a1ff5715c7371a7debab4466f796da8ea0cc [file] [log] [blame]
// Copyright (c) 2017, 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.
// @dart=2.9
library test;
class A {}
class B extends A {}
class C extends B {}
abstract class D {
A foo();
abstract class E {
B foo();
abstract class F {
Object foo();
// class G inherits E::foo, since its type is a subtype of the others. Since
// the kernel's algorithm for resolving inheritance uses the first member found,
// the front end will insert a forwarding stub in class G to ensure that the
// correct type is inherited.
abstract class G extends Object implements D, E, F {}
class H extends G {
C foo() => new C();
G bar() => new H();
// bar().foo resolves to G::foo, which is inherited from E::foo, so its return
// type is B. Note that the target is annotated as G::foo, since that is the
// forwarding stub.
var x = bar(). /**/ foo();
main() {}