code: public void addNextInode(Inode inode) {
      Preconditions.checkState(mLockPattern == LockPattern.WRITE_EDGE);
      Preconditions.checkState(!fullPathExists());
      Preconditions.checkState(inode.getName().equals(mPathComponents[mExistingInodes.size()]));
  
      if (!isImplicitlyLocked() && mExistingInodes.size() < mPathComponents.length - 1) {
        mLockList.pushWriteLockedEdge(inode, mPathComponents[mExistingInodes.size() + 1]);
      }
      mExistingInodes.add(inode);
    }
docs: Adds the next inode to the path. This tries to reduce the scope of locking by moving the write
  lock forward to the new final edge, downgrading the previous write lock to a read lock. If the
  path is implicitly locked, the inode is added but no downgrade occurs.
  
  @param inode the inode to add