================================================================================
generators/elementGenerators
================================================================================

res1 = new Listing {
  for (n in IntSeq(1, 5)) {
    when (n.isOdd) {
      n * 2
    }
  }
}

res1b = new Dynamic {
  for (n in IntSeq(1, 5)) {
    when (n.isOdd) {
      n * 2
    }
  }
}

res1c = new Listing {
  for (i, n in IntSeq(1, 5)) {
    when (n.isOdd) {
      i * n
    }
  }
}

res1d = new Dynamic {
  for (i, n in IntSeq(1, 5)) {
    when (n.isOdd) {
      i * n
    }
  }
}

res2 = new Listing {
  for (n in List(1, 2, 3, 4, 5)) {
    when (n.isOdd) {
      n * 2
    }
  }
}

res2b = new Dynamic {
  for (n in List(1, 2, 3, 4, 5)) {
    when (n.isOdd) {
      n * 2
    }
  }
}

res2c = new Listing {
  for (i, n in List(1, 2, 3, 4, 5)) {
    when (n.isOdd) {
      i * n
    }
  }
}

res2d = new Dynamic {
  for (i, n in List(1, 2, 3, 4, 5)) {
    when (n.isOdd) {
      i * n
    }
  }
}

res3 = new Listing {
  for (n in Set(1, 2, 3, 4, 5)) {
    when (n.isOdd) {
      n * 2
    }
  }
}

res3b = new Dynamic {
  for (n in Set(1, 2, 3, 4, 5)) {
    when (n.isOdd) {
      n * 2
    }
  }
}

res3c = new Listing {
  for (i, n in Set(1, 2, 3, 4, 5)) {
    when (n.isOdd) {
      i * n
    }
  }
}

res3d = new Dynamic {
  for (i, n in Set(1, 2, 3, 4, 5)) {
    when (n.isOdd) {
      i * n
    }
  }
}

res4 = new Listing {
  for (value in Map("one", 1, "two", 2)) {
    when (value.isOdd) {
      value
    }
  }
}

res4b = new Dynamic {
  for (value in Map("one", 1, "two", 2)) {
    when (value.isOdd) {
      value
    }
  }
}

res4c = new Listing {
  for (key, value in Map("one", 1, "two", 2)) {
    when (value.isOdd) {
      Pair(key, value)
    }
  }
}

res4d = new Dynamic {
  for (key, value in Map("one", 1, "two", 2)) {
    when (value.isOdd) {
      Pair(key, value)
    }
  }
}

res5 = new Listing {
  for (n in new Listing { 1; 2; 3; 4; 5 }) {
    when (n.isOdd) {
      n * 2
    }
  }
}

res5b = new Dynamic {
  for (n in new Listing { 1; 2; 3; 4; 5 }) {
    when (n.isOdd) {
      n * 2
    }
  }
}

res5c = new Listing {
  for (i, n in new Listing { 1; 2; 3; 4; 5 }) {
    when (n.isOdd) {
      i * n
    }
  }
}

res5d = new Dynamic {
  for (i, n in new Listing { 1; 2; 3; 4; 5 }) {
    when (n.isOdd) {
      i * n
    }
  }
}

res6 = new Listing {
  for (value in new Mapping { ["one"] = 1; ["two"] = 2; }) {
    when (value.isOdd) {
      value
    }
  }
}

res6b = new Dynamic {
  for (value in new Mapping { ["one"] = 1; ["two"] = 2; }) {
    when (value.isOdd) {
      value
    }
  }
}

res6c = new Listing {
  for (key, value in new Mapping { ["one"] = 1; ["two"] = 2; }) {
    when (value.isOdd) {
      Pair(key, value)
    }
  }
}

res6d = new Dynamic {
  for (key, value in new Mapping { ["one"] = 1; ["two"] = 2; }) {
    when (value.isOdd) {
      Pair(key, value)
    }
  }
}

res7 = new Listing {
  for (value in new Dynamic { ["one"] = 1; ["two"] = 2; }) {
    when (value.isOdd) {
      value
    }
  }
}

