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

abstract class C<T extends core::Object = dynamic> extends core::Object {
  static field dynamic _redirecting# = <dynamic>[self::C::•];
  abstract get t() → self::C::T;
  abstract set t(generic-covariant-impl self::C::T x) → void;
  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T>
    let<BottomType> #redirecting_factory = self::CImpl::• in let self::C::•::T #typeArg0 = null in invalid-expression;
}
class CImpl<T extends core::Object = dynamic> extends core::Object implements self::C<self::CImpl::T> {
  generic-covariant-impl 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);
}
