library;
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static method nullAwareListSpread(core::List<core::String*>* list) → dynamic {
  list = block {
    final core::List<core::String*>* #t1 = <core::String*>["foo"];
    final core::Iterable<core::String*>* #t2 = list;
    if(!#t2.{core::Object::==}(null))
      #t1.{core::List::addAll}{Invariant}(#t2);
  } =>#t1;
}
static method nullAwareSetSpread(core::Set<core::String*>* set) → dynamic {
  set = block {
    final core::Set<core::String*>* #t3 = col::LinkedHashSet::•<core::String*>();
    #t3.{core::Set::add}{Invariant}("foo");
    final core::Iterable<core::String*>* #t4 = set;
    if(!#t4.{core::Object::==}(null))
      #t3.{core::Set::addAll}{Invariant}(#t4);
  } =>#t3;
}
static method nullAwareMapSpread(core::Map<core::int*, core::String*>* map) → dynamic {
  map = block {
    final core::Map<core::int*, core::String*>* #t5 = <core::int*, core::String*>{};
    #t5.{core::Map::[]=}{Invariant}(0, "foo");
    final core::Map<core::int*, core::String*>* #t6 = map;
    if(!#t6.{core::Object::==}(null))
      for (final core::MapEntry<core::int*, core::String*>* #t7 in #t6.{core::Map::entries})
        #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
  } =>#t5;
}
static method main() → dynamic {
  self::nullAwareListSpread(null);
  self::nullAwareSetSpread(null);
  self::nullAwareMapSpread(null);
}
