library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Undefined name 'e2'.
//   e2.floor(); // Ok.
//   ^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide.dart:8:6: Error: The method 'ceil' isn't defined for the extension 'E1'.
// Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
//   e1.ceil(); // Ok.
//      ^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide.dart:10:6: Error: The getter 'isEven' isn't defined for the extension 'E1'.
// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
//   e1.isEven; // Error.
//      ^^^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide.dart:16:6: Error: The method 'ceil' isn't defined for the extension 'E2'.
// Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
//   e2.ceil(); // Error.
//      ^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide.dart:17:6: Error: The method 'floor' isn't defined for the extension 'E2'.
// Try correcting the name to the name of an existing method, or defining a method name 'floor'.
//   e2.floor(); // Ok.
//      ^^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide.dart:18:6: Error: The getter 'isEven' isn't defined for the extension 'E2'.
// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
//   e2.isEven; // Error.
//      ^^^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide.dart:24:6: Error: The getter 'isOdd' isn't defined for the extension 'E3'.
// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isOdd'.
//   e3.isOdd; // Ok.
//      ^^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide.dart:25:6: Error: The getter 'isEven' isn't defined for the extension 'E3'.
// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
//   e3.isEven; // Error.
//      ^^^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide.dart:35:5: Error: The getter 'isEven' isn't defined for the extension 'MyInt'.
// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
//   m.isEven; // OK, a shown instance member.
//     ^^^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide.dart:36:5: Error: The method 'ceil' isn't defined for the extension 'MyInt'.
// Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
//   m.ceil(); // OK, a shown instance member.
//     ^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide.dart:38:5: Error: The method 'floor' isn't defined for the extension 'MyInt'.
// Try correcting the name to the name of an existing method, or defining a method name 'floor'.
//   m.floor(); // Error, hidden.
//     ^^^^^
//
import self as self;
import "dart:core" as core;

extension E1 on core::int show-types core::num {
}
extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
}
extension E3 on core::int hide-getters core::int::isEven {
}
extension type MyInt on core::int show-types core::num show-getters core::int::isEven hide-methods core::int::floor hide-getters core::int::floor {
  get twice = self::MyInt|get#twice;
}
static method test1(self::E1 e1) → dynamic {
  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:8:6: Error: The method 'ceil' isn't defined for the extension 'E1'.
Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
  e1.ceil(); // Ok.
     ^^^^" in e1{<unresolved>}.ceil();
  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Undefined name 'e2'.
  e2.floor(); // Ok.
  ^^"{dynamic}.floor();
  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:10:6: Error: The getter 'isEven' isn't defined for the extension 'E1'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
  e1.isEven; // Error.
     ^^^^^^" in e1{<unresolved>}.isEven;
}
static method test2(self::E2 e2) → dynamic {
  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:16:6: Error: The method 'ceil' isn't defined for the extension 'E2'.
Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
  e2.ceil(); // Error.
     ^^^^" in e2{<unresolved>}.ceil();
  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:17:6: Error: The method 'floor' isn't defined for the extension 'E2'.
Try correcting the name to the name of an existing method, or defining a method name 'floor'.
  e2.floor(); // Ok.
     ^^^^^" in e2{<unresolved>}.floor();
  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:18:6: Error: The getter 'isEven' isn't defined for the extension 'E2'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
  e2.isEven; // Error.
     ^^^^^^" in e2{<unresolved>}.isEven;
}
static method test3(self::E3 e3) → dynamic {
  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:24:6: Error: The getter 'isOdd' isn't defined for the extension 'E3'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'isOdd'.
  e3.isOdd; // Ok.
     ^^^^^" in e3{<unresolved>}.isOdd;
  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:25:6: Error: The getter 'isEven' isn't defined for the extension 'E3'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
  e3.isEven; // Error.
     ^^^^^^" in e3{<unresolved>}.isEven;
}
static method MyInt|get#twice(lowered final core::int #this) → core::int
  return 2.{core::num::*}(#this){(core::num) → core::int};
static method test() → dynamic {
  self::MyInt m = 42;
  self::MyInt|get#twice(m);
  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:35:5: Error: The getter 'isEven' isn't defined for the extension 'MyInt'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
  m.isEven; // OK, a shown instance member.
    ^^^^^^" in m{<unresolved>}.isEven;
  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:36:5: Error: The method 'ceil' isn't defined for the extension 'MyInt'.
Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
  m.ceil(); // OK, a shown instance member.
    ^^^^" in m{<unresolved>}.ceil();
  m.{core::Object::toString}(){() → core::String};
  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:38:5: Error: The method 'floor' isn't defined for the extension 'MyInt'.
Try correcting the name to the name of an existing method, or defining a method name 'floor'.
  m.floor(); // Error, hidden.
    ^^^^^" in m{<unresolved>}.floor();
}
static method main() → dynamic {}
