library;
//
// Problems in library:
//
// pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Couldn't find constructor 'Missing'.
//   factory A.c() = Missing;
//                   ^
//
// pkg/front_end/testcases/rasta/generic_factory.dart:16:11: Error: Redirection constructor target not found: 'Missing'
//   factory A.c() = Missing;
//           ^
//
// pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
//  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
//  - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
//  - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
//   factory A.b() = B<C1>.a;
//                   ^
//
// pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
//  - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
//  - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
//  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
//   factory B.b() = C<C2>;
//                   ^
//
// pkg/front_end/testcases/rasta/generic_factory.dart:16:11: Error: Method not found: 'Missing'.
//   factory A.c() = Missing;
//           ^^^^^^^
//
import self as self;
import "dart:core" as core;

class C1 extends core::Object {
  synthetic constructor •() → self::C1*
    : super core::Object::•()
    ;
}
class C2 extends core::Object {
  synthetic constructor •() → self::C2*
    : super core::Object::•()
    ;
}
class C3 extends core::Object {
  synthetic constructor •() → self::C3*
    : super core::Object::•()
    ;
}
class A<T extends core::Object* = dynamic> extends core::Object {
  static field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
  constructor internal() → self::A<self::A::T*>*
    : super core::Object::•()
    ;
  static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
    let <S extends core::Object* = dynamic>() →* self::B<self::B::a::S*>* #redirecting_factory = self::B::a in let self::A::a::T* #typeArg0 = null in invalid-expression;
  static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
    let <S extends core::Object* = dynamic>() →* self::B<self::B::a::S*>* #redirecting_factory = self::B::a in let self::C1* #typeArg0 = null in invalid-expression;
  static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
    let core::String* #redirecting_factory = "Missing" in invalid-expression;
}
class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
  static field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
  constructor internal() → self::B<self::B::S*>*
    : super self::A::internal()
    ;
  static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
    let<BottomType> #redirecting_factory = self::C::• in let self::B::a::S* #typeArg0 = null in invalid-expression;
  static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
    let<BottomType> #redirecting_factory = self::C::• in let self::C2* #typeArg0 = null in invalid-expression;
}
class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
  constructor •() → self::C<self::C::U*>*
    : super self::B::internal()
    ;
}
static method main() → dynamic {
  new self::C::•<self::C3*>();
  new self::C::•<self::C1*>();
  new self::C::•<self::C3*>();
  new self::C::•<self::C2*>();
  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:11: Error: Method not found: 'Missing'.
  factory A.c() = Missing;
          ^^^^^^^";
}
