main = main::main;
library from "org-dartlang-test:///lib1.dart" as lib1 {
additionalExports = (lib2::getter,
  lib2::method,
  lib2::setter,
  lib2::Bar)

  export "org-dartlang-test:///lib2.dart";

  class Foo extends dart.core::Object {
    constructor •() → lib1::Foo
      : super dart.core::Object::•() {}
  }
}
library from "org-dartlang-test:///lib2.dart" as lib2 {

  class Bar extends dart.core::Object {
    constructor •() → lib2::Bar
      : super dart.core::Object::•() {}
  }
  static get getter() → dart.core::String
    return "hello";
  static set setter(dart.core::int i) → void {}
  static method method() → void {}
}
library from "org-dartlang-test:///main.dart" as main {

  import "org-dartlang-test:///lib2.dart" show getter, setter, method, Bar;
  import "org-dartlang-test:///lib1.dart" show getter, setter, method, Bar;

  static method main() → dynamic {
    lib2::Bar bar = new lib2::Bar::•();
    lib2::method();
    lib2::getter;
    lib2::setter = 42;
  }
}
