library;
//
// Problems in library:
//
// pkg/front_end/testcases/extensions/issue44003.dart:14:8: Error: 'foo' is already declared in this scope.
//   void foo(String baz, int a) {
//        ^^^
// pkg/front_end/testcases/extensions/issue44003.dart:10:8: Context: Previous declaration of 'foo'.
//   void foo(String bar) {
//        ^^^
//
// pkg/front_end/testcases/extensions/issue44003.dart:6:8: Error: The method 'foo' isn't defined for the type 'List<String>'.
//  - 'List' is from 'dart:core'.
// Try correcting the name to the name of an existing method, or defining a method named 'foo'.
//   args.foo('1', 2);
//        ^^^
//
import self as self;
import "dart:core" as core;

extension /* unnamed */ _extension#0 on core::List<core::String> {
  method foo = self::_extension#0|foo;
  method tearoff foo = self::_extension#0|get#foo;
}
static method test(core::List<core::String> args) → void {
  invalid-expression "pkg/front_end/testcases/extensions/issue44003.dart:6:8: Error: The method 'foo' isn't defined for the type 'List<String>'.
 - 'List' is from 'dart:core'.
Try correcting the name to the name of an existing method, or defining a method named 'foo'.
  args.foo('1', 2);
       ^^^" in args{<unresolved>}.foo("1", 2);
}
static extension-member method _extension#0|foo(lowered final core::List<core::String> #this, core::String bar) → void {
  core::print(1);
}
static extension-member method _extension#0|get#foo(lowered final core::List<core::String> #this) → (core::String) → void
  return (core::String bar) → void => self::_extension#0|foo(#this, bar);
static method main() → dynamic {}
