// 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

import "package:expect/expect.dart";

class A {}

class B extends A {}

class C {
  void f(B x, B y) {}
}

abstract class I1<T> {
  void f(T x, B y);
}

// D contains a forwarding stub for f which ensures that `x` is type checked.
class D extends C implements I1<B> {}

abstract class I2<T> {
  void f(B x, T y);
}

// E contains a forwarding stub for f which ensures that `y` is type checked.
class E extends D implements I2<B> {}

main() {
  E e = new E();
  C c = e;
  I1<A> i1 = e;
  D d = e;
  I2<A> i2 = e;
  A a = new A();
  B b = new B();
  c.f(b, b); // No error
  i1.f(b, b); // No error
  d.f(b, b); // No error
  i2.f(b, b); // No error
  e.f(b, b); // No error
  Expect.throwsTypeError(() {
    i1.f(a, b);
  });
  Expect.throwsTypeError(() {
    d.f(a, b);
  });
  Expect.throwsTypeError(() {
    i2.f(b, a);
  });
  Expect.throwsTypeError(() {
    e.f(a, b);
  });
  Expect.throwsTypeError(() {
    e.f(b, a);
  });
}
