extension Extension<T> on T {
  T method1() => this;
}

extension BoundExtension<T extends Class> on T {
  T method2() => this;
}

class Class {}

class SubClass extends Class {}

Class test1<T>(T t1) {}
test2<T extends Class>(T t2) {}
test3<T>(T t3) {}
main() {}
