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

class A extends core::Object {
  constructor •() → void
    : super core::Object::•()
    ;
  method call() → core::int
    return 0;
}
class B extends core::Object {
  constructor •() → void
    : super core::Object::•()
    ;
  get call() → self::A
    return new self::A::•();
}
class D extends core::Object {
  field self::A fieldA = new self::A::•();
  field self::B fieldB = new self::B::•();
  constructor •() → void
    : super core::Object::•()
    ;
  get getA() → self::A
    return new self::A::•();
  get getB() → self::B
    return new self::B::•();
}
static method main() → dynamic {
  core::int callA = new self::A::•().{self::A::call}();
  dynamic callB = new self::B::•().{self::B::call}();
  core::int callFieldA = new self::D::•().{self::D::fieldA}();
  core::int callGetA = new self::D::•().{self::D::getA}();
  dynamic callFieldB = new self::D::•().{self::D::fieldB}();
  dynamic callGetB = new self::D::•().{self::D::getB}();
}
