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

class Class extends core::Object {
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
}
extension Extension on self::Class {
  static method method = self::Extension|method;
  static method genericMethod = self::Extension|genericMethod;
  static get property = get self::Extension|property;
  static field field = self::Extension|field;
  method instanceMethod = self::Extension|instanceMethod;
  method tearoff instanceMethod = self::Extension|get#instanceMethod;
  get instanceProperty = self::Extension|get#instanceProperty;
  static set property = set self::Extension|property;
  set instanceProperty = self::Extension|set#instanceProperty;
}
static field dynamic Extension|field;
static extension-member method Extension|method() → dynamic {}
static extension-member method Extension|genericMethod<T extends core::Object? = dynamic>(self::Extension|genericMethod::T% t) → dynamic {}
static extension-member get Extension|property() → dynamic
  return 42;
static extension-member set Extension|property(dynamic value) → void {}
static extension-member method Extension|instanceMethod(lowered final self::Class #this) → dynamic {}
static extension-member method Extension|get#instanceMethod(lowered final self::Class #this) → () → dynamic
  return () → dynamic => self::Extension|instanceMethod(#this);
static extension-member method Extension|get#instanceProperty(lowered final self::Class #this) → dynamic
  return 42;
static extension-member method Extension|set#instanceProperty(lowered final self::Class #this, dynamic value) → void {}
static method main() → dynamic {
  self::Extension|method();
  self::Extension|genericMethod<core::int>(42);
  self::Extension|genericMethod<core::num>(42);
  #C1;
  #C2;
  self::Extension|property;
  self::Extension|property = 42;
  self::Extension|field;
  self::Extension|field = 42;
}

constants  {
  #C1 = static-tearoff self::Extension|method
  #C2 = static-tearoff self::Extension|genericMethod
}
