// @dart = 2.9
class A {}

class B extends A {
  int get foo => 42;
}

main() {}
oracle<T>([T t]) => true;
testForElement(
    dynamic dynVar,
    List<int> listInt,
    List<double> listDouble,
    int index,
    Map<String, int> mapStringInt,
    Map<String, double> mapStringDouble) {}
testForElementErrors(Map<int, int> map, List<int> list) async {}
testForElementErrorsNotAsync(Stream<int> stream) {}
testIfElement(dynamic dynVar, List<int> listInt, List<double> listDouble,
    Map<String, int> mapToInt, Map<String, double> mapToDouble) {}
testIfElementErrors(Map<int, int> map) {}
testPromotion(A a) {}
