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

class A extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method call() → core::int
    return 0;
}
class B extends core::Object {
  synthetic 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::•();
  synthetic 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}();
  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}();
}
