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

class Foo extends core::Object {
  default constructor •() → void
    ;
  method method(dynamic x, [dynamic y, dynamic z]) → dynamic
    ;
}
abstract class External extends core::Object {
  default constructor •() → void
    ;
  abstract method externalMethod(core::int x, [core::int y, core::int z]) → core::String;
  abstract method listen(self::Listener listener) → void;
}
abstract class Listener extends core::Object {
  default constructor •() → void
    ;
  abstract method event(core::String input, [core::int x, core::int y]) → void;
}
class TestListener extends self::Listener {
  default constructor •() → void
    ;
  method event(dynamic input, [dynamic x, dynamic y]) → void
    ;
}
class ExtendedListener extends self::Listener {
  default constructor •() → void
    ;
  method event(dynamic input, [dynamic x, dynamic y, dynamic z]) → void
    ;
}
class InvalidListener extends core::Object {
  default constructor •() → void
    ;
  method event(dynamic input, [dynamic x]) → void
    ;
}
external static abstract method createExternal() → self::External;
static method main() → dynamic
  ;
