class Class1 {
  int field;
  Class1(this.field);
  String toString() => 'Class1($field)';
}

class Class2 {
  int field;
  Class2(this.field);
  String toString() => 'Class2($field)';
}

extension on Class1 {
  int method() {}
  num genericMethod<T extends num>(T t) {}
  int get property {}
  set property(int value) {}
}

extension on Class2 {
  int method() {}
  num genericMethod<T extends num>(T t) {}
  int get property {}
  set property(int value) {}
}

main() {}
testExtension1(Class1 c0, Class1 c1, Class1? c0n, Class1? c1n) {}
testExtension2(Class2 c0, Class2 c1, Class2? c0n) {}
expect(expected, actual) {}
