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

class Class1 extends core::Object {
  field core::int field;
  constructor •(core::int field) → self::Class1
    ;
  method toString() → core::String
    ;
}
class Class2 extends core::Object {
  field core::int field;
  constructor •(core::int field) → self::Class2
    ;
  method toString() → core::String
    ;
}
extension Extension1 on self::Class1 {
  method method = self::Extension1|method;
  tearoff method = self::Extension1|get#method;
  method genericMethod = self::Extension1|genericMethod;
  tearoff genericMethod = self::Extension1|get#genericMethod;
  get property = self::Extension1|get#property;
  set property = self::Extension1|set#property;
}
extension Extension2 on self::Class2 {
  method method = self::Extension2|method;
  tearoff method = self::Extension2|get#method;
  method genericMethod = self::Extension2|genericMethod;
  tearoff genericMethod = self::Extension2|get#genericMethod;
  get property = self::Extension2|get#property;
  set property = self::Extension2|set#property;
}
static method Extension1|method(lowered final self::Class1 #this) → core::int
  ;
static method Extension1|get#method(lowered final self::Class1 #this) → () → core::int
  return () → core::int => self::Extension1|method(#this);
static method Extension1|genericMethod<T extends core::num>(lowered final self::Class1 #this, self::Extension1|genericMethod::T t) → core::num
  ;
static method Extension1|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
static method Extension1|get#property(lowered final self::Class1 #this) → core::int
  ;
static method Extension1|set#property(lowered final self::Class1 #this, core::int value) → void
  ;
static method Extension2|method(lowered final self::Class2 #this) → core::int
  ;
static method Extension2|get#method(lowered final self::Class2 #this) → () → core::int
  return () → core::int => self::Extension2|method(#this);
static method Extension2|genericMethod<T extends core::num>(lowered final self::Class2 #this, self::Extension2|genericMethod::T t) → core::num
  ;
static method Extension2|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
static method Extension2|get#property(lowered final self::Class2 #this) → core::int
  ;
static method Extension2|set#property(lowered final self::Class2 #this, core::int value) → void
  ;
static method main() → dynamic
  ;
static method testExtension1(self::Class1 c0, self::Class1 c1, self::Class1? c0n, self::Class1? c1n) → dynamic
  ;
static method testExtension2(self::Class2 c0, self::Class2 c1, self::Class2? c0n) → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
