================================================================================
methods/methodParameterTypes3
================================================================================

class X {
  function l(l: List<String>): List<String> = l
  function map(map: Map<String, Int>): Map<String, Int> = map
  function nullable(nullable: String?): String? = nullable
  function lambda(lambda: (String) -> Int): (String) -> Int = lambda
}

local x = new X {}

res1 = x.l(List("1", "2"))
res2 = x.map(Map("1", 1, "2", 2))
res3 = x.nullable("1")
res4 = x.nullable(null)
res5 = x.lambda((str) -> str.length).apply("hello")

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

(module
  (clazz
    (identifier)
    (classBody
      (classMethod
        (methodHeader
          (identifier)
          (parameterList
            (typedIdentifier
              (identifier)
              (typeAnnotation
                (type
                  (qualifiedIdentifier
                    (identifier))
                  (typeArgumentList
                    (type
                      (qualifiedIdentifier
                        (identifier))))))))
          (typeAnnotation
            (type
              (qualifiedIdentifier
                (identifier))
              (typeArgumentList
                (type
                  (qualifiedIdentifier
                    (identifier)))))))
        (variableExpr
          (identifier)))
      (classMethod
        (methodHeader
          (identifier)
          (parameterList
            (typedIdentifier
              (identifier)
              (typeAnnotation
                (type
                  (qualifiedIdentifier
                    (identifier))
                  (typeArgumentList
                    (type
                      (qualifiedIdentifier
                        (identifier)))
                    (type
                      (qualifiedIdentifier
                        (identifier))))))))
          (typeAnnotation
            (type
              (qualifiedIdentifier
                (identifier))
              (typeArgumentList
                (type
                  (qualifiedIdentifier
                    (identifier)))
                (type
                  (qualifiedIdentifier
                    (identifier)))))))
        (variableExpr
          (identifier)))
      (classMethod
        (methodHeader
          (identifier)
          (parameterList
            (typedIdentifier
              (identifier)
              (typeAnnotation
                (type
                  (type
                    (qualifiedIdentifier
                      (identifier)))))))
          (typeAnnotation
            (type
              (type
                (qualifiedIdentifier
                  (identifier))))))
        (variableExpr
          (identifier)))
      (classMethod
        (methodHeader
          (identifier)
          (parameterList
            (typedIdentifier
              (identifier)
              (typeAnnotation
                (type
                  (type
                    (qualifiedIdentifier
                      (identifier)))
                  (type
                    (qualifiedIdentifier
                      (identifier)))))))
          (typeAnnotation
            (type
              (type
                (qualifiedIdentifier
                  (identifier)))
              (type
                (qualifiedIdentifier
                  (identifier))))))
        (variableExpr
          (identifier)))))
  (classProperty
    (modifier)
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody)))
  (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))))
  (classProperty
    (identifier)
    (methodCallExpr
      (methodCallExpr
        (variableExpr
          (identifier))
        (identifier)
        (argumentList
          (functionLiteral
            (parameterList
              (typedIdentifier
                (identifier)))
            (propertyCallExpr
              (variableExpr
                (identifier))
              (identifier)))))
      (identifier)
      (argumentList
        (slStringLiteral)))))
