library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/extensions/check_bounds.dart:24:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
//  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try correcting the name to the name of an existing method, or defining a method named 'method'.
//   classA.method(); // Expect method not found.
//          ^^^^^^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:25:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classA).method(); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:26:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classA).method(); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:28:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classA).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:28:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classA).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:29:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:29:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:30:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
//                                      ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:30:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:31:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:31:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:32:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:32:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:33:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
//                                         ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:33:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:34:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
//                        ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:35:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//                        ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:36:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension<B>(classB).genericMethod<B>(a);
//                                         ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:40:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classB).method(); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:43:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   classB.genericMethod(a); // Expect bounds mismatch.
//          ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:44:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   classB.genericMethod<A>(a); // Expect bounds mismatch.
//          ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:45:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   classB.genericMethod<B>(a);
//                           ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:46:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classB).genericMethod(a); // Expect bounds mismatch.
//                     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:47:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension(classB).genericMethod<A>(a); // Expect bounds mismatch.
//                     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:48:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension(classB).genericMethod<B>(a);
//                                      ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:49:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:49:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:51:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
//                                         ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:52:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
//                        ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:53:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//                        ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:54:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension<B>(classB).genericMethod<B>(a);
//                                         ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:61:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
//  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try correcting the name to the name of an existing method, or defining a method named 'method'.
// final field1 = classA.method(); // Expect method not found.
//                       ^^^^^^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:62:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// final field2 = Extension(classA).method(); // Expect bounds mismatch.
//                ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:63:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
// final field3 = Extension<A>(classA).method(); // Expect bounds mismatch.
//                ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:64:29: Error: The argument type 'Class<A>' can't be assigned to the parameter type 'Class<B>'.
//  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// final field4 = Extension<B>(classA).method();
//                             ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
//                ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
//                ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:66:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
//                ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:66:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
//                ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:67:51: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
//                                                   ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
//                ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:68:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
// final field8 = Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
//                ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:68:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// final field8 = Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
//                ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:70:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//     Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
//     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:70:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//     Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
//     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:72:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//     Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
//                                           ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:72:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//     Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
//     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:74:26: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//     Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
//                          ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:76:26: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//     Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//                          ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:77:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// final field13 = Extension<B>(classB).genericMethod<B>(a);
//                                                       ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:81:17: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
// final field16 = Extension<A>(classB).method(); // Expect bounds mismatch.
//                 ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:84:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// final field18 = classB.genericMethod(a); // Expect bounds mismatch.
//                        ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:85:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
// final field19 = classB.genericMethod<A>(a); // Expect bounds mismatch.
//                        ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:86:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// final field20 = classB.genericMethod<B>(a);
//                                         ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:87:35: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// final field21 = Extension(classB).genericMethod(a); // Expect bounds mismatch.
//                                   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:89:23: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//     Extension(classB).genericMethod<A>(a); // Expect bounds mismatch.
//                       ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:90:52: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// final field23 = Extension(classB).genericMethod<B>(a);
//                                                    ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:92:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//     Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
//     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:92:5: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//     Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
//     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:94:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//     Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:94:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//     Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:96:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//     Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
//                                           ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:96:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//     Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
//     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:98:26: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//     Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
//                          ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:100:26: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//     Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//                          ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:101:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// final field29 = Extension<B>(classB).genericMethod<B>(a);
//                                                       ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:11:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
//  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try correcting the name to the name of an existing method, or defining a method named 'method'.
//   classA.method();
//          ^^^^^^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:12:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classA).method(); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:13:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classA).method(); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:15:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classA).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:15:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classA).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:16:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:16:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
//                                      ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:18:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:18:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:19:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:19:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
//                                         ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:21:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
//                        ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:22:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//                        ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:23:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension<B>(classB).genericMethod<B>(a);
//                                         ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:27:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classB).method(); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:30:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   classB.genericMethod(a); // Expect bounds mismatch.
//          ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:31:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   classB.genericMethod<A>(a); // Expect bounds mismatch.
//          ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   classB.genericMethod<B>(a);
//                           ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:33:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension(classB).genericMethod(a); // Expect bounds mismatch.
//                     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:34:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension(classB).genericMethod<A>(a); // Expect bounds mismatch.
//                     ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension(classB).genericMethod<B>(a);
//                                      ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:36:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:36:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
//                                         ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
//   ^
// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
// extension Extension<T extends B> on Class<T> {
//                     ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:39:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
//                        ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:40:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
// Try changing type arguments so that they conform to the bounds.
//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
//                        ^
// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
//   genericMethod<S extends B>(S s) {}
//                 ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
//   Extension<B>(classB).genericMethod<B>(a);
//                                         ^
//
import self as self;
import "dart:core" as core;

part check_bounds_lib.dart;
class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
}
class Class<T extends self::A> extends core::Object {
  synthetic constructor •() → self::Class<self::Class::T>
    : super core::Object::•()
    ;
}
extension Extension<T extends self::B> on self::Class<T> {
  method method = self::Extension|method;
  tearoff method = self::Extension|get#method;
  method genericMethod = self::Extension|genericMethod;
  tearoff genericMethod = self::Extension|get#genericMethod;
}
static final field self::A a = new self::A::•();
static final field self::Class<self::A> classA = new self::Class::•<self::A>();
static final field self::Class<self::B> classB = new self::Class::•<self::B>();
static final field dynamic field1 = invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:61:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
 - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
Try correcting the name to the name of an existing method, or defining a method named 'method'.
final field1 = classA.method(); // Expect method not found.
                      ^^^^^^" in self::classA{<unresolved>}.method();
static final field dynamic field2 = self::Extension|method<self::A>(self::classA);
static final field dynamic field3 = self::Extension|method<self::A>(self::classA);
static final field dynamic field4 = self::Extension|method<self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:64:29: Error: The argument type 'Class<A>' can't be assigned to the parameter type 'Class<B>'.
 - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
