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

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