res7b = new Dynamic {
  for (value in new Dynamic { ["one"] = 1; ["two"] = 2; }) {
    when (value.isOdd) {
      value
    }
  }
}

res7c = new Listing {
  for (key, value in new Dynamic { ["one"] = 1; ["two"] = 2; }) {
    when (value.isOdd) {
      Pair(key, value)
    }
  }
}

res7d = new Dynamic {
  for (key, value in new Dynamic { ["one"] = 1; ["two"] = 2; }) {
    when (value.isOdd) {
      Pair(key, value)
    }
  }
}

res8 = new Listing {
  "one"
  when (1 + 1 == 2) { "two" }
  when (1 + 1 == 3) { "three" }
}

res8b = new Dynamic {
  "one"
  when (1 + 1 == 2) { "two" }
  when (1 + 1 == 3) { "three" }
}

res9 = new Listing {
  for (x in List("a", "b", "c")) {
    for (y in List("e", "f")) {
      x + y
    }
  }
}

re9b = new Dynamic {
  for (x in List("a", "b", "c")) {
    for (y in List("e", "f")) {
      x + y
    }
  }
}

res9c = new Listing {
  for (i1, x in List("a", "b", "c")) {
    for (i2, y in List("e", "f")) {
      Pair(i1 + i2, x + y)
    }
  }
}

re9d = new Dynamic {
  for (i1, x in List("a", "b", "c")) {
    for (i2, y in List("e", "f")) {
      Pair(i1 + i2, x + y)
    }
  }
}

res10 = new Listing {
  "one"
  for (n in IntSeq(1, 5)) {
    when (n.isOdd) {
      n * 2
    }
  }
  "two"
  for (x in List("a", "b", "c")) {
    for (y in List("e", "f")) {
      x + y
    }
  }
  "three"
}

res10b = new Dynamic {
  "one"
  for (n in IntSeq(1, 5)) {
    when (n.isOdd) {
      n * 2
    }
  }
  "two"
  for (x in List("a", "b", "c")) {
    for (y in List("e", "f")) {
      x + y
    }
  }
  "three"
}

// reuse same loop variable
res11 = new Listing {
  for (n in IntSeq(1, 3)) { n }
  for (n in List("a", "b", "c")) { n }
  for (n in IntSeq(1, 3)) { n }
}

// reuse same loop variable
res11b = new Dynamic {
  for (n in IntSeq(1, 3)) { n }
  for (n in List("a", "b", "c")) { n }
  for (n in IntSeq(1, 3)) { n }
}

// reuse same loop variable
res11c = new Listing {
  for (i, n in IntSeq(1, 3)) { Pair(i, n) }
  for (i, n in List("a", "b", "c")) { Pair(i, n) }
  for (i, n in IntSeq(1, 3)) { Pair(i, n) }
}

// reuse same loop variable
res11d = new Dynamic {
  for (i, n in IntSeq(1, 3)) { Pair(i, n) }
  for (i, n in List("a", "b", "c")) { Pair(i, n) }
  for (i, n in IntSeq(1, 3)) { Pair(i, n) }
}

local dynamicWithOnlyProperties = new Dynamic {
  foo = "Foo!"
  bar = 42
  baz = Pair(1337, "zab")
}
valueForOverProperties = new Dynamic {
  for (v in dynamicWithOnlyProperties) {
    [v] = v
  }
}
keyValueForOverProperties = new Dynamic {
  for (k, v in dynamicWithOnlyProperties) {
    [k] = v
  }
}

local dynamicWithAllMemberTypes = new Dynamic {
  propFoo = "foo"
  "elementBar"
  propBaz = 1337
  ["entryKeyQux"] = 42
  "elementQuux"
  ["entryKeyCorge"] = "corge"
}

valueForOverAllMembers = new Dynamic {
  for (v in dynamicWithAllMemberTypes) {
    v
  }
}

keyValueForOverAllMembers = new Dynamic {
  for (k, v in dynamicWithAllMemberTypes) {
    "\(k) -> \(v)"
  }
}

class Person {
  name: String
  age: Int
}