final field4 = Extension<B>(classA).method();
                            ^" in self::classA as{TypeError,ForNonNullableByDefault} self::Class<self::B>);
static final field dynamic field5 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
static final field dynamic field6 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
static final field dynamic field7 = self::Extension|genericMethod<self::A, self::B>(self::classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:67:51: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
                                                  ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
static final field dynamic field8 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
static final field dynamic field9 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
static final field dynamic field10 = self::Extension|genericMethod<self::A, self::B>(self::classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:72:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
    Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
                                          ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
static final field dynamic field11 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
static final field dynamic field12 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
static final field dynamic field13 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:77:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
final field13 = Extension<B>(classB).genericMethod<B>(a);
                                                      ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
static final field dynamic field14 = self::Extension|method<self::B>(self::classB);
static final field dynamic field15 = self::Extension|method<self::B>(self::classB);
static final field dynamic field16 = self::Extension|method<self::A>(self::classB);
static final field dynamic field17 = self::Extension|method<self::B>(self::classB);
static final field dynamic field18 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
static final field dynamic field19 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
static final field dynamic field20 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:86:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
final field20 = classB.genericMethod<B>(a);
                                        ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
static final field dynamic field21 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
static final field dynamic field22 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
static final field dynamic field23 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:90:52: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
final field23 = Extension(classB).genericMethod<B>(a);
                                                   ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
static final field dynamic field24 = self::Extension|genericMethod<self::A, self::A>(self::classB, self::a);
static final field dynamic field25 = self::Extension|genericMethod<self::A, self::A>(self::classB, self::a);
static final field dynamic field26 = self::Extension|genericMethod<self::A, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:96:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
    Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
                                          ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
static final field dynamic field27 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
static final field dynamic field28 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
static final field dynamic field29 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:101:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
final field29 = Extension<B>(classB).genericMethod<B>(a);
                                                      ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
static method Extension|method<T extends self::B>(lowered final self::Class<self::Extension|method::T> #this) → dynamic {}
static method Extension|get#method<T extends self::B>(lowered final self::Class<self::Extension|get#method::T> #this) → () → dynamic
  return () → dynamic => self::Extension|method<self::Extension|get#method::T>(#this);
static method Extension|genericMethod<T extends self::B, S extends self::B>(lowered final self::Class<self::Extension|genericMethod::T> #this, self::Extension|genericMethod::S s) → dynamic {}
static method Extension|get#genericMethod<T extends self::B>(lowered final self::Class<self::Extension|get#genericMethod::T> #this) → <S extends self::B>(S) → dynamic
  return <S extends self::B>(S s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T, S>(#this, s);
static method main() → dynamic {}
static method test(self::A a) → dynamic {
  self::Class<self::A> classA = new self::Class::•<self::A>();
  self::Class<self::B> classB = new self::Class::•<self::B>();
  invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:24:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
 - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
Try correcting the name to the name of an existing method, or defining a method named 'method'.
  classA.method(); // Expect method not found.
         ^^^^^^" in classA{<unresolved>}.method();
  self::Extension|method<self::A>(classA);
  self::Extension|method<self::A>(classA);
  self::Extension|method<self::B>(classB);
  self::Extension|genericMethod<self::A, self::A>(classA, a);
  self::Extension|genericMethod<self::A, self::A>(classA, a);
  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:30:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|genericMethod<self::A, self::A>(classA, a);
  self::Extension|genericMethod<self::A, self::A>(classA, a);
  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:33:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:36:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension<B>(classB).genericMethod<B>(a);
                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|method<self::B>(classB);
  self::Extension|method<self::B>(classB);
  self::Extension|method<self::A>(classB);
  self::Extension|method<self::B>(classB);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:45:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  classB.genericMethod<B>(a);
                          ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:48:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension(classB).genericMethod<B>(a);
                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|genericMethod<self::A, self::A>(classB, a);
  self::Extension|genericMethod<self::A, self::A>(classB, a);
  self::Extension|genericMethod<self::A, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:51:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:54:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension<B>(classB).genericMethod<B>(a);
                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
}
static method /* from org-dartlang-testcase:///check_bounds_lib.dart */ testInPart(self::A a) → dynamic {
  self::Class<self::A> classA = new self::Class::•<self::A>();
  self::Class<self::B> classB = new self::Class::•<self::B>();
  invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:11:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
 - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
Try correcting the name to the name of an existing method, or defining a method named 'method'.
  classA.method();
         ^^^^^^" in classA{<unresolved>}.method();
  self::Extension|method<self::A>(classA);
  self::Extension|method<self::A>(classA);
  self::Extension|method<self::B>(classB);
  self::Extension|genericMethod<self::A, self::A>(classA, a);
  self::Extension|genericMethod<self::A, self::A>(classA, a);
  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|genericMethod<self::A, self::A>(classA, a);
  self::Extension|genericMethod<self::A, self::A>(classA, a);
  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:23:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension<B>(classB).genericMethod<B>(a);
                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|method<self::B>(classB);
  self::Extension|method<self::B>(classB);
  self::Extension|method<self::A>(classB);
  self::Extension|method<self::B>(classB);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  classB.genericMethod<B>(a);
                          ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension(classB).genericMethod<B>(a);
                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|genericMethod<self::A, self::A>(classB, a);
  self::Extension|genericMethod<self::A, self::A>(classB, a);
  self::Extension|genericMethod<self::A, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::A>(classB, a);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
 - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  Extension<B>(classB).genericMethod<B>(a);
                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
}
