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

class Cloneable<T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Cloneable<self::Cloneable::T*>*
    : super core::Object::•()
    ;
}
class Pair<T extends self::Cloneable<self::Pair::T>* = dynamic, U extends self::Cloneable<self::Pair::U>* = dynamic> extends core::Object {
  generic-covariant-impl field self::Pair::T* t;
  generic-covariant-impl field self::Pair::U* u;
  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
    : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
    ;
  constructor _() → self::Pair<self::Pair::T*, self::Pair::U*>*
    : self::Pair::u = null, self::Pair::t = null, super core::Object::•()
    ;
  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
    return new self::Pair::•<dynamic, dynamic>(this.{self::Pair::u}, this.{self::Pair::t});
}
static method main() → dynamic {
  final dynamic x = new self::Pair::_<dynamic, dynamic>();
}
