library /*isNonNullableByDefault*/;
import self as self;
import "stub_or_not_lib1.dart" as stu;

import "org-dartlang-testcase:///stub_or_not_lib1.dart";

class ProblemClass extends stu::Foo {
  synthetic constructor •() → self::ProblemClass
    : super stu::Foo::•()
    ;
}
static method main() → dynamic {}

library /*isNonNullableByDefault*/;
import self as stu;
import "dart:core" as core;
import "stub_or_not_lib2.dart" as stu2;

import "org-dartlang-testcase:///stub_or_not_lib2.dart";

abstract class Qux extends core::Object implements stu2::EventFileA {
  synthetic constructor •() → stu::Qux
    : super core::Object::•()
    ;
  method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void {}
}
class EvenFileBPrime extends stu2::EvenFileB {
  synthetic constructor •() → stu::EvenFileBPrime
    : super stu2::EvenFileB::•()
    ;
}
abstract class Baz extends stu::Qux {
  synthetic constructor •() → stu::Baz
    : super stu::Qux::•()
    ;
  method handleEvent(covariant-by-declaration stu::EvenFileBPrime entry) → void {}
}
abstract class Foo extends stu::Baz implements stu::Qux {
  synthetic constructor •() → stu::Foo
    : super stu::Baz::•()
    ;
  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void; -> stu::Qux::handleEvent
}

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

abstract class EventFileA extends core::Object {
  synthetic constructor •() → stu2::EventFileA
    : super core::Object::•()
    ;
  abstract method handleEvent(stu2::EvenFileB entry) → void;
}
class EvenFileB extends core::Object {
  synthetic constructor •() → stu2::EvenFileB
    : super core::Object::•()
    ;
}
