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

class A extends core::Object {
  synthetic constructor •() → self::A*
    ;
  operator ==(covariant self::A* other) → core::bool*
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B*
    ;
  operator ==(covariant self::A* other) → core::bool*
    ;
}
class C<T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T*>*
    ;
  operator ==(covariant generic-covariant-impl self::C<self::C::T*>* other) → core::bool*
    ;
}
class D extends self::C<core::int*> {
  synthetic constructor •() → self::D*
    ;
}
static method main() → dynamic
  ;
static method test(self::A* a, self::B* b, self::C<dynamic>* c_dynamic, self::C<core::int*>* c_int, self::C<core::String*>* c_string, self::D* d) → dynamic
  ;
