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

class ActionDispatcher<P extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method call([self::ActionDispatcher::P value = null]) → void {}
}
class Bar extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class FooActions extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  get foo() → self::ActionDispatcher<self::Bar>
    return new self::ActionDispatcher::•<self::Bar>();
}
static method main() → void {
  new self::FooActions::•().foo(new self::Bar::•());
  new self::FooActions::•().foo.call(new self::Bar::•());
  new self::FooActions::•().foo.call(new self::Bar::•());
}