local pigeon: Person = new { name = "Pigeon" age = 42 }

valueForOverTyped = new Dynamic {
  for (v in pigeon.toDynamic()) {
    v
  }
}

keyValueForOverTyped = new Dynamic {
  for (k, v in pigeon.toDynamic()) {
    "\(k) -> \(v)"
  }
}

local overlappingPropertyNamesAndEntryKeys: Dynamic = new {
  foo = "property"
  ["foo"] = "entry"

  ["bar"] = "can only discern by iteration order (properties before entries)"
  bar = "can only discern by iteration order (properties before entries)"
}

valueForOverConflictingPropertiesAndEntries = new Dynamic {
  for (v in overlappingPropertyNamesAndEntryKeys) {
    v
  }
}

keyValueForOverConflictingPropertiesAndEntries = new Dynamic {
  for (k, v in overlappingPropertyNamesAndEntryKeys) {
    "\(k) -> \(v)"
  }
}

forWithMultipleMembers = new Dynamic {
  for (ch in List("a", "b", "c")) {
    ch
    ch + "x"
    ch + "y"
  }
}

forWithMultipleMembersNested = new Listing {
  for (ch in List("a", "b")) {
    for (k, v in Map("x", 1, "y", 2)) {
      ch + k + v.toString()
      v.toString() + k + ch
    }
    for (k, v in Map("xx", 11, "yy", 22)) {
      ch + k + v.toString()
      v.toString() + k + ch
    }
  }
}

whenWithMultipleMembers = new Dynamic {
  for (i, n in new Listing { 1; 2; 3; 4; 5 }) {
    when (n.isOdd) {
      i * n
      i * n * 2
    }
  }
}

whenWithMultipleMembersNested = new Listing {
  for (i, n in new Listing { 1; 2; 3; 4; 5 }) {
    when (n.isOdd) {
      when (n > 3) {
        i * n
        i * n * 2
      }
    }
  }
}

whenWithElse = new Dynamic {
  for (i, n in new Listing { 1; 2; 3; 4; 5 }) {
    when (n.isOdd) {
      i * n
      i * n * 2
    } else {
      (i * n).toString()
      (i * n * 2).toString()
    }
  }
}

--------------------------------------------------------------------------------

