library;
import self as self;
import "dart:core" as core;

import "package:expect/expect.dart";

abstract class A<T extends core::Object* = dynamic> extends core::Object {
  static field dynamic _redirecting# = <dynamic>[self::A::•];
  constructor empty() → self::A<self::A::T*>*
    ;
  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::List<self::A::•::T*>* #typeArg1 = null in invalid-expression;
}
abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
  static field dynamic _redirecting# = <dynamic>[self::B::•];
  constructor empty() → self::B<self::B::U*, self::B::W*>*
    ;
  static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
    let dynamic #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::Map<self::B::•::U*, self::B::•::W*>* #typeArg2 = null in invalid-expression;
}
class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
  constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
    ;
  method toString() → core::String*
    ;
}
static method main() → dynamic
  ;
