library;
//
// Problems in library:
//
// pkg/front_end/testcases/extensions/check_bounds.dart:61:23: Error: The method 'method' isn't defined for the type '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(); // Error: Expect method not found.
//                       ^^^^^^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:62:26: 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 field2 = Extension(classA).method(); // Error: Expect bounds mismatch.
//                          ^
//
// 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(); // Error: 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:26: 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 field5 = Extension(classA).genericMethod(a); // Error: Expect bounds mismatch.
//                          ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:65:48: 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 field5 = Extension(classA).genericMethod(a); // Error: Expect bounds mismatch.
//                                                ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:66:26: 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 field6 = Extension(classA).genericMethod<A>(a); // Error: Expect bounds mismatch.
//                          ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:66:34: 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); // Error: 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:26: 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 field7 = Extension(classA).genericMethod<B>(a); // Error: Expect bounds mismatch.
//                          ^
//
// 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); // Error: Expect bounds mismatch.
//                                                   ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:68: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 field8 = Extension<A>(classA).genericMethod(a); // Error: Expect bounds mismatch.
//                                                   ^
//
// 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); // Error: 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 '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); // Error: 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); // Error: 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); // Error: 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); // Error: 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:40: 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(a); // Error: Expect bounds mismatch.
//                                        ^
//
// 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); // Error: 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(); // Error: 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: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'.
// final field18 = classB.genericMethod(a); // Error: Expect bounds mismatch.
//                                      ^
//
// 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); // Error: 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:49: 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 field21 = Extension(classB).genericMethod(a); // Error: Expect bounds mismatch.
//                                                 ^
//
// 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); // Error: 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:40: 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(a); // Error: Expect bounds mismatch.
//                                        ^
//
// 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); // Error: 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 '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); // Error: 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); // Error: 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); // Error: 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); // Error: 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:40: 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(a); // Error: Expect bounds mismatch.
//                                        ^
//
// 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); // Error: 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.dart:24:10: Error: The method 'method' isn't defined for the type '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(); // Error: Expect method not found.
//          ^^^^^^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:25:13: 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'.
//   Extension(classA).method(); // Error: Expect bounds mismatch.
//             ^
//
// 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(); // Error: 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:13: 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'.
//   Extension(classA).genericMethod(a); // Error: Expect bounds mismatch.
//             ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:28:35: 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(a); // Error: Expect bounds mismatch.
//                                   ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:29:13: 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'.
//   Extension(classA).genericMethod<A>(a); // Error: Expect bounds mismatch.
//             ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:29: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(classA).genericMethod<A>(a); // Error: 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:13: 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'.
//   Extension(classA).genericMethod<B>(a); // Error: Expect bounds mismatch.
//             ^
//
// 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); // Error: Expect bounds mismatch.
//                                      ^
//
// pkg/front_end/testcases/extensions/check_bounds.dart:31: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<A>(classA).genericMethod(a); // Error: Expect bounds mismatch.
//                                      ^
//
// 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); // Error: 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 '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); // Error: 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); // Error: 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); // Error: 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); // Error: 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: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<B>(classB).genericMethod(a); // Error: Expect bounds mismatch.
//                                      ^
//
// 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); // Error: 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(); // Error: 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:24: 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(a); // Error: Expect bounds mismatch.
//                        ^
//
// 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); // Error: 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:35: 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(a); // Error: Expect bounds mismatch.
//                                   ^
//
// 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); // Error: 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: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<A>(classB).genericMethod(a); // Error: Expect bounds mismatch.
//                                      ^
//
// 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); // Error: 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 '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); // Error: 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); // Error: 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); // Error: 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); // Error: 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: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<B>(classB).genericMethod(a); // Error: Expect bounds mismatch.
//                                      ^
//
// 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); // Error: 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_lib.dart:11:10: Error: The method 'method' isn't defined for the type '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:13: 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'.
//   Extension(classA).method(); // Expect bounds mismatch.
//             ^
//
// 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:13: 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'.
//   Extension(classA).genericMethod(a); // Expect bounds mismatch.
//             ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:15:35: 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(a); // Expect bounds mismatch.
//                                   ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:16:13: 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'.
//   Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
//             ^
//
// pkg/front_end/testcases/extensions/check_bounds_lib.dart:16: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(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:13: 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'.
//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
//             ^
//
// 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:18: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<A>(classA).genericMethod(a); // Expect bounds mismatch.
//                                      ^
//
// 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: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: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<B>(classB).genericMethod(a); // Expect bounds mismatch.
//                                      ^
//
// 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:24: 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(a); // Expect bounds mismatch.
//                        ^
//
// 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:35: 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(a); // Expect bounds mismatch.
//                                   ^
//
// 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: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<A>(classB).genericMethod(a); // Expect bounds mismatch.
//                                      ^
//
// 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: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: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<B>(classB).genericMethod(a); // Expect bounds mismatch.
//                                      ^
//
// 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;
  method tearoff method = self::Extension|get#method;
  method genericMethod = self::Extension|genericMethod;
  method 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 type '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(); // Error: Expect method not found.
                      ^^^^^^" in self::classA{<unresolved>}.method();
