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>[self::C::•]/*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 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%>
    ;
  static factory •<T extends core::Object? = dynamic>(self::CImpl::•::T% t) → self::CImpl<self::CImpl::•::T%>
    ;
}
static method main() → dynamic
  ;


Extra constant evaluation status:
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///constructors_infer_from_arguments_redirecting_factory_to_factory.dart:8:16 -> ConstructorTearOffConstant(C.)
Extra constant evaluation: evaluated: 4, effectively constant: 1
