library;
import self as self;
import "dart:core" as core;

typedef Callback<contravariant T extends core::Object* = dynamic> = (T*) →* void;
class Foo<T extends core::Object* = dynamic> extends core::Object {
  final field self::Foo::T* finalField;
  final field (self::Foo::T*) →* void callbackField;
  generic-covariant-impl field self::Foo::T* mutableField = null;
  field (self::Foo::T*) →* void mutableCallbackField = null;
  constructor •(self::Foo::T* finalField, (self::Foo::T*) →* void callbackField) → self::Foo<self::Foo::T*>*
    : self::Foo::finalField = finalField, self::Foo::callbackField = callbackField, super core::Object::•()
    ;
  method method(generic-covariant-impl self::Foo::T* x) → void {}
  set setter(generic-covariant-impl self::Foo::T* x) → void {}
  method withCallback((self::Foo::T*) →* void callback) → void {
    callback.call(this.{self::Foo::finalField});
  }
}
static method main() → dynamic {
  self::Foo<core::int*>* fooInt = new self::Foo::•<core::int*>(1, (core::int* x) → core::Null? {});
  fooInt.{self::Foo::method}(3);
  fooInt.{self::Foo::setter} = 3;
  fooInt.{self::Foo::withCallback}((core::int* x) → core::Null? {});
  fooInt.{self::Foo::withCallback}((core::num* x) → core::Null? {});
  fooInt.{self::Foo::mutableField} = 3;
  fooInt.{self::Foo::mutableCallbackField} = (core::int* x) → core::Null? {};
  self::Foo<core::num*>* fooNum = fooInt;
  fooNum.{self::Foo::method}(3);
  fooNum.{self::Foo::method}(2.5);
  fooNum.{self::Foo::setter} = 3;
  fooNum.{self::Foo::setter} = 2.5;
  fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
  fooNum.{self::Foo::mutableField} = 3;
  fooNum.{self::Foo::mutableField} = 2.5;
  let final self::Foo<core::num*>* #t1 = fooNum in let final core::int* #t2 = 3 in (#t1.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(#t2);
  let final self::Foo<core::num*>* #t3 = fooNum in let final core::double* #t4 = 2.5 in (#t3.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(#t4);
  fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
}
