part 'check_bounds_lib.dart';
class A {
}
class B extends A {
}
class Class<T extends A> {
}
extension Extension<T extends B> ( ){ }
on Class<T> (){ }
main() { }
test() { }
final A a = new A();
final Class<A> classA = new Class<A>();
final field1 = classA.method();
final field2 = Extension(classA).method();
final field3 = Extension<A>(classA).method();
final field4 = Extension<B>(classA).method();
final field5 = Extension(classA).genericMethod(a);
final field6 = Extension(classA).genericMethod<A>(a);
final field7 = Extension(classA).genericMethod<B>(a);
final field8 = Extension<A>(classA).genericMethod(a);
final field9 = Extension<A>(classA).genericMethod<A>(a);
final field10 = Extension<A>(classA).genericMethod<B>(a);
final field11 = Extension<B>(classA).genericMethod(a);
final field12 = Extension<B>(classA).genericMethod<A>(a);
final field13 = Extension<B>(classA).genericMethod<B>(a);
final Class<B> classB = new Class<B>();
final field14 = classB.method();
final field15 = Extension(classB).method();
final field16 = Extension<A>(classB).method();
final field17 = Extension<B>(classB).method();
final field18 = classB.genericMethod(a);
final field19 = classB.genericMethod<A>(a);
final field20 = classB.genericMethod<B>(a);
final field21 = Extension(classB).genericMethod(a);
final field22 = Extension(classB).genericMethod<A>(a);
final field23 = Extension(classB).genericMethod<B>(a);
final field24 = Extension<A>(classB).genericMethod(a);
final field25 = Extension<A>(classB).genericMethod<A>(a);
final field26 = Extension<A>(classB).genericMethod<B>(a);
final field27 = Extension<B>(classB).genericMethod(a);
final field28 = Extension<B>(classB).genericMethod<A>(a);
final field29 = Extension<B>(classB).genericMethod<B>(a);
