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

extension Extension<T extends core::num> on core::List<T> {
  get field = self::Extension|get#field;
  set field = self::Extension|set#field;
  static get staticField = get self::Extension|staticField;
  static set staticField = set self::Extension|staticField;
  get finalField = self::Extension|get#finalField;
  static get staticFinalField = get self::Extension|staticFinalField;
  method method = self::Extension|method;
  tearoff method = self::Extension|get#method;
  static method staticMethod = self::Extension|staticMethod;
  get getter = self::Extension|get#getter;
  static get staticGetter = get self::Extension|staticGetter;
  get property = self::Extension|get#property;
  static get staticProperty = get self::Extension|staticProperty;
  get fieldSetter = self::Extension|get#fieldSetter;
  static get staticFieldSetter = get self::Extension|staticFieldSetter;
  set setter = self::Extension|set#setter;
  static set staticSetter = set self::Extension|staticSetter;
  set property = self::Extension|set#property;
  static set staticProperty = set self::Extension|staticProperty;
  set fieldSetter = self::Extension|set#fieldSetter;
  static set staticFieldSetter = set self::Extension|staticFieldSetter;
}
external static method Extension|get#field<T extends core::num>(core::List<self::Extension|get#field::T> #this) → self::Extension|get#field::T;
external static method Extension|set#field<T extends core::num>(core::List<self::Extension|set#field::T> #this, self::Extension|set#field::T #externalFieldValue) → void;
external static get Extension|staticField() → core::int;
external static set Extension|staticField(core::int #externalFieldValue) → void;
external static method Extension|get#finalField<T extends core::num>(core::List<self::Extension|get#finalField::T> #this) → self::Extension|get#finalField::T;
external static get Extension|staticFinalField() → core::int;
external static method Extension|method<T extends core::num>(lowered final core::List<self::Extension|method::T> #this) → self::Extension|method::T;
static method Extension|get#method<T extends core::num>(lowered final core::List<self::Extension|get#method::T> #this) → () → self::Extension|get#method::T
  return () → self::Extension|get#method::T => self::Extension|method<self::Extension|get#method::T>(#this);
external static method Extension|staticMethod() → core::int;
external static method Extension|get#getter<T extends core::num>(lowered final core::List<self::Extension|get#getter::T> #this) → self::Extension|get#getter::T;
external static get Extension|staticGetter() → core::int;
external static method Extension|set#setter<T extends core::num>(lowered final core::List<self::Extension|set#setter::T> #this, self::Extension|set#setter::T value) → void;
external static set Extension|staticSetter(core::int value) → void;
external static method Extension|get#property<T extends core::num>(lowered final core::List<self::Extension|get#property::T> #this) → self::Extension|get#property::T;
external static method Extension|set#property<T extends core::num>(lowered final core::List<self::Extension|set#property::T> #this, self::Extension|set#property::T value) → void;
external static get Extension|staticProperty() → core::int;
external static set Extension|staticProperty(core::int value) → void;
external static method Extension|get#fieldSetter<T extends core::num>(core::List<self::Extension|get#fieldSetter::T> #this) → self::Extension|get#fieldSetter::T;
external static method Extension|set#fieldSetter<T extends core::num>(lowered final core::List<self::Extension|set#fieldSetter::T> #this, self::Extension|set#fieldSetter::T value) → void;
external static get Extension|staticFieldSetter() → core::int;
external static set Extension|staticFieldSetter(core::int value) → void;
static method test() → dynamic {
  core::List<core::int> list = <core::int>[];
  core::int value = self::Extension|get#field<core::int>(list);
  self::Extension|set#field<core::int>(list, value);
  value = self::Extension|get#finalField<core::int>(list);
  value = self::Extension|method<core::int>(list);
  value = self::Extension|get#getter<core::int>(list);
  self::Extension|set#setter<core::int>(list, value);
  value = self::Extension|get#property<core::int>(list);
  self::Extension|set#property<core::int>(list, value);
  value = self::Extension|get#fieldSetter<core::int>(list);
  self::Extension|set#fieldSetter<core::int>(list, value);
  core::List<core::int> iterable = list;
  core::num n = self::Extension|get#field<core::num>(iterable);
  self::Extension|set#field<core::num>(iterable, n);
  n = self::Extension|get#finalField<core::num>(iterable);
  n = self::Extension|method<core::num>(iterable);
  n = self::Extension|get#getter<core::num>(iterable);
  self::Extension|set#setter<core::num>(iterable, n);
  n = self::Extension|get#property<core::num>(iterable);
  self::Extension|set#property<core::num>(iterable, n);
  n = self::Extension|get#fieldSetter<core::num>(iterable);
  self::Extension|set#fieldSetter<core::num>(iterable, n);
  value = self::Extension|staticField;
  self::Extension|staticField = value;
  value = self::Extension|staticFinalField;
  value = self::Extension|staticMethod();
  value = self::Extension|staticGetter;
  self::Extension|staticSetter = value;
  value = self::Extension|staticProperty;
  self::Extension|staticProperty = value;
  value = self::Extension|staticFieldSetter;
  self::Extension|staticFieldSetter = value;
}
static method main() → dynamic {}
