library test /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

abstract class C<T extends core::Object? = dynamic> extends core::Object {
  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
  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%>
    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);
}

constants  {
  #C1 = constructor-tearoff self::C::•
}
