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

typedef F<T extends core::Object = dynamic> = (T) → void;
class B<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::B<self::B::T>
    : super core::Object::•()
    ;
  operator +(generic-covariant-impl self::B<self::B::T> other) → self::B<self::B::T>
    return null;
}
class C<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T>
    : super core::Object::•()
    ;
  get x() → self::B<(self::C::T) → void>
    return null;
  set x(self::B<(self::C::T) → void> value) → void {}
}
static method test(self::C<core::num> c) → void {
  let final dynamic #t1 = c in #t1.x = #t1.x.+(new self::B::•<core::num>());
  dynamic y = let final dynamic #t2 = c in #t2.x = #t2.x.+(new self::B::•<core::num>());
  let final dynamic #t3 = c in #t3.x.==(null) ? #t3.x = new self::B::•<core::num>() : null;
  dynamic z = let final dynamic #t4 = c in let final dynamic #t5 = #t4.x in #t5.==(null) ? #t4.x = new self::B::•<core::num>() : #t5;
}
static method main() → dynamic {}
