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
    ;
}
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
    ;
  method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void
    ;
}
class EvenFileBPrime extends stu2::EvenFileB {
  synthetic constructor •() → stu::EvenFileBPrime
    ;
}
abstract class Baz extends stu::Qux {
  synthetic constructor •() → stu::Baz
    ;
  method handleEvent(covariant-by-declaration stu::EvenFileBPrime entry) → void
    ;
}
abstract class Foo extends stu::Baz implements stu::Qux {
  synthetic constructor •() → stu::Foo
    ;
  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
    ;
  abstract method handleEvent(stu2::EvenFileB entry) → void;
}
class EvenFileB extends core::Object {
  synthetic constructor •() → stu2::EvenFileB
    ;
}
