code: private Node parseTypeName(JsDocToken token) {
      Node typeNameNode = parseNameExpression(token);
  
      if (match(JsDocToken.LEFT_ANGLE)) {
        next();
        skipEOLs();
        Node memberType = parseTypeExpressionList(typeNameNode.getString(), next());
        if (memberType != null) {
          typeNameNode.addChildToFront(memberType);
  
          skipEOLs();
          if (!match(JsDocToken.RIGHT_ANGLE)) {
            return reportTypeSyntaxWarning("msg.jsdoc.missing.gt");
          }
  
          next();
        }
      }
      return typeNameNode;
    }
docs: Parse a TypeName:
  
  <pre>{@code
  TypeName := NameExpression | NameExpression TypeApplication
  TypeApplication := '.'? '<' TypeExpressionList '>'
  }</pre>