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

import "dart: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>
    return null;
}
static method F<T extends core::Object = dynamic>() → self::F::T
  return null;
static method f() → asy::Future<dynamic> async {
  dynamic d;
  core::Object o;
  for (dynamic x in self::F<dynamic>()) {
  }
  for (dynamic x in self::F<dynamic>()) {
  }
  for (core::Object x in self::F<dynamic>()) {
  }
  for (final dynamic #t1 in self::F<dynamic>()) {
    d = #t1;
  }
  for (final dynamic #t2 in self::F<dynamic>()) {
    o = #t2;
  }
  await for (dynamic x in self::F<dynamic>()) {
  }
  await for (dynamic x in self::F<dynamic>()) {
  }
  await for (core::Object x in self::F<dynamic>()) {
  }
  await for (final dynamic #t3 in self::F<dynamic>()) {
    d = #t3;
  }
  await for (final dynamic #t4 in self::F<dynamic>()) {
    o = #t4;
  }
}
static method main() → asy::Future<dynamic> async {
  for (core::int x in <dynamic>[1, 2, 3]) {
  }
  for (core::num x in <dynamic>[1, 2, 3]) {
  }
  for (dynamic x in <dynamic>[1, 2, 3]) {
  }
  await for (core::int x in self::MyStream::•<dynamic>()) {
  }
  await for (dynamic x in self::MyStream::•<core::int>()) {
  }
}
