library;
import self as self;
import "export_twice_lib1.dart" as exp;

import "org-dartlang-testcase:///export_twice_lib1.dart";
import "org-dartlang-testcase:///export_twice_lib2.dart";

static method main() → dynamic {
  exp::Extension|method(new exp::Class::•());
}

library;
import self as exp;
import "dart:core" as core;

class Class extends core::Object {
  synthetic constructor •() → exp::Class
    : super core::Object::•()
    ;
}
extension Extension on exp::Class {
  method method = exp::Extension|method;
  method tearoff method = exp::Extension|get#method;
}
static extension-member method Extension|method(lowered final exp::Class #this) → dynamic {}
static extension-member method Extension|get#method(lowered final exp::Class #this) → () → dynamic
  return () → dynamic => exp::Extension|method(#this);

library;
import self as self2;
import "export_twice_lib1.dart" as exp;
additionalExports = (exp::Extension)

export "org-dartlang-testcase:///export_twice_lib1.dart" show Extension;
