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() → dynamic
    ;
}
static method main() → dynamic
  ;
