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>
    ;
  method call([generic-covariant-impl self::ActionDispatcher::P value]) → void
    ;
}
class Bar extends core::Object {
  synthetic constructor •() → self::Bar
    ;
}
class FooActions extends core::Object {
  synthetic constructor •() → self::FooActions
    ;
  get foo() → self::ActionDispatcher<self::Bar>
    ;
}
static method main() → void
  ;
