library redirecting_factory_constructors.typeargs_test /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class X extends core::Object {
  synthetic constructor •() → self::X
    ;
}
class Y extends self::X {
  synthetic constructor •() → self::Y
    ;
}
class A extends core::Object {
  static final field dynamic _redirecting# = <dynamic>[self::A::redir]/*isLegacy*/;
  constructor •() → self::A
    ;
  static factory redir() → self::A
    return new self::B::•<self::Y>();
}
class B<T extends self::X> extends self::A {
  constructor •() → self::B<self::B::T>
    ;
}
static method main() → dynamic
  ;


Extra constant evaluation status:
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_typeargs_test.dart:15:7 -> ConstructorTearOffConstant(A.redir)
Extra constant evaluation: evaluated: 3, effectively constant: 1
