library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

import "org-dartlang-testcase:///weekly_bot_91_failure_variation_1_lib.dart";

extension _extension#0 on core::int {
  method _foo = self::_extension#0|_foo;
  tearoff _foo = self::_extension#0|get#_foo;
}
static method _extension#0|_foo<T extends core::Object? = dynamic>(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a = #C1}) → void
  return throw "";
static method _extension#0|get#_foo(lowered final core::int #this) → <T extends core::Object? = dynamic>((T%) → void, {a: T%}) → void
  return <T extends core::Object? = dynamic>((T%) → void x, {T% a = #C1}) → void => self::_extension#0|_foo<T%>(#this, x, a: a);
static method main() → dynamic {}

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1_lib.dart:4:5: Error: The method '_foo' isn't defined for the class 'int'.
// Try correcting the name to the name of an existing method, or defining a method named '_foo'.
//   i._foo((x) {
//     ^^^^
//
import self as self2;
import "dart:core" as core;

import "org-dartlang-testcase:///weekly_bot_91_failure_variation_1.dart";

static method bar(core::int i) → dynamic {
  invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1_lib.dart:4:5: Error: The method '_foo' isn't defined for the class 'int'.
Try correcting the name to the name of an existing method, or defining a method named '_foo'.
  i._foo((x) {
    ^^^^" in i{<unresolved>}._foo((dynamic x) → Null {
    x;
  }, a: 0);
}

constants  {
  #C1 = null
}
