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::_GrowableList::_literal1<core::String*>("foo");
    final core::Iterable<core::String*>* #t2 = list;
    if(!(#t2 == null))
      #t1.{core::List::addAll}(#t2){(core::Iterable<core::String*>*) →* void};
  } =>#t1;
}
static method nullAwareSetSpread(core::Set<core::String*>* set) → dynamic {
  set = block {
    final core::Set<core::String*>* #t3 = new col::_CompactLinkedHashSet::•<core::String*>();
    #t3.{core::Set::add}("foo"){(core::String*) →* core::bool*};
    final core::Iterable<core::String*>* #t4 = set;
    if(!(#t4 == null))
      #t3.{core::Set::addAll}(#t4){(core::Iterable<core::String*>*) →* void};
  } =>#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::[]=}(0, "foo"){(core::int*, core::String*) →* void};
    final core::Map<core::int*, core::String*>* #t6 = map;
    if(!(#t6 == null)) {
      core::Iterator<core::MapEntry<core::int*, core::String*>>* :sync-for-iterator = #t6.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::int*, core::String*>* #t7 = :sync-for-iterator.{core::Iterator::current};
        #t5.{core::Map::[]=}(#t7.{core::MapEntry::key}{core::int*}, #t7.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
      }
    }
  } =>#t5;
}
static method main() → dynamic {
  self::nullAwareListSpread(null);
  self::nullAwareSetSpread(null);
  self::nullAwareMapSpread(null);
}
