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

class Foo extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method method(dynamic x, [dynamic y, dynamic z]) → dynamic {
    return "string";
  }
}
abstract class External extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  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
    : super core::Object::•()
    ;
  abstract method event(core::String input, [core::int x, core::int y]) → void;
}
class TestListener extends self::Listener {
  synthetic constructor •() → void
    : super self::Listener::•()
    ;
  method event(dynamic input, [dynamic x, dynamic y]) → void {}
}
class ExtendedListener extends self::Listener {
  synthetic constructor •() → void
    : super self::Listener::•()
    ;
  method event(dynamic input, [dynamic x, dynamic y, dynamic z]) → void {}
}
class InvalidListener extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method event(dynamic input, [dynamic x]) → void {}
}
external static method createExternal() → self::External;
static method main() → dynamic {
  dynamic foo = new self::Foo::•();
  dynamic string1 = foo.method(1);
  dynamic string2 = foo.method(1, 2);
  dynamic string3 = foo.method(1, 2, 3);
  dynamic extern = self::createExternal();
  dynamic string4 = extern.externalMethod(1);
  dynamic string5 = extern.externalMethod(1, 2);
  dynamic string6 = extern.externalMethod(1, 2, 3);
  extern.listen(new self::TestListener::•());
  extern.listen(new self::ExtendedListener::•());
  extern.listen(new self::InvalidListener::•());
  dynamic nothing1 = foo.method();
  dynamic nothing2 = foo.method(1, 2, 3, 4);
  dynamic nothing3 = extern.externalMethod();
  dynamic nothing4 = extern.externalMethod(1, 2, 3, 4);
}
