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

class Class<T extends core::Object* = dynamic> extends core::Object {
  static field dynamic field;
  synthetic constructor •() → self::Class<self::Class::T*>*
    ;
}
extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
  static get property = get self::Extension|property;
  static field field = self::Extension|field;
  static method readGetter = self::Extension|readGetter;
  static method writeSetterRequired = self::Extension|writeSetterRequired;
  static method writeSetterOptional = self::Extension|writeSetterOptional;
  static method writeSetterNamed = self::Extension|writeSetterNamed;
  static method genericWriteSetterRequired = self::Extension|genericWriteSetterRequired;
  static method genericWriteSetterOptional = self::Extension|genericWriteSetterOptional;
  static method genericWriteSetterNamed = self::Extension|genericWriteSetterNamed;
  static get tearOffGetterNoArgs = get self::Extension|tearOffGetterNoArgs;
  static get tearOffGetterRequired = get self::Extension|tearOffGetterRequired;
  static get tearOffGetterOptional = get self::Extension|tearOffGetterOptional;
  static get tearOffGetterNamed = get self::Extension|tearOffGetterNamed;
  static get tearOffGetterGenericRequired = get self::Extension|tearOffGetterGenericRequired;
  static get tearOffGetterGenericOptional = get self::Extension|tearOffGetterGenericOptional;
  static get tearOffGetterGenericNamed = get self::Extension|tearOffGetterGenericNamed;
  static method invocationsFromStaticContext = self::Extension|invocationsFromStaticContext;
  static method tearOffsFromStaticContext = self::Extension|tearOffsFromStaticContext;
  static method fieldAccessFromStaticContext = self::Extension|fieldAccessFromStaticContext;
  static method getterCallsFromStaticContext = self::Extension|getterCallsFromStaticContext;
  method invocationsFromInstanceContext = self::Extension|invocationsFromInstanceContext;
  tearoff invocationsFromInstanceContext = self::Extension|get#invocationsFromInstanceContext;
  method tearOffsFromInstanceContext = self::Extension|tearOffsFromInstanceContext;
  tearoff tearOffsFromInstanceContext = self::Extension|get#tearOffsFromInstanceContext;
  method fieldAccessFromInstanceContext = self::Extension|fieldAccessFromInstanceContext;
  tearoff fieldAccessFromInstanceContext = self::Extension|get#fieldAccessFromInstanceContext;
  method getterCallsFromInstanceContext = self::Extension|getterCallsFromInstanceContext;
  tearoff getterCallsFromInstanceContext = self::Extension|get#getterCallsFromInstanceContext;
  static set property = set self::Extension|property;
}
static field dynamic Extension|field;
static get Extension|property() → dynamic
  ;
static set Extension|property(dynamic value) → void
  ;
static method Extension|readGetter() → dynamic
  ;
static method Extension|writeSetterRequired(dynamic value) → dynamic
  ;
static method Extension|writeSetterOptional([dynamic value]) → dynamic
  ;
static method Extension|writeSetterNamed({dynamic value}) → dynamic
  ;
static method Extension|genericWriteSetterRequired<S extends core::Object* = dynamic>(self::Extension|genericWriteSetterRequired::S* value) → dynamic
  ;
static method Extension|genericWriteSetterOptional<S extends core::Object* = dynamic>([self::Extension|genericWriteSetterOptional::S* value]) → dynamic
  ;
static method Extension|genericWriteSetterNamed<S extends core::Object* = dynamic>({self::Extension|genericWriteSetterNamed::S* value}) → dynamic
  ;
static get Extension|tearOffGetterNoArgs() → dynamic
  ;
static get Extension|tearOffGetterRequired() → dynamic
  ;
static get Extension|tearOffGetterOptional() → dynamic
  ;
static get Extension|tearOffGetterNamed() → dynamic
  ;
static get Extension|tearOffGetterGenericRequired() → dynamic
  ;
static get Extension|tearOffGetterGenericOptional() → dynamic
  ;
static get Extension|tearOffGetterGenericNamed() → dynamic
  ;
static method Extension|invocationsFromStaticContext(core::int* value) → dynamic
  ;
static method Extension|tearOffsFromStaticContext(core::int* value) → dynamic
  ;
static method Extension|fieldAccessFromStaticContext() → dynamic
  ;
static method Extension|getterCallsFromStaticContext(core::int* value) → dynamic
  ;
static method Extension|invocationsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|invocationsFromInstanceContext::T*>* #this, self::Extension|invocationsFromInstanceContext::T* value) → dynamic
  ;
static method Extension|get#invocationsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#invocationsFromInstanceContext::T*>* #this) → (self::Extension|get#invocationsFromInstanceContext::T*) →* dynamic
  return (self::Extension|get#invocationsFromInstanceContext::T* value) → dynamic => self::Extension|invocationsFromInstanceContext<self::Extension|get#invocationsFromInstanceContext::T*>(#this, value);
static method Extension|tearOffsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic
  ;
static method Extension|get#tearOffsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#tearOffsFromInstanceContext::T*>* #this) → (self::Extension|get#tearOffsFromInstanceContext::T*) →* dynamic
  return (self::Extension|get#tearOffsFromInstanceContext::T* value) → dynamic => self::Extension|tearOffsFromInstanceContext<self::Extension|get#tearOffsFromInstanceContext::T*>(#this, value);
static method Extension|fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → dynamic
  ;
static method Extension|get#fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#fieldAccessFromInstanceContext::T*>* #this) → () →* dynamic
  return () → dynamic => self::Extension|fieldAccessFromInstanceContext<self::Extension|get#fieldAccessFromInstanceContext::T*>(#this);
static method Extension|getterCallsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → dynamic
  ;
static method Extension|get#getterCallsFromInstanceContext<T extends core::Object* = dynamic>(final self::Class<self::Extension|get#getterCallsFromInstanceContext::T*>* #this) → (self::Extension|get#getterCallsFromInstanceContext::T*) →* dynamic
  return (self::Extension|get#getterCallsFromInstanceContext::T* value) → dynamic => self::Extension|getterCallsFromInstanceContext<self::Extension|get#getterCallsFromInstanceContext::T*>(#this, value);
static method main() → dynamic
  ;
