// 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
/*@testedFeatures=inference*/
library test;

abstract class I1 {
  void f(int i);
}

abstract class I2 {
  void f(Object o);
}

abstract class C implements I1, I2 {}

class D extends C {
  void f(Object o) {}
}

abstract class E implements I2, I1 {}

class F extends E {
  void f(Object o) {}
}

void g1(C c) {
  c. /*@target=C.f*/ f('hi');
}

void g2(E e) {
  e. /*@target=I2.f*/ f('hi');
}

main() {
  g1(new D());
  g2(new F());
}
