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

class C extends core::Object {
  static field dynamic _redirecting# = <dynamic>[self::C::fact2];
  constructor •() → self::C*
    ;
  constructor nonFact() → self::C*
    ;
  constructor nonFact2() → self::C*
    ;
  static factory fact() → self::C*
    ;
  static factory fact2() → self::C*
    let dynamic #redirecting_factory = self::D::• in invalid-expression;
  static method staticFunction(core::int* i) → void
    ;
}
class D extends self::C {
  synthetic constructor •() → self::D*
    ;
}
static method topLevelFunction(core::int* i) → void
  ;
static method bad() → dynamic
  ;
static method ok() → dynamic
  ;
static method main() → dynamic
  ;
