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

class Class extends core::Object {
  field core::int property;
  field core::Function functionField;
  field () → void functionTypeField;
  synthetic constructor •() → self::Class
    ;
  method method() → core::int
    ;
  get functionGetter() → core::Function
    ;
  get functionTypeGetter() → () → void
    ;
}
extension Extension on self::Class {
  operator + = self::Extension|+;
  operator unary- = self::Extension|unary-;
  operator [] = self::Extension|[];
  operator []= = self::Extension|[]=;
  method call = self::Extension|call;
  tearoff call = self::Extension|get#call;
  get extensionProperty = self::Extension|get#extensionProperty;
  method extensionMethod = self::Extension|extensionMethod;
  tearoff extensionMethod = self::Extension|get#extensionMethod;
  get extensionFunctionGetter = self::Extension|get#extensionFunctionGetter;
  get extensionFunctionTypeGetter = self::Extension|get#extensionFunctionTypeGetter;
  set extensionProperty = self::Extension|set#extensionProperty;
}
static field core::num topLevelBinary;
static field core::int topLevelUnary;
static field dynamic topLevelIndexGet;
static field core::int topLevelIndexSet;
static field dynamic topLevelIndexGetSet;
static field core::int topLevelPropertyGet;
static field core::int topLevelPropertySet;
static field core::int topLevelPropertyGetSet;
static field core::int topLevelMethodInvocation;
static field () → core::int topLevelMethodTearOff;
static field dynamic topLevelFunctionImplicitCall;
static field dynamic topLevelFunctionExplicitCall;
static field core::Function? topLevelFunctionTearOff;
static field void topLevelFunctionTypeImplicitCall;
static field void topLevelFunctionTypeExplicitCall;
static field () →? void topLevelFunctionTypeTearOff;
static field dynamic topLevelFunctionField;
static field void topLevelFunctionTypeField;
static field dynamic topLevelFunctionGetter;
static field void topLevelFunctionTypeGetter;
static field core::int topLevelExtensionBinary;
static field core::int topLevelExtensionUnary;
static field core::int topLevelExtensionIndexGet;
static field core::int topLevelExtensionIndexSet;
static field core::int topLevelExtensionIndexGetSet;
static field core::int topLevelExtensionPropertyGet;
static field core::int topLevelExtensionPropertySet;
static field core::int topLevelExtensionPropertyGetSet;
static field core::int topLevelExtensionMethodInvocation;
static field () → core::int topLevelExtensionMethodTearOff;
static field core::int topLevelExtensionFunctionTypeImplicitCall;
static field core::int topLevelExtensionFunctionTypeExplicitCall;
static field () → core::int topLevelExtensionFunctionTypeTearOff;
static field dynamic topLevelExtensionFunctionGetter;
static field void topLevelExtensionFunctionTypeGetter;
static method Extension|+(lowered final self::Class #this, core::int value) → core::int
  ;
static method Extension|unary-(lowered final self::Class #this) → core::int
  ;
static method Extension|[](lowered final self::Class #this, core::int index) → core::int
  ;
static method Extension|[]=(lowered final self::Class #this, core::int index, core::int value) → void
  ;
static method Extension|call(lowered final self::Class #this) → core::int
  ;
static method Extension|get#call(lowered final self::Class #this) → () → core::int
  return () → core::int => self::Extension|call(#this);
static method Extension|get#extensionProperty(lowered final self::Class #this) → core::int
  ;
static method Extension|set#extensionProperty(lowered final self::Class #this, core::int value) → void
  ;
static method Extension|extensionMethod(lowered final self::Class #this) → core::int
  ;
static method Extension|get#extensionMethod(lowered final self::Class #this) → () → core::int
  return () → core::int => self::Extension|extensionMethod(#this);
static method Extension|get#extensionFunctionGetter(lowered final self::Class #this) → core::Function
  ;
static method Extension|get#extensionFunctionTypeGetter(lowered final self::Class #this) → () → void
  ;
static get nullableFunction() → core::Function?
  ;
static get nullableFunctionType() → () →? void
  ;
static get nullableInt() → core::int?
  ;
static get nullableMap() → core::Map<dynamic, dynamic>?
  ;
static get nullableClass() → self::Class?
  ;
static method test() → dynamic
  ;
static method main() → dynamic
  ;
