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 {
  method ceil = self::E1|ceil;
  tearoff ceil = self::E1|get#ceil;
}
extension E2 on core::int {
  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 {
  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 {}
