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