main = <No Member>;
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::•() {
      dart.core::print("Foo!");
    }
  }
}
library from "org-dartlang-test:///lib2.dart" as lib2 {

  class Bar extends dart.core::Object {
    constructor •() → lib2::Bar*
      : super dart.core::Object::•() {
      dart.core::print("hello!");
    }
  }
  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";
  import "org-dartlang-test:///lib1.dart";

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