library;
//
// Problems in library:
//
// pkg/front_end/testcases/extensions/prefix.dart:11:8: Error: Undefined name 'HiddenExtension1'.
//   lib1.HiddenExtension1.staticMethod(); // Error
//        ^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/extensions/prefix.dart:13:8: Error: Undefined name 'HiddenExtension2'.
//   lib2.HiddenExtension2.staticMethod(); // Error
//        ^^^^^^^^^^^^^^^^
//
import self as self;
import "prefix_lib1.dart" as pre;
import "prefix_lib2.dart" as pre2;
import "prefix_lib3.dart" as pre3;

import "org-dartlang-testcase:///prefix_lib1.dart" as lib1 show ShownExtension1;
import "org-dartlang-testcase:///prefix_lib2.dart" as lib2 hide HiddenExtension2;
import "org-dartlang-testcase:///prefix_lib3.dart" as lib3;

static method test() → dynamic {
  pre::ShownExtension1|staticMethod();
  invalid-expression "pkg/front_end/testcases/extensions/prefix.dart:11:8: Error: Undefined name 'HiddenExtension1'.
  lib1.HiddenExtension1.staticMethod(); // Error
       ^^^^^^^^^^^^^^^^"{dynamic}.staticMethod();
  pre2::ShownExtension2|staticMethod();
  invalid-expression "pkg/front_end/testcases/extensions/prefix.dart:13:8: Error: Undefined name 'HiddenExtension2'.
  lib2.HiddenExtension2.staticMethod(); // Error
       ^^^^^^^^^^^^^^^^"{dynamic}.staticMethod();
  pre3::ShownExtension3|staticMethod();
}

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

extension ShownExtension1 on core::String {
  static method staticMethod = pre::ShownExtension1|staticMethod;
}
extension HiddenExtension1 on core::String {
  static method staticMethod = pre::HiddenExtension1|staticMethod;
}
static extension-member method ShownExtension1|staticMethod() → void {}
static extension-member method HiddenExtension1|staticMethod() → void {}

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

extension HiddenExtension2 on core::String {
  static method staticMethod = pre2::HiddenExtension2|staticMethod;
}
extension ShownExtension2 on core::String {
  static method staticMethod = pre2::ShownExtension2|staticMethod;
}
static extension-member method HiddenExtension2|staticMethod() → void {}
static extension-member method ShownExtension2|staticMethod() → void {}

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

extension ShownExtension3 on core::String {
  static method staticMethod = pre3::ShownExtension3|staticMethod;
}
static extension-member method ShownExtension3|staticMethod() → void {}
