library redirecting_factory_constructors.typeparambounds_test;
import self as self;
import "dart:core" as core;

class X extends core::Object {
  synthetic constructor •() → self::X
    : super core::Object::•()
    ;
}
class Y extends self::X {
  synthetic constructor •() → self::Y
    : super self::X::•()
    ;
}
class A<T extends core::Object = dynamic, S extends self::A::T = dynamic> extends core::Object {
  static field dynamic _redirecting# = <dynamic>[self::A::redir];
  constructor •(self::A::T t, self::A::S s) → self::A<self::A::T, self::A::S>
    : super core::Object::•()
    ;
  static factory redir<T extends core::Object = dynamic, S extends self::A::redir::T = dynamic>(self::A::redir::T t, self::A::redir::S s) → self::A<self::A::redir::T, self::A::redir::S>
    let<BottomType> #redirecting_factory = self::A::• in let self::A::redir::T #typeArg0 = null in let self::A::redir::S #typeArg1 = null in invalid-expression;
}
static method main() → dynamic {
  new self::A::•<self::X, self::Y>(new self::X::•(), new self::Y::•());
}
