library;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

class A extends core::Object {
  synthetic constructor •() → self::A*
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B*
    ;
  get foo() → core::int*
    ;
}
static method oracle<T extends core::Object* = dynamic>([self::oracle::T* t]) → dynamic
  ;
static method testIfElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::Map<core::String*, core::int*>* mapToInt, core::Map<core::String*, core::double*>* mapToDouble) → dynamic
  ;
static method testIfElementErrors(core::Map<core::int*, core::int*>* map) → dynamic
  ;
static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic
  ;
static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic
  ;
static method testForElementErrorsNotAsync(asy::Stream<core::int*>* stream) → dynamic
  ;
static method testPromotion(self::A* a) → dynamic
  ;
static method main() → dynamic
  ;
