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}");
  }
}
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);
  }
}
