typedef ContraFunction<T> = void Function(T);
typedef InvFunction<T> = T Function(T);
class Contravariant<in T> {}
class Invariant<inout T> {}
class A<in T, out U, V> {
  final void Function(T)? field = null;
  void method(T t, void Function(U) u, V v) {}
  void method2(T x, [T? y]) {}
  void set x(T t) {}
  Map<U, Contravariant<V>> get mapContra => new Map<U, Contravariant<V>>();
  Map<U, ContraFunction<V>> get mapContraFn => new Map<U, ContraFunction<V>>();
  Map<U, Invariant<V>> get mapInv => new Map<U, Invariant<V>>();
  Map<U, InvFunction<V>> get mapInvFn => new Map<U, InvFunction<V>>();
}
class B<inout T> {
  T? x;
  T method(T x) => x;
  void set y(T x) {}
}
class C<in T> {
  final void Function(T)? field = null;
  void method(T x, [T? y]) {}
  void set x(T t) {}
}
abstract class D<T> {
  int method(T x);
}
class E<inout T> {
  final void Function(T) f;
  E(this.f);
  int method(T x) {}
}
class F<inout T> extends E<T> implements D<T> {
  F(void Function(T) f) : super(f);
}
class NoSuchMethod<inout T> implements B<T> {
  noSuchMethod(_) => 3;
}
main() {}
expect(expected, actual) {}
