code: function _filePathToObjectPath(treeData, path) {
          if (path === null) {
              return null;
          } else if (path === "") {
              return [];
          }
  
          var parts = path.split("/"),
              part = parts.shift(),
              result = [],
              node;
  
          // Step through the parts of the path and the treeData object simultaneously
          while (part) {
              // We hit the end of the tree without finding our object, so return null
              if (!treeData) {
                  return null;
              }
  
              node = treeData.get(part);
  
              // The name represented by `part` isn't in the tree, so return null.
              if (node === undefined) {
                  return null;
              }
  
              // We've verified this part, so store it.
              result.push(part);
  
              // Pull the next part of the path
              part = parts.shift();
  
              // If we haven't passed the end of the path string, then the object we've got in hand
              // *should* be a directory. Confirm that and add `children` to the path to move down
              // to the next directory level.
              if (part) {
                  treeData = node.get("children");
                  if (treeData) {
                      result.push("children");
                  }
              }
          }
  
          return result;
      }
docs: @private
  
  Converts a project-relative file path into an object path array suitable for
  `Immutable.Map.getIn` and `Immutable.Map.updateIn`.
  
  The root path is "".
  
  @param {Immutable.Map} treeData
  @param {string} path project relative path to the file or directory. Can include trailing slash.
  @return {Array.<string>|null} Returns null if the path can't be found in the tree, otherwise an array of strings representing the path through the object.