(module
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (intLiteral))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (intLiteral))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier)))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier)))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (intLiteral))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (intLiteral))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier)))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier)))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (intLiteral))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (intLiteral))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier)))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier)))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (intLiteral)
              (slStringLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (variableExpr
                    (identifier))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (intLiteral)
              (slStringLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (variableExpr
                    (identifier))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (intLiteral)
              (slStringLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (methodCallExpr
                    (identifier)
                    (argumentList
                      (variableExpr
                        (identifier))
                      (variableExpr
                        (identifier))))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (intLiteral)
              (slStringLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (methodCallExpr
                    (identifier)
                    (argumentList
                      (variableExpr
                        (identifier))
                      (variableExpr
                        (identifier))))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (intLiteral))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (intLiteral))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier)))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier)))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectEntry
                (slStringLiteral)
                (intLiteral))
              (objectEntry
                (slStringLiteral)
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (variableExpr
                    (identifier))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectEntry
                (slStringLiteral)
                (intLiteral))
              (objectEntry
                (slStringLiteral)
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (variableExpr
                    (identifier))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectEntry
                (slStringLiteral)
                (intLiteral))
              (objectEntry
                (slStringLiteral)
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (methodCallExpr
                    (identifier)
                    (argumentList
                      (variableExpr
                        (identifier))
                      (variableExpr
                        (identifier))))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectEntry
                (slStringLiteral)
                (intLiteral))
              (objectEntry
                (slStringLiteral)
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (methodCallExpr
                    (identifier)
                    (argumentList
                      (variableExpr
                        (identifier))
                      (variableExpr
                        (identifier))))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectEntry
                (slStringLiteral)
                (intLiteral))
              (objectEntry
                (slStringLiteral)
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (variableExpr
                    (identifier))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectEntry
                (slStringLiteral)
                (intLiteral))
              (objectEntry
                (slStringLiteral)
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (variableExpr
                    (identifier))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectEntry
                (slStringLiteral)
                (intLiteral))
              (objectEntry
                (slStringLiteral)
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (methodCallExpr
                    (identifier)
                    (argumentList
                      (variableExpr
                        (identifier))
                      (variableExpr
                        (identifier))))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectEntry
                (slStringLiteral)
                (intLiteral))
              (objectEntry
                (slStringLiteral)
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (methodCallExpr
                    (identifier)
                    (argumentList
                      (variableExpr
                        (identifier))
                      (variableExpr
                        (identifier))))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectElement
          (slStringLiteral))
        (whenGenerator
          (binaryExpr
            (binaryExpr
              (intLiteral)
              (intLiteral))
            (intLiteral))
          (objectBody
            (objectElement
              (slStringLiteral))))
        (whenGenerator
          (binaryExpr
            (binaryExpr
              (intLiteral)
              (intLiteral))
            (intLiteral))
          (objectBody
            (objectElement
              (slStringLiteral)))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectElement
          (slStringLiteral))
        (whenGenerator
          (binaryExpr
            (binaryExpr
              (intLiteral)
              (intLiteral))
            (intLiteral))
          (objectBody
            (objectElement
              (slStringLiteral))))
        (whenGenerator
          (binaryExpr
            (binaryExpr
              (intLiteral)
              (intLiteral))
            (intLiteral))
          (objectBody
            (objectElement
              (slStringLiteral)))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (forGenerator
              (typedIdentifier
                (identifier))
              (methodCallExpr
                (identifier)
                (argumentList
                  (slStringLiteral)
                  (slStringLiteral)))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier)))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (forGenerator
              (typedIdentifier
                (identifier))
              (methodCallExpr
                (identifier)
                (argumentList
                  (slStringLiteral)
                  (slStringLiteral)))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier)))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (forGenerator
              (typedIdentifier
                (identifier))
              (typedIdentifier
                (identifier))
              (methodCallExpr
                (identifier)
                (argumentList
                  (slStringLiteral)
                  (slStringLiteral)))
              (objectBody
                (objectElement
                  (methodCallExpr
                    (identifier)
                    (argumentList
                      (binaryExpr
                        (variableExpr
                          (identifier))
                        (variableExpr
                          (identifier)))
                      (binaryExpr
                        (variableExpr
                          (identifier))
                        (variableExpr
                          (identifier)))))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (forGenerator
              (typedIdentifier
                (identifier))
              (typedIdentifier
                (identifier))
              (methodCallExpr
                (identifier)
                (argumentList
                  (slStringLiteral)
                  (slStringLiteral)))
              (objectBody
                (objectElement
                  (methodCallExpr
                    (identifier)
                    (argumentList
                      (binaryExpr
                        (variableExpr
                          (identifier))
                        (variableExpr
                          (identifier)))
                      (binaryExpr
                        (variableExpr
                          (identifier))
                        (variableExpr
                          (identifier)))))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectElement
          (slStringLiteral))
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (intLiteral)))))))
        (objectElement
          (slStringLiteral))
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (forGenerator
              (typedIdentifier
                (identifier))
              (methodCallExpr
                (identifier)
                (argumentList
                  (slStringLiteral)
                  (slStringLiteral)))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier))))))))
        (objectElement
          (slStringLiteral)))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectElement
          (slStringLiteral))
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (intLiteral)))))))
        (objectElement
          (slStringLiteral))
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (forGenerator
              (typedIdentifier
                (identifier))
              (methodCallExpr
                (identifier)
                (argumentList
                  (slStringLiteral)
                  (slStringLiteral)))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier))))))))
        (objectElement
          (slStringLiteral)))))
  (lineComment)
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (objectElement
              (variableExpr
                (identifier)))))
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (objectElement
              (variableExpr
                (identifier)))))
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (objectElement
              (variableExpr
                (identifier))))))))
  (lineComment)
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (objectElement
              (variableExpr
                (identifier)))))
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (objectElement
              (variableExpr
                (identifier)))))
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (objectElement
              (variableExpr
                (identifier))))))))
  (lineComment)
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (objectElement
              (methodCallExpr
                (identifier)
                (argumentList
                  (variableExpr
                    (identifier))
                  (variableExpr
                    (identifier)))))))
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (objectElement
              (methodCallExpr
                (identifier)
                (argumentList
                  (variableExpr
                    (identifier))
                  (variableExpr
                    (identifier)))))))
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (objectElement
              (methodCallExpr
                (identifier)
                (argumentList
                  (variableExpr
                    (identifier))
                  (variableExpr
                    (identifier))))))))))
  (lineComment)
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (objectElement
              (methodCallExpr
                (identifier)
                (argumentList
                  (variableExpr
                    (identifier))
                  (variableExpr
                    (identifier)))))))
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (objectElement
              (methodCallExpr
                (identifier)
                (argumentList
                  (variableExpr
                    (identifier))
                  (variableExpr
                    (identifier)))))))
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (intLiteral)))
          (objectBody
            (objectElement
              (methodCallExpr
                (identifier)
                (argumentList
                  (variableExpr
                    (identifier))
                  (variableExpr
                    (identifier))))))))))
  (classProperty
    (modifier)
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectProperty
          (identifier)
          (slStringLiteral))
        (objectProperty
          (identifier)
          (intLiteral))
        (objectProperty
          (identifier)
          (methodCallExpr
            (identifier)
            (argumentList
              (intLiteral)
              (slStringLiteral)))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (variableExpr
            (identifier))
          (objectBody
            (objectEntry
              (variableExpr
                (identifier))
              (variableExpr
                (identifier))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (variableExpr
            (identifier))
          (objectBody
            (objectEntry
              (variableExpr
                (identifier))
              (variableExpr
                (identifier))))))))
  (classProperty
    (modifier)
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectProperty
          (identifier)
          (slStringLiteral))
        (objectElement
          (slStringLiteral))
        (objectProperty
          (identifier)
          (intLiteral))
        (objectEntry
          (slStringLiteral)
          (intLiteral))
        (objectElement
          (slStringLiteral))
        (objectEntry
          (slStringLiteral)
          (slStringLiteral)))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (variableExpr
            (identifier))
          (objectBody
            (objectElement
              (variableExpr
                (identifier))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (variableExpr
            (identifier))
          (objectBody
            (objectElement
              (slStringLiteral
                (interpolationExpr
                  (variableExpr
                    (identifier)))
                (interpolationExpr
                  (variableExpr
                    (identifier))))))))))
  (clazz
    (identifier)
    (classBody
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier)))))
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier)))))))
  (classProperty
    (modifier)
    (identifier)
    (typeAnnotation
      (type
        (qualifiedIdentifier
          (identifier))))
    (newExpr
      (objectBody
        (objectProperty
          (identifier)
          (slStringLiteral))
        (objectProperty
          (identifier)
          (intLiteral)))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (variableExpr
              (identifier))
            (identifier)
            (argumentList))
          (objectBody
            (objectElement
              (variableExpr
                (identifier))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (variableExpr
              (identifier))
            (identifier)
            (argumentList))
          (objectBody
            (objectElement
              (slStringLiteral
                (interpolationExpr
                  (variableExpr
                    (identifier)))
                (interpolationExpr
                  (variableExpr
                    (identifier))))))))))
  (classProperty
    (modifier)
    (identifier)
    (typeAnnotation
      (type
        (qualifiedIdentifier
          (identifier))))
    (newExpr
      (objectBody
        (objectProperty
          (identifier)
          (slStringLiteral))
        (objectEntry
          (slStringLiteral)
          (slStringLiteral))
        (objectEntry
          (slStringLiteral)
          (slStringLiteral))
        (objectProperty
          (identifier)
          (slStringLiteral)))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (variableExpr
            (identifier))
          (objectBody
            (objectElement
              (variableExpr
                (identifier))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (variableExpr
            (identifier))
          (objectBody
            (objectElement
              (slStringLiteral
                (interpolationExpr
                  (variableExpr
                    (identifier)))
                (interpolationExpr
                  (variableExpr
                    (identifier))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (objectElement
              (variableExpr
                (identifier)))
            (objectElement
              (binaryExpr
                (variableExpr
                  (identifier))
                (slStringLiteral)))
            (objectElement
              (binaryExpr
                (variableExpr
                  (identifier))
                (slStringLiteral))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)
              (slStringLiteral)))
          (objectBody
            (forGenerator
              (typedIdentifier
                (identifier))
              (typedIdentifier
                (identifier))
              (methodCallExpr
                (identifier)
                (argumentList
                  (slStringLiteral)
                  (intLiteral)
                  (slStringLiteral)
                  (intLiteral)))
              (objectBody
                (objectElement
                  (methodCallExpr
                    (binaryExpr
                      (binaryExpr
                        (variableExpr
                          (identifier))
                        (variableExpr
                          (identifier)))
                      (variableExpr
                        (identifier)))
                    (identifier)
                    (argumentList)))
                (objectElement
                  (binaryExpr
                    (binaryExpr
                      (methodCallExpr
                        (variableExpr
                          (identifier))
                        (identifier)
                        (argumentList))
                      (variableExpr
                        (identifier)))
                    (variableExpr
                      (identifier))))))
            (forGenerator
              (typedIdentifier
                (identifier))
              (typedIdentifier
                (identifier))
              (methodCallExpr
                (identifier)
                (argumentList
                  (slStringLiteral)
                  (intLiteral)
                  (slStringLiteral)
                  (intLiteral)))
              (objectBody
                (objectElement
                  (methodCallExpr
                    (binaryExpr
                      (binaryExpr
                        (variableExpr
                          (identifier))
                        (variableExpr
                          (identifier)))
                      (variableExpr
                        (identifier)))
                    (identifier)
                    (argumentList)))
                (objectElement
                  (binaryExpr
                    (binaryExpr
                      (methodCallExpr
                        (variableExpr
                          (identifier))
                        (identifier)
                        (argumentList))
                      (variableExpr
                        (identifier)))
                    (variableExpr
                      (identifier)))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier))))
                (objectElement
                  (binaryExpr
                    (binaryExpr
                      (variableExpr
                        (identifier))
                      (variableExpr
                        (identifier)))
                    (intLiteral))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (whenGenerator
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (intLiteral))
                  (objectBody
                    (objectElement
                      (binaryExpr
                        (variableExpr
                          (identifier))
                        (variableExpr
                          (identifier))))
                    (objectElement
                      (binaryExpr
                        (binaryExpr
                          (variableExpr
                            (identifier))
                          (variableExpr
                            (identifier)))
                        (intLiteral))))))))))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (forGenerator
          (typedIdentifier
            (identifier))
          (typedIdentifier
            (identifier))
          (newExpr
            (type
              (qualifiedIdentifier
                (identifier)))
            (objectBody
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))
              (objectElement
                (intLiteral))))
          (objectBody
            (whenGenerator
              (propertyCallExpr
                (variableExpr
                  (identifier))
                (identifier))
              (objectBody
                (objectElement
                  (binaryExpr
                    (variableExpr
                      (identifier))
                    (variableExpr
                      (identifier))))
                (objectElement
                  (binaryExpr
                    (binaryExpr
                      (variableExpr
                        (identifier))
                      (variableExpr
                        (identifier)))
                    (intLiteral)))))
            (objectProperty
              (identifier)
              (objectBody
                (objectElement
                  (methodCallExpr
                    (parenthesizedExpr
                      (binaryExpr
                        (variableExpr
                          (identifier))
                        (variableExpr
                          (identifier))))
                    (identifier)
                    (argumentList)))
                (objectElement
                  (methodCallExpr
                    (parenthesizedExpr
                      (binaryExpr
                        (binaryExpr
                          (variableExpr
                            (identifier))
                          (variableExpr
                            (identifier)))
                        (intLiteral)))
                    (identifier)
                    (argumentList)))))))))))
