library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

abstract class CustomType extends core::Type {
  synthetic constructor •() → self::CustomType
    ;
  method call() → void
    ;
}
abstract class CustomInvocation extends core::Object implements core::Invocation {
  synthetic constructor •() → self::CustomInvocation
    ;
}
abstract class Class extends core::Object {
  synthetic constructor •() → self::Class
    ;
  abstract get runtimeType() → self::CustomType;
  forwarding-stub forwarding-semi-stub method /* signature-type: (self::CustomInvocation) → core::String */ noSuchMethod(covariant-by-declaration core::Invocation invocation) → core::String
    return super.{core::Object::noSuchMethod}(invocation);
  forwarding-stub forwarding-semi-stub operator /* signature-type: (self::Class) → core::bool */ ==(covariant-by-declaration core::Object o) → core::bool
    return super.{core::Object::==}(o);
  abstract method toString({core::Object o}) → core::String;
}
static method main() → dynamic
  ;
static method test(self::Class c1, self::Class? c2, core::Invocation invocation, self::CustomInvocation customInvocation) → void
  ;
