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

static method test(dynamic x) → dynamic {
  {
    final synthesized dynamic #0#0 = x;
    final const synthesized core::int #0#3 = #C1;
    synthesized dynamic #0#6;
    synthesized core::bool #0#6#isSet = false;
    {
      hoisted core::String y;
      if(#0#0 is core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#0#6#isSet ?{dynamic} #0#6 : let final dynamic #t1 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) is core::String) {
        y = (#0#6#isSet ?{dynamic} #0#6 : let final dynamic #t2 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::String;
        {
          return y;
        }
      }
      else {
        return null;
      }
    }
  }
}
static method main() → dynamic {
  self::expectEquals(self::test(<core::String>["one", "two", "three"]), null);
  self::expectEquals(self::test(<core::String>["one"]), "one");
  self::expectEquals(self::test(<core::int>[1, 2, 3]), null);
  self::expectEquals(self::test(<core::int>[1]), null);
  self::expectEquals(self::test(<core::bool>[true, false]), null);
  self::expectEquals(self::test(<core::bool>[true]), null);
  self::expectEquals(self::test(<dynamic>[]), null);
}
static method expectEquals(dynamic x, dynamic y) → dynamic {
  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
    throw "Expected ${x} to be equal to ${y}.";
  }
}

constants  {
  #C1 = 1
}