static final field dynamic field2 = self::Extension|method<self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:62:26: 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 field2 = Extension(classA).method(); // Error: Expect bounds mismatch.
                         ^" in self::classA as{TypeError} self::Class<self::B>);
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} self::Class<self::B>);
static final field dynamic field5 = self::Extension|genericMethod<self::B, self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:65:26: 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 field5 = Extension(classA).genericMethod(a); // Error: Expect bounds mismatch.
                         ^" in self::classA as{TypeError} self::Class<self::B>, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:65:48: 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 field5 = Extension(classA).genericMethod(a); // Error: Expect bounds mismatch.
                                               ^" in self::a as{TypeError} self::B);
static final field dynamic field6 = self::Extension|genericMethod<self::B, self::A>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:66:26: 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 field6 = Extension(classA).genericMethod<A>(a); // Error: Expect bounds mismatch.
                         ^" in self::classA as{TypeError} self::Class<self::B>, self::a);
static final field dynamic field7 = self::Extension|genericMethod<self::B, self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:67:26: 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 field7 = Extension(classA).genericMethod<B>(a); // Error: Expect bounds mismatch.
                         ^" in self::classA as{TypeError} self::Class<self::B>, 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); // Error: Expect bounds mismatch.
                                                  ^" in self::a as{TypeError} self::B);
static final field dynamic field8 = self::Extension|genericMethod<self::A, self::B>(self::classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:68: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 field8 = Extension<A>(classA).genericMethod(a); // Error: Expect bounds mismatch.
                                                  ^" in self::a as{TypeError} self::B);
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); // Error: Expect bounds mismatch.
                                          ^" in self::a as{TypeError} self::B);
static final field dynamic field11 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:74:40: 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(a); // Error: Expect bounds mismatch.
                                       ^" in self::a as{TypeError} self::B);
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} 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::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:84: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'.
final field18 = classB.genericMethod(a); // Error: Expect bounds mismatch.
                                     ^" in self::a as{TypeError} self::B);
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} self::B);
static final field dynamic field21 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:87:49: 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 field21 = Extension(classB).genericMethod(a); // Error: Expect bounds mismatch.
                                                ^" in self::a as{TypeError} self::B);
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} self::B);
static final field dynamic field24 = self::Extension|genericMethod<self::A, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:92:40: 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(a); // Error: Expect bounds mismatch.
                                       ^" in self::a as{TypeError} self::B);
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); // Error: Expect bounds mismatch.
                                          ^" in self::a as{TypeError} self::B);
