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

class Foo extends core::Object {
  constructor •() → void
    ;
  method method(dynamic x, [dynamic y, dynamic z]) → dynamic
    ;
}
abstract class External extends core::Object {
  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 {
  constructor •() → void
    ;
  abstract method event(core::String input, [core::int x, core::int y]) → void;
}
class TestListener extends self::Listener {
  constructor •() → void
    ;
  method event(dynamic input, [dynamic x, dynamic y]) → void
    ;
}
class ExtendedListener extends self::Listener {
  constructor •() → void
    ;
  method event(dynamic input, [dynamic x, dynamic y, dynamic z]) → void
    ;
}
class InvalidListener extends core::Object {
  constructor •() → void
    ;
  method event(dynamic input, [dynamic x]) → void
    ;
}
external static abstract method createExternal() → self::External;
static method main() → dynamic
  ;
