code: public final void setLength(int l)
    {
      m_lastChunk = l >>> m_chunkBits;
  
      if (m_lastChunk == 0 && m_innerFSB != null)
      {
        // Replace this FSB with the appropriate inner FSB, truncated
        m_innerFSB.setLength(l, this);
      }
      else
      {
        m_firstFree = l & m_chunkMask;
        
  	  // There's an edge case if l is an exact multiple of m_chunkBits, which risks leaving
  	  // us pointing at the start of a chunk which has not yet been allocated. Rather than 
  	  // pay the cost of dealing with that in the append loops (more scattered and more
  	  // inner-loop), we correct it here by moving to the safe side of that
  	  // line -- as we would have left the indexes had we appended up to that point.
        if(m_firstFree==0 && m_lastChunk>0)
        {
        	--m_lastChunk;
        	m_firstFree=m_chunkSize;
        }
      }
    }
docs: Directly set how much of the FastStringBuffer's storage is to be
  considered part of its content. This is a fast but hazardous
  operation. It is not protected against negative values, or values
  greater than the amount of storage currently available... and even
  if additional storage does exist, its contents are unpredictable.
  The only safe use for our setLength() is to truncate the FastStringBuffer
  to a shorter string.
  
  @param l New length. If l<0 or l>=getLength(), this operation will
  not report an error but future operations will almost certainly fail.