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

class W extends core::Object {
  field core::String native;
  constructor •() → void
    : self::W::native = "field", super core::Object::•()
    ;
}
class X extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method native() → core::String
    return "method";
}
class Y1 extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  abstract get native() → core::String;
}
class Y2 extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  @core::override
  get native() → core::String
    return "getter";
}
class Z extends core::Object {
  field core::String f = null;
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  set native(core::String s) → void
    return this.{self::Z::f} = s;
}
static method main() → dynamic {
  core::print(new self::W::•().{self::W::native});
  core::print(new self::X::•().{self::X::native}());
  core::print(new self::Y2::•().{self::Y2::native});
  core::print((let final self::Z #t1 = new self::Z::•() in let final dynamic #t2 = #t1.{self::Z::native} = "setter" in #t1).{self::Z::f});
}
