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

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class C extends core::Object {
  field self::A aField = throw "";
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  set aSetter(self::A value) → void {}
  method test() → void {
    self::A aLocal;
    for (final self::A #t1 in self::f<core::Iterable<self::A>>()) {
      aLocal = #t1;
    }
    for (final self::A #t2 in self::f<core::Iterable<self::A>>()) {
      this.{self::C::aField} = #t2;
    }
    for (final self::A #t3 in self::f<core::Iterable<self::A>>()) {
      this.{self::C::aSetter} = #t3;
    }
    for (final self::A #t4 in self::f<core::Iterable<self::A>>()) {
      self::aTopLevel = #t4;
    }
    for (final self::A #t5 in self::f<core::Iterable<self::A>>()) {
      self::aTopLevelSetter = #t5;
    }
  }
}
static field self::A aTopLevel = throw "";
static method f<T extends core::Object? = dynamic>() → self::f::T%
  return throw "";
static set aTopLevelSetter(self::A value) → void {}
static method main() → dynamic {}
