| 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) {} |