add(num n, int i, double d, Class<String> c, dynamic dyn, Never never,
    String string) {}

class Class<T> {
  Class<T> operator +(Class<T> other) => other;
  Class<T> operator -() => this;
  Class<T> operator [](int index) => this;
  int method(double o) => 42;
  operator []=(int index, Class<T> value) {}
}

compound(List<int> list, Map<String, double> map, Class<String> c, dynamic dyn,
    Never never) {}
indexGet(List<int> list, Map<String, double> map, Class<String> c, dynamic dyn,
    Never never, String string) {}
indexSet(List<int> list, Map<String, double> map, Class<String> c, dynamic dyn,
    Never never) {}
main() {}
unaryMinus(num n, int i, double d, Class<String> c, dynamic dyn, Never never,
    String string) {}
