library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:10:26: Error: Getter not found: 'foo1'.
// A Function() bar1() => A.foo1; // Ok.
//                          ^^^^
//
// pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:11:26: Error: Getter not found: 'foo2'.
// A Function() bar2() => A.foo2; // Error.
//                          ^^^^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  constructor foo1() → self::A
    : super core::Object::•() {}
  constructor foo2(core::int x) → self::A
    : super core::Object::•() {}
}
static method bar1() → () → self::A
  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:10:26: Error: Getter not found: 'foo1'.
A Function() bar1() => A.foo1; // Ok.
                         ^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
static method bar2() → () → self::A
  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:11:26: Error: Getter not found: 'foo2'.
A Function() bar2() => A.foo2; // Error.
                         ^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
static method main() → dynamic {}
