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

class ActionDispatcher<P extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P*>*
    : super core::Object::•()
    ;
  method call([generic-covariant-impl self::ActionDispatcher::P* value = #C1]) → void {}
}
class Bar extends core::Object {
  synthetic constructor •() → self::Bar*
    : super core::Object::•()
    ;
}
class FooActions extends core::Object {
  synthetic constructor •() → self::FooActions*
    : super core::Object::•()
    ;
  get foo() → self::ActionDispatcher<self::Bar*>*
    return new self::ActionDispatcher::•<self::Bar*>();
}
static method main() → void {
  let final self::FooActions* #t1 = new self::FooActions::•() in let final self::Bar* #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}.{self::ActionDispatcher::call}(#t2);
  new self::FooActions::•().{self::FooActions::foo}.{self::ActionDispatcher::call}(new self::Bar::•());
  new self::FooActions::•().{self::FooActions::foo}.{self::ActionDispatcher::call}(new self::Bar::•());
}

constants  {
  #C1 = null
}
