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

abstract class C<T extends core::Object? = dynamic> extends core::Object {
  abstract get t() → self::C::T%;
  abstract set t(covariant-by-class self::C::T% x) → void;
  static factory •<T extends core::Object? = dynamic>(self::C::•::T% t) → self::C<self::C::•::T%> /* redirection-target: self::CImpl::•<self::C::•::T%>*/
    return new self::CImpl::•<self::C::•::T%>(t);
}
class CImpl<T extends core::Object? = dynamic> extends core::Object implements self::C<self::CImpl::T%> {
  covariant-by-class field self::CImpl::T% t;
  constructor •(self::CImpl::T% t) → self::CImpl<self::CImpl::T%>
    : self::CImpl::t = t, super core::Object::•()
    ;
}
static method main() → dynamic {
  self::C<core::int> x = new self::CImpl::•<core::int>(42);
}
