library test /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

import "dart:async";

class Foo extends core::Object {
  field core::int bar;
  synthetic constructor •() → self::Foo
    ;
}
class Bar<T extends asy::Stream<core::String>> extends core::Object {
  synthetic constructor •() → self::Bar<self::Bar::T>
    ;
  method foo(covariant-by-class self::Bar::T t) → dynamic async 
    ;
}
class Baz<T extends core::Object? = dynamic, E extends asy::Stream<self::Baz::T%> = asy::Stream<dynamic>, S extends self::Baz::E = asy::Stream<dynamic>> extends core::Object {
  synthetic constructor •() → self::Baz<self::Baz::T%, self::Baz::E, self::Baz::S>
    ;
  method foo(covariant-by-class self::Baz::S t) → dynamic async 
    ;
}
abstract class MyStream<T extends core::Object? = dynamic> extends asy::Stream<self::MyStream::T%> {
  static factory •<T extends core::Object? = dynamic>() → self::MyStream<self::MyStream::•::T%>
    ;
}
static method test() → dynamic async 
  ;
static method main() → dynamic
  ;
