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

class Class extends core::Object {
  field core::int? field;
  synthetic constructor •() → self::Class
    ;
}
extension /* unnamed */ _extension#0 on self::Class {
  get property1 = self::_extension#0|get#property1;
  set property1 = self::_extension#0|set#property1;
}
extension /* unnamed */ _extension#1 on self::Class {
  get property2 = self::_extension#1|get#property2;
  set property2 = self::_extension#1|set#property2;
}
static extension-member method _extension#0|get#property1(lowered final self::Class #this) → core::int?
  ;
static extension-member method _extension#0|set#property1(lowered final self::Class #this, core::int? value) → void
  ;
static extension-member method _extension#1|get#property2(lowered final self::Class #this) → core::int?
  ;
static extension-member method _extension#1|set#property2(lowered final self::Class #this, core::int? value) → void
  ;
static method main() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
