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

class Superclass extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method foo({dynamic alpha, dynamic beta}) → dynamic {}
  method bar({dynamic beta, dynamic alpha}) → dynamic {}
  method namedCallback(({alpha: core::String, beta: core::int}) → dynamic callback) → dynamic {
    callback.call(alpha: "one", beta: 2);
    callback.call(beta: 1, alpha: "two");
  }
}
class Subclass extends self::Superclass {
  synthetic constructor •() → void
    : super self::Superclass::•()
    ;
  method foo({dynamic beta, dynamic alpha}) → dynamic {}
  method bar({dynamic alpha, dynamic beta}) → dynamic {}
  method namedCallback(({alpha: core::String, beta: core::int}) → dynamic callback) → dynamic {}
}
static method topLevelNamed(dynamic beta, dynamic alpha, {dynamic gamma, dynamic delta}) → dynamic {}
static method topLevelOptional(dynamic beta, dynamic alpha, [dynamic gamma, dynamic delta]) → dynamic {}
static method main() → dynamic {
  new self::Subclass::•().foo(beta: 1, alpha: 2);
  new self::Subclass::•().foo(alpha: 1, beta: 2);
  self::topLevelNamed(1, 2, gamma: 3, delta: 4);
  self::topLevelNamed(1, 2, delta: 3, gamma: 4);
}
