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

abstract class A extends core::Object {
  synthetic constructor •() → void
    ;
  abstract get x() → core::int;
}
class B extends core::Object {
  synthetic constructor •() → void
    ;
  get x() → core::int
    ;
}
class C extends self::A {
  field dynamic x;
  synthetic constructor •() → void
    ;
}
class D extends self::B {
  field dynamic x;
  synthetic constructor •() → void
    ;
}
class E extends core::Object implements self::A {
  field dynamic x;
  synthetic constructor •() → void
    ;
}
class F extends core::Object implements self::B {
  field dynamic x;
  synthetic constructor •() → void
    ;
}
abstract class _G&Object&B = core::Object with self::B {
}
class G extends self::_G&Object&B {
  field dynamic x;
  synthetic constructor •() → void
    ;
}
static method main() → dynamic
  ;
