library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

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