oracle<T>([T t]) => true;
testIfElement(dynamic dynVar, List<int> listInt, List<double> listDouble,
    Map<String, int> mapToInt, Map<String, double> mapToDouble) {}
testIfElementErrors(Map<int, int> map) {}
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) {}

class A {}

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

testPromotion(A a) {}
main() {}
