code: public Collection<Node> getTypeNodes() {
      List<Node> nodes = new ArrayList<>();
  
      if (type != null) {
        nodes.add(type.getRoot());
      }
  
      if (thisType != null) {
        nodes.add(thisType.getRoot());
      }
  
      if (info != null) {
        if (info.baseType != null) {
          nodes.add(info.baseType.getRoot());
        }
  
        if (info.extendedInterfaces != null) {
          for (JSTypeExpression interfaceType : info.extendedInterfaces) {
            if (interfaceType != null) {
              nodes.add(interfaceType.getRoot());
            }
          }
        }
  
        if (info.implementedInterfaces != null) {
          for (JSTypeExpression interfaceType : info.implementedInterfaces) {
            if (interfaceType != null) {
              nodes.add(interfaceType.getRoot());
            }
          }
        }
  
        if (info.parameters != null) {
          for (JSTypeExpression parameterType : info.parameters.values()) {
            if (parameterType != null) {
              nodes.add(parameterType.getRoot());
            }
          }
        }
  
        if (info.thrownTypes != null) {
          for (JSTypeExpression thrownType : info.thrownTypes) {
            if (thrownType != null) {
              nodes.add(thrownType.getRoot());
            }
          }
        }
  
        if (info.lendsName != null) {
          nodes.add(info.lendsName.getRoot());
        }
      }
  
      return nodes;
    }
docs: Returns a collection of all type nodes that are a part of this JSDocInfo. This
  includes @type, @this, @extends, @implements, @param, @throws, @lends, and @return. Any future
  type specific JSDoc should make sure to add the appropriate nodes here.
  
  @return collection of all type nodes