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

class Class extends core::Object {
  field dynamic field;
  synthetic constructor •() → self::Class*
    ;
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method toString() → core::String*; -> core::Object::toString
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class GenericClass<T extends core::Object* = dynamic> extends core::Object {
  generic-covariant-impl field self::GenericClass::T* field;
  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
    ;
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method toString() → core::String*; -> core::Object::toString
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
extension Extension on self::Class* {
  method readGetter = self::Extension|readGetter;
  tearoff readGetter = self::Extension|get#readGetter;
  method writeSetterRequired = self::Extension|writeSetterRequired;
  tearoff writeSetterRequired = self::Extension|get#writeSetterRequired;
  method writeSetterOptional = self::Extension|writeSetterOptional;
  tearoff writeSetterOptional = self::Extension|get#writeSetterOptional;
  method writeSetterNamed = self::Extension|writeSetterNamed;
  tearoff writeSetterNamed = self::Extension|get#writeSetterNamed;
  get tearOffGetterNoArgs = self::Extension|get#tearOffGetterNoArgs;
  get tearOffGetterRequired = self::Extension|get#tearOffGetterRequired;
  get tearOffGetterOptional = self::Extension|get#tearOffGetterOptional;
  get tearOffGetterNamed = self::Extension|get#tearOffGetterNamed;
  get property = self::Extension|get#property;
  method invocations = self::Extension|invocations;
  tearoff invocations = self::Extension|get#invocations;
  method tearOffs = self::Extension|tearOffs;
  tearoff tearOffs = self::Extension|get#tearOffs;
  method getterCalls = self::Extension|getterCalls;
  tearoff getterCalls = self::Extension|get#getterCalls;
  set property = self::Extension|set#property;
}
extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
  method readGetter = self::GenericExtension|readGetter;
  tearoff readGetter = self::GenericExtension|get#readGetter;
  method writeSetterRequired = self::GenericExtension|writeSetterRequired;
  tearoff writeSetterRequired = self::GenericExtension|get#writeSetterRequired;
  method writeSetterOptional = self::GenericExtension|writeSetterOptional;
  tearoff writeSetterOptional = self::GenericExtension|get#writeSetterOptional;
  method writeSetterNamed = self::GenericExtension|writeSetterNamed;
  tearoff writeSetterNamed = self::GenericExtension|get#writeSetterNamed;
  method genericWriteSetterRequired = self::GenericExtension|genericWriteSetterRequired;
  tearoff genericWriteSetterRequired = self::GenericExtension|get#genericWriteSetterRequired;
  method genericWriteSetterOptional = self::GenericExtension|genericWriteSetterOptional;
  tearoff genericWriteSetterOptional = self::GenericExtension|get#genericWriteSetterOptional;
  method genericWriteSetterNamed = self::GenericExtension|genericWriteSetterNamed;
  tearoff genericWriteSetterNamed = self::GenericExtension|get#genericWriteSetterNamed;
  get property = self::GenericExtension|get#property;
  get tearOffGetterNoArgs = self::GenericExtension|get#tearOffGetterNoArgs;
  get tearOffGetterRequired = self::GenericExtension|get#tearOffGetterRequired;
  get tearOffGetterOptional = self::GenericExtension|get#tearOffGetterOptional;
  get tearOffGetterNamed = self::GenericExtension|get#tearOffGetterNamed;
  get tearOffGetterGenericRequired = self::GenericExtension|get#tearOffGetterGenericRequired;
  get tearOffGetterGenericOptional = self::GenericExtension|get#tearOffGetterGenericOptional;
  get tearOffGetterGenericNamed = self::GenericExtension|get#tearOffGetterGenericNamed;
  method invocations = self::GenericExtension|invocations;
  tearoff invocations = self::GenericExtension|get#invocations;
  method tearOffs = self::GenericExtension|tearOffs;
  tearoff tearOffs = self::GenericExtension|get#tearOffs;
  method getterCalls = self::GenericExtension|getterCalls;
  tearoff getterCalls = self::GenericExtension|get#getterCalls;
  set property = self::GenericExtension|set#property;
}
static method Extension|get#readGetter(final self::Class* #this) → () →* dynamic
  return () → dynamic => self::Extension|readGetter(#this);
static method Extension|readGetter(final self::Class* #this) → dynamic
  ;
static method Extension|writeSetterRequired(final self::Class* #this, dynamic value) → dynamic
  ;
static method Extension|get#writeSetterRequired(final self::Class* #this) → (dynamic) →* dynamic
  return (dynamic value) → dynamic => self::Extension|writeSetterRequired(#this, value);
static method Extension|writeSetterOptional(final self::Class* #this, [dynamic value]) → dynamic
  ;
static method Extension|get#writeSetterOptional(final self::Class* #this) → ([dynamic]) →* dynamic
  return ([dynamic value]) → dynamic => self::Extension|writeSetterOptional(#this, value);
static method Extension|writeSetterNamed(final self::Class* #this, {dynamic value}) → dynamic
  ;
static method Extension|get#writeSetterNamed(final self::Class* #this) → ({value: dynamic}) →* dynamic
  return ({dynamic value}) → dynamic => self::Extension|writeSetterNamed(#this, value: value);
static method Extension|get#tearOffGetterNoArgs(final self::Class* #this) → dynamic
  ;
static method Extension|get#tearOffGetterRequired(final self::Class* #this) → dynamic
  ;
static method Extension|get#tearOffGetterOptional(final self::Class* #this) → dynamic
  ;
static method Extension|get#tearOffGetterNamed(final self::Class* #this) → dynamic
  ;
static method Extension|get#property(final self::Class* #this) → dynamic
  ;
static method Extension|set#property(final self::Class* #this, dynamic value) → void
  ;
static method Extension|invocations(final self::Class* #this, dynamic value) → dynamic
  ;
static method Extension|get#invocations(final self::Class* #this) → (dynamic) →* dynamic
  return (dynamic value) → dynamic => self::Extension|invocations(#this, value);
static method Extension|get#tearOffs(final self::Class* #this) → (dynamic) →* dynamic
  return (dynamic value) → dynamic => self::Extension|tearOffs(#this, value);
static method Extension|tearOffs(final self::Class* #this, dynamic value) → dynamic
  ;
static method Extension|getterCalls(final self::Class* #this, dynamic value) → dynamic
  ;
static method Extension|get#getterCalls(final self::Class* #this) → (dynamic) →* dynamic
  return (dynamic value) → dynamic => self::Extension|getterCalls(#this, value);
static method GenericExtension|readGetter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|readGetter::T*>* #this) → self::GenericExtension|readGetter::T*
  ;
static method GenericExtension|get#readGetter<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#readGetter::T*>* #this) → () →* self::GenericExtension|get#readGetter::T*
  return () → self::GenericExtension|get#readGetter::T* => self::GenericExtension|readGetter<self::GenericExtension|get#readGetter::T*>(#this);
static method GenericExtension|writeSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterRequired::T*>* #this, self::GenericExtension|writeSetterRequired::T* value) → dynamic
  ;
static method GenericExtension|get#writeSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterRequired::T*>* #this) → (self::GenericExtension|get#writeSetterRequired::T*) →* dynamic
  return (self::GenericExtension|get#writeSetterRequired::T* value) → dynamic => self::GenericExtension|writeSetterRequired<self::GenericExtension|get#writeSetterRequired::T*>(#this, value);
static method GenericExtension|writeSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterOptional::T*>* #this, [self::GenericExtension|writeSetterOptional::T* value]) → dynamic
  ;
static method GenericExtension|get#writeSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterOptional::T*>* #this) → ([self::GenericExtension|get#writeSetterOptional::T*]) →* dynamic
  return ([self::GenericExtension|get#writeSetterOptional::T* value]) → dynamic => self::GenericExtension|writeSetterOptional<self::GenericExtension|get#writeSetterOptional::T*>(#this, value);
static method GenericExtension|writeSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterNamed::T*>* #this, {self::GenericExtension|writeSetterNamed::T* value}) → dynamic
  ;
static method GenericExtension|get#writeSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#writeSetterNamed::T*>* #this) → ({value: self::GenericExtension|get#writeSetterNamed::T*}) →* dynamic
  return ({self::GenericExtension|get#writeSetterNamed::T* value}) → dynamic => self::GenericExtension|writeSetterNamed<self::GenericExtension|get#writeSetterNamed::T*>(#this, value: value);
static method GenericExtension|genericWriteSetterRequired<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterRequired::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterRequired::T*>* #this, self::GenericExtension|genericWriteSetterRequired::S* value) → dynamic
  ;
static method GenericExtension|get#genericWriteSetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterRequired::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S*) →* dynamic
  return <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S* value) → dynamic => self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|get#genericWriteSetterRequired::T*, S*>(#this, value);
static method GenericExtension|genericWriteSetterOptional<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterOptional::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterOptional::T*>* #this, [self::GenericExtension|genericWriteSetterOptional::S* value]) → dynamic
  ;
static method GenericExtension|get#genericWriteSetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterOptional::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S*]) →* dynamic
  return <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S* value]) → dynamic => self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|get#genericWriteSetterOptional::T*, S*>(#this, value);
static method GenericExtension|get#genericWriteSetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#genericWriteSetterNamed::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({value: S*}) →* dynamic
  return <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({S* value}) → dynamic => self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|get#genericWriteSetterNamed::T*, S*>(#this, value: value);
static method GenericExtension|genericWriteSetterNamed<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterNamed::T* = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterNamed::T*>* #this, {self::GenericExtension|genericWriteSetterNamed::S* value}) → dynamic
  ;
static method GenericExtension|get#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
  ;
static method GenericExtension|set#property<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#property::T*>* #this, self::GenericExtension|set#property::T* value) → void
  ;
static method GenericExtension|get#tearOffGetterNoArgs<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNoArgs::T*>* #this) → dynamic
  ;
static method GenericExtension|get#tearOffGetterRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterRequired::T*>* #this) → dynamic
  ;
static method GenericExtension|get#tearOffGetterOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterOptional::T*>* #this) → dynamic
  ;
static method GenericExtension|get#tearOffGetterNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNamed::T*>* #this) → dynamic
  ;
static method GenericExtension|get#tearOffGetterGenericRequired<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericRequired::T*>* #this) → dynamic
  ;
static method GenericExtension|get#tearOffGetterGenericOptional<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericOptional::T*>* #this) → dynamic
  ;
static method GenericExtension|get#tearOffGetterGenericNamed<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericNamed::T*>* #this) → dynamic
  ;
static method GenericExtension|invocations<T extends core::Object* = dynamic, S extends self::GenericExtension|invocations::T* = dynamic>(final self::GenericClass<self::GenericExtension|invocations::T*>* #this, self::GenericExtension|invocations::S* value) → dynamic
  ;
static method GenericExtension|get#invocations<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#invocations::T*>* #this) → <S extends self::GenericExtension|get#invocations::T* = dynamic>(S*) →* dynamic
  return <S extends self::GenericExtension|get#invocations::T* = dynamic>(S* value) → dynamic => self::GenericExtension|invocations<self::GenericExtension|get#invocations::T*, S*>(#this, value);
static method GenericExtension|tearOffs<T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::T* = dynamic>(final self::GenericClass<self::GenericExtension|tearOffs::T*>* #this, self::GenericExtension|tearOffs::S* value) → dynamic
  ;
static method GenericExtension|get#tearOffs<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffs::T*>* #this) → <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S*) →* dynamic
  return <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S* value) → dynamic => self::GenericExtension|tearOffs<self::GenericExtension|get#tearOffs::T*, S*>(#this, value);
static method GenericExtension|getterCalls<T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::T* = dynamic>(final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic
  ;
static method GenericExtension|get#getterCalls<T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#getterCalls::T*>* #this) → <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S*) →* dynamic
  return <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S* value) → dynamic => self::GenericExtension|getterCalls<self::GenericExtension|get#getterCalls::T*, S*>(#this, value);
static method main() → dynamic
  ;
