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::int? 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|+(final self::Class #this, core::int value) → core::int
  ;
static method Extension|unary-(final self::Class #this) → core::int
  ;
static method Extension|[](final self::Class #this, core::int index) → core::int
  ;
static method Extension|[]=(final self::Class #this, core::int index, core::int value) → void
  ;
static method Extension|call(final self::Class #this) → core::int
  ;
static method Extension|get#call(final self::Class #this) → () → core::int
  return () → core::int => self::Extension|call(#this);
static method Extension|get#extensionProperty(final self::Class #this) → core::int
  ;
static method Extension|set#extensionProperty(final self::Class #this, core::int value) → void
  ;
static method Extension|extensionMethod(final self::Class #this) → core::int
  ;
static method Extension|get#extensionMethod(final self::Class #this) → () → core::int
  return () → core::int => self::Extension|extensionMethod(#this);
static method Extension|get#extensionFunctionGetter(final self::Class #this) → core::Function
  ;
static method Extension|get#extensionFunctionTypeGetter(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
  ;
