extension E ;
on String (){ }
class A {
  String operator[](int index) => "foo";
  void operator[]=(int index, String value) { }
}
class B extends A {
  void test() { }
}
warning(String s, List<String> l, Map<String, int> m) { }
main() { }