static final field dynamic field27 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:98:40: 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(a); // Error: Expect bounds mismatch.
                                       ^" in self::a as{TypeError} self::B);
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} self::B);
static extension-member method Extension|method<T extends self::B>(lowered final self::Class<self::Extension|method::T> #this) → dynamic {}
static extension-member 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 extension-member 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 extension-member 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 type '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(); // Error: Expect method not found.
         ^^^^^^" in classA{<unresolved>}.method();
  self::Extension|method<self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:25:13: 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'.
  Extension(classA).method(); // Error: Expect bounds mismatch.
            ^" in classA as{TypeError} self::Class<self::B>);
  self::Extension|method<self::A>(classA);
  self::Extension|method<self::B>(classB);
  self::Extension|genericMethod<self::B, self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:28:13: 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'.
  Extension(classA).genericMethod(a); // Error: Expect bounds mismatch.
            ^" in classA as{TypeError} self::Class<self::B>, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:28:35: 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(a); // Error: Expect bounds mismatch.
                                  ^" in a as{TypeError} self::B);
  self::Extension|genericMethod<self::B, self::A>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:29:13: 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'.
  Extension(classA).genericMethod<A>(a); // Error: Expect bounds mismatch.
            ^" in classA as{TypeError} self::Class<self::B>, a);
  self::Extension|genericMethod<self::B, self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:30:13: 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'.
  Extension(classA).genericMethod<B>(a); // Error: Expect bounds mismatch.
            ^" in classA as{TypeError} self::Class<self::B>, 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); // Error: Expect bounds mismatch.
                                     ^" in a as{TypeError} self::B);
  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:31: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<A>(classA).genericMethod(a); // Error: Expect bounds mismatch.
                                     ^" in a as{TypeError} self::B);
  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); // Error: Expect bounds mismatch.
                                        ^" in a as{TypeError} self::B);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:34: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<B>(classB).genericMethod(a); // Error: Expect bounds mismatch.
                                     ^" in a as{TypeError} self::B);
  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} 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::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:43:24: 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(a); // Error: Expect bounds mismatch.
                       ^" in a as{TypeError} self::B);
  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} self::B);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:46:35: 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(a); // Error: Expect bounds mismatch.
                                  ^" in a as{TypeError} self::B);
  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} self::B);
  self::Extension|genericMethod<self::A, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:49: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<A>(classB).genericMethod(a); // Error: Expect bounds mismatch.
                                     ^" in a as{TypeError} self::B);
  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); // Error: Expect bounds mismatch.
                                        ^" in a as{TypeError} self::B);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:52: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<B>(classB).genericMethod(a); // Error: Expect bounds mismatch.
                                     ^" in a as{TypeError} self::B);
  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} 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 type '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::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:12:13: 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'.
  Extension(classA).method(); // Expect bounds mismatch.
            ^" in classA as{TypeError} self::Class<self::B>);
  self::Extension|method<self::A>(classA);
  self::Extension|method<self::B>(classB);
  self::Extension|genericMethod<self::B, self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:15:13: 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'.
  Extension(classA).genericMethod(a); // Expect bounds mismatch.
            ^" in classA as{TypeError} self::Class<self::B>, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:15:35: 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(a); // Expect bounds mismatch.
                                  ^" in a as{TypeError} self::B);
  self::Extension|genericMethod<self::B, self::A>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:16:13: 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'.
  Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
            ^" in classA as{TypeError} self::Class<self::B>, a);
  self::Extension|genericMethod<self::B, self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:13: 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'.
  Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
            ^" in classA as{TypeError} self::Class<self::B>, 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} self::B);
  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:18: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<A>(classA).genericMethod(a); // Expect bounds mismatch.
                                     ^" in a as{TypeError} self::B);
  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} self::B);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:21: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<B>(classB).genericMethod(a); // Expect bounds mismatch.
                                     ^" in a as{TypeError} self::B);
  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} 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::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:30:24: 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(a); // Expect bounds mismatch.
                       ^" in a as{TypeError} self::B);
  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} self::B);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:33:35: 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(a); // Expect bounds mismatch.
                                  ^" in a as{TypeError} self::B);
  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} self::B);
  self::Extension|genericMethod<self::A, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:36: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<A>(classB).genericMethod(a); // Expect bounds mismatch.
                                     ^" in a as{TypeError} self::B);
  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} self::B);
  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:39: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<B>(classB).genericMethod(a); // Expect bounds mismatch.
                                     ^" in a as{TypeError} self::B);
  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} self::B);
}
