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;
  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
}
