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

class A extends core::Object {
  field core::String text = "";
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
extension _extension#0 on self::A? {
  get text = self::_extension#0|get#text;
}
static method _extension#0|get#text(final self::A? #this) → core::String
  return "Lily was here";
static method main() → void {
  self::A? a = null;
  self::expect("Lily was here", self::_extension#0|get#text(a));
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
