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(self::C::T x) → void;
  static factory •<T extends core::Object = dynamic>(self::C::•::T t) → self::C<self::C::•::T>
    let dynamic #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> {
  field self::CImpl::T t;
  constructor _(self::CImpl::T t) → void
    : self::CImpl::t = t, super core::Object::•()
    ;
  static factory •<T extends core::Object = dynamic>(self::CImpl::•::T t) → self::CImpl<self::CImpl::•::T>
    return new self::CImpl::_<dynamic>(t);
}
static method main() → dynamic {
  dynamic x = self::CImpl::•<dynamic>(42);
}
