library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:18:16: Error: Method not found: 'method'.
//   Extension(s).method();
//                ^^^^^^
//
// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Member not found: 'method'.
//   Extension(s).method;
//                ^^^^^^
//
// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:20:16: Error: Setter not found: 'method'.
//   Extension(s).method = 42;
//                ^^^^^^
//
// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Member not found: 'getter'.
//   Extension(s).getter;
//                ^^^^^^
//
// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:22:16: Error: Setter not found: 'getter'.
//   Extension(s).getter = 42;
//                ^^^^^^
//
// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Member not found: 'setter'.
//   Extension(s).setter;
//                ^^^^^^
//
// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:24:16: Error: Setter not found: 'setter'.
//   Extension(s).setter = 42;
//                ^^^^^^
//
// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Member not found: 'property'.
//   Extension(s).property;
//                ^^^^^^^^
//
// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:26:16: Error: Setter not found: 'property'.
//   Extension(s).property = 42;
//                ^^^^^^^^
//
// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Member not found: 'field'.
//   Extension(s).field;
//                ^^^^^
//
// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:28:16: Error: Setter not found: 'field'.
//   Extension(s).field = 42;
//                ^^^^^
//
import self as self;
import "dart:core" as core;

extension Extension on core::String {
  static method method = self::Extension|method;
  static get getter = get self::Extension|getter;
  static get property = get self::Extension|property;
  static field field = self::Extension|field;
  static set setter = set self::Extension|setter;
  static set property = set self::Extension|property;
}
static field dynamic Extension|field;
static method Extension|method() → dynamic {}
static get Extension|getter() → dynamic
  return null;
static set Extension|setter(dynamic _) → void {}
static get Extension|property() → dynamic
  return null;
static set Extension|property(dynamic _) → void {}
static method main() → dynamic {}
static method errors() → dynamic {
  core::String s = "";
  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:18:16: Error: Method not found: 'method'.
  Extension(s).method();
               ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Member not found: 'method'.
  Extension(s).method;
               ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:20:16: Error: Setter not found: 'method'.
  Extension(s).method = 42;
               ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Member not found: 'getter'.
  Extension(s).getter;
               ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:22:16: Error: Setter not found: 'getter'.
  Extension(s).getter = 42;
               ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Member not found: 'setter'.
  Extension(s).setter;
               ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:24:16: Error: Setter not found: 'setter'.
  Extension(s).setter = 42;
               ^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Member not found: 'property'.
  Extension(s).property;
               ^^^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:26:16: Error: Setter not found: 'property'.
  Extension(s).property = 42;
               ^^^^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Member not found: 'field'.
  Extension(s).field;
               ^^^^^";
  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:28:16: Error: Setter not found: 'field'.
  Extension(s).field = 42;
               ^^^^^";
}
