library;
import self as self;

import "org-dartlang-testcase:///show_hide_lib1.dart" show ShownExtension1;
import "org-dartlang-testcase:///show_hide_lib2.dart" hide HiddenExtension2;

static method test() → dynamic
  ;

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

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

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

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