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

class I extends core::Object {
  synthetic constructor •() → self::I
    ;
}
class A extends core::Object implements self::I {
  synthetic constructor •() → self::A
    ;
}
extension /* unnamed */ _extension#0 on self::A {
  get member = self::_extension#0|get#member;
}
extension /* unnamed */ _extension#1 on self::I {
  get member = self::_extension#1|get#member;
}
static extension-member method _extension#0|get#member(lowered final self::A #this) → core::int
  ;
static extension-member method _extension#1|get#member(lowered final self::I #this) → core::int
  ;
static method method(self::A a) → dynamic
  ;
static method main() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
