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

class A extends core::Object {
  synthetic constructor •() → self::A
    ;
  method foo() → dynamic
    ;
}
extension B on self::A? {
  method foo = self::B|foo;
  tearoff foo = self::B|get#foo;
  method bar = self::B|bar;
  tearoff bar = self::B|get#bar;
}
extension C on self::A {
  method bar = self::C|bar;
  tearoff bar = self::C|get#bar;
}
extension D on () →? core::int {
  method call = self::D|call;
  tearoff call = self::D|get#call;
}
static method B|foo(final self::A? #this) → dynamic
  ;
static method B|get#foo(final self::A? #this) → () → dynamic
  return () → dynamic => self::B|foo(#this);
static method B|bar(final self::A? #this) → dynamic
  ;
static method B|get#bar(final self::A? #this) → () → dynamic
  return () → dynamic => self::B|bar(#this);
static method C|bar(final self::A #this) → dynamic
  ;
static method C|get#bar(final self::A #this) → () → dynamic
  return () → dynamic => self::C|bar(#this);
static method D|call(final () →? core::int #this) → core::int
  ;
static method D|get#call(final () →? core::int #this) → () → core::int
  return () → core::int => self::D|call(#this);
static method main() → dynamic
  ;
static method testA(self::A? a) → dynamic
  ;
static method testFunction(() →? core::int f) → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
