main = <No Member>;
library from "org-dartlang-test:///lib1.dart" as lib1 {

  class Foo extends dart.core::Object {
    synthetic constructor •() → lib1::Foo*
      : super dart.core::Object::•()
      ;
    method fooMethod() → void {
      dart.core::print("fooMethod");
    }
  }
}
library from "org-dartlang-test:///lib2.dart" as lib2 {

  import "org-dartlang-test:///lib1.dart";

  class Bar extends lib1::Foo {
    synthetic constructor •() → lib2::Bar*
      : super lib1::Foo::•()
      ;
    method barMethod() → void {}
  }
}
library from "org-dartlang-test:///lib3.dart" as lib3 {

  import "org-dartlang-test:///lib1.dart";
  import "org-dartlang-test:///lib2.dart";

  static method lib3Method(lib1::Foo* foo) → void {
    lib1::Foo* bar = new lib2::Bar::•();
    dart.core::bool* equal = foo.{dart.core::Object::==}(bar);
    dart.core::print("foo == bar = ${equal}");
    dart.core::print("Done!");
  }
}
library from "org-dartlang-test:///main.dart" as main {

  import "org-dartlang-test:///lib1.dart";
  import "org-dartlang-test:///lib2.dart";
  import "org-dartlang-test:///lib3.dart";

  static method main() → dynamic {
    lib1::Foo* foo = new lib2::Bar::•();
    lib3::lib3Method(foo);
  }
}
