library /*isNonNullableByDefault*/;
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 async 
  ;
static method testForElementErrorsNotAsync(asy::Stream<core::int> stream) → dynamic
  ;
static method testPromotion(self::A a) → dynamic
  ;
static method main() → dynamic
  ;
