library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class W extends core::Object {
  field core::String native;
  constructor •() → self::W
    : self::W::native = "field", super core::Object::•()
    ;
}
class X extends core::Object {
  synthetic constructor •() → self::X
    : super core::Object::•()
    ;
  method native() → core::String
    return "method";
}
abstract class Y1 extends core::Object {
  synthetic constructor •() → self::Y1
    : super core::Object::•()
    ;
  abstract get native() → core::String;
}
class Y2 extends self::Y1 {
  synthetic constructor •() → self::Y2
    : super self::Y1::•()
    ;
  @#C1
  get native() → core::String
    return "getter";
}
class Z extends core::Object {
  field core::String? f = null;
  synthetic constructor •() → self::Z
    : 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::String});
  core::print(new self::X::•().{self::X::native}(){() → core::String});
  core::print(new self::Y2::•().{self::Y2::native}{core::String});
  core::print((let final self::Z #t1 = new self::Z::•() in block {
    #t1.{self::Z::native} = "setter";
  } =>#t1).{self::Z::f}{core::String?});
}

constants  {
  #C1 = core::_Override {}
}
