library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
//   int ceil() {} // Error.
//       ^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
//   int ceil() {} // Ok.
//       ^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
//   int floor() {} // Error.
//       ^
//
import self as self;
import "dart:core" as core;

extension E1 on core::int show-types core::num {
  method ceil = self::E1|ceil;
  tearoff ceil = self::E1|get#ceil;
}
extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
  method ceil = self::E2|ceil;
  tearoff ceil = self::E2|get#ceil;
  method floor = self::E2|floor;
  tearoff floor = self::E2|get#floor;
}
extension E3 on core::int hide-getters core::int::isEven {
  get isOdd = self::E3|get#isOdd;
  get isEven = self::E3|get#isEven;
}
static method E1|ceil(lowered final core::int #this) → core::int {
  return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
  int ceil() {} // Error.
      ^" in null;
}
static method E1|get#ceil(lowered final core::int #this) → () → core::int
  return () → core::int => self::E1|ceil(#this);
static method E2|ceil(lowered final core::int #this) → core::int {
  return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
  int ceil() {} // Ok.
      ^" in null;
}
static method E2|get#ceil(lowered final core::int #this) → () → core::int
  return () → core::int => self::E2|ceil(#this);
static method E2|floor(lowered final core::int #this) → core::int {
  return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
  int floor() {} // Error.
      ^" in null;
}
static method E2|get#floor(lowered final core::int #this) → () → core::int
  return () → core::int => self::E2|floor(#this);
static method E3|get#isOdd(lowered final core::int #this) → core::bool
  return throw 42;
static method E3|get#isEven(lowered final core::int #this) → core::bool
  return throw 42;
static method main() → dynamic {}
