================================================================================
methods/methodParameterConstraints1
================================================================================

class X {
  function int(int: Int(isPositive)): Int(isPositive) = int
  function l(l: List<String(!isEmpty)>): List<String(!isEmpty)> = l
  function map(map: Map<String(!isEmpty), Int(isPositive)>(!isEmpty)): Map<String(!isEmpty), Int(isPositive)>(!isEmpty) = map
  function nullable(nullable: String(!isEmpty)?): String(!isEmpty)? = nullable
}

local x = new X {}

res0 = x.int(3)
res1 = x.l(List("1", "2"))
res2 = x.map(Map("1", 1, "2", 2))
res3 = x.nullable("1")
res4 = x.nullable(null)

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

(module
  (clazz
    (identifier)
    (classBody
      (classMethod
        (methodHeader
          (identifier)
          (parameterList
            (typedIdentifier
              (identifier)
              (typeAnnotation
                (type
                  (type
                    (qualifiedIdentifier
                      (identifier)))
                  (variableExpr
                    (identifier))))))
          (typeAnnotation
            (type
              (type
                (qualifiedIdentifier
                  (identifier)))
              (variableExpr
                (identifier)))))
        (variableExpr
          (identifier)))
      (classMethod
        (methodHeader
          (identifier)
          (parameterList
            (typedIdentifier
              (identifier)
              (typeAnnotation
                (type
                  (qualifiedIdentifier
                    (identifier))
                  (typeArgumentList
                    (type
                      (type
                        (qualifiedIdentifier
                          (identifier)))
                      (unaryExpr
                        (variableExpr
                          (identifier)))))))))
          (typeAnnotation
            (type
              (qualifiedIdentifier
                (identifier))
              (typeArgumentList
                (type
                  (type
                    (qualifiedIdentifier
                      (identifier)))
                  (unaryExpr
                    (variableExpr
                      (identifier))))))))
        (variableExpr
          (identifier)))
      (classMethod
        (methodHeader
          (identifier)
          (parameterList
            (typedIdentifier
              (identifier)
              (typeAnnotation
                (type
                  (type
                    (qualifiedIdentifier
                      (identifier))
                    (typeArgumentList
                      (type
                        (type
                          (qualifiedIdentifier
                            (identifier)))
                        (unaryExpr
                          (variableExpr
                            (identifier))))
                      (type
                        (type
                          (qualifiedIdentifier
                            (identifier)))
                        (variableExpr
                          (identifier)))))
                  (unaryExpr
                    (variableExpr
                      (identifier)))))))
          (typeAnnotation
            (type
              (type
                (qualifiedIdentifier
                  (identifier))
                (typeArgumentList
                  (type
                    (type
                      (qualifiedIdentifier
                        (identifier)))
                    (unaryExpr
                      (variableExpr
                        (identifier))))
                  (type
                    (type
                      (qualifiedIdentifier
                        (identifier)))
                    (variableExpr
                      (identifier)))))
              (unaryExpr
                (variableExpr
                  (identifier))))))
        (variableExpr
          (identifier)))
      (classMethod
        (methodHeader
          (identifier)
          (parameterList
            (typedIdentifier
              (identifier)
              (typeAnnotation
                (type
                  (type
                    (type
                      (qualifiedIdentifier
                        (identifier)))
                    (unaryExpr
                      (variableExpr
                        (identifier))))))))
          (typeAnnotation
            (type
              (type
                (type
                  (qualifiedIdentifier
                    (identifier)))
                (unaryExpr
                  (variableExpr
                    (identifier)))))))
        (variableExpr
          (identifier)))))
  (classProperty
    (modifier)
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody)))
  (classProperty
    (identifier)
    (methodCallExpr
      (variableExpr
        (identifier))
      (identifier)
      (argumentList
        (intLiteral))))
  (classProperty
    (identifier)
    (methodCallExpr
      (variableExpr
        (identifier))
      (identifier)
      (argumentList
        (methodCallExpr
          (identifier)
          (argumentList
            (slStringLiteral)
            (slStringLiteral))))))
  (classProperty
    (identifier)
    (methodCallExpr
      (variableExpr
        (identifier))
      (identifier)
      (argumentList
        (methodCallExpr
          (identifier)
          (argumentList
            (slStringLiteral)
            (intLiteral)
            (slStringLiteral)
            (intLiteral))))))
  (classProperty
    (identifier)
    (methodCallExpr
      (variableExpr
        (identifier))
      (identifier)
      (argumentList
        (slStringLiteral))))
  (classProperty
    (identifier)
    (methodCallExpr
      (variableExpr
        (identifier))
      (identifier)
      (argumentList
        (nullLiteral)))))
