library;
import self as self;
import "dart:core" as core;
import "package:expect/expect.dart" as exp;

import "package:expect/expect.dart";

class A extends core::Object {
  constructor •() → self::A
    : super core::Object::•() {}
  static factory foo() → self::A /* redirection-target: self::C::bar */
    return self::C::bar();
  method m() → core::int {
    return 1;
  }
}
class C extends self::A {
  constructor •() → self::C
    : super self::A::•() {}
  static factory bar() → self::C /* redirection-target: self::D::• */
    return new self::D::•();
  method m() → core::int {
    return 1;
  }
}
class D extends self::C {
  synthetic constructor •() → self::D
    : super self::C::•()
    ;
  method m() → core::int {
    return 2;
  }
}
static method main() → dynamic {
  self::A a = new self::D::•();
  exp::Expect::equals(2, a.{self::A::m}(){() → core::int});
}
