resultTreeRoot.insert(bufferNode,resultTreeRoot.getChildCount());
	private int doHyperSearch(Buffer buffer, SearchMatcher matcher)		throws Exception	{		setAbortable(false);		int resultCount = 0;		final DefaultMutableTreeNode bufferNode = new DefaultMutableTreeNode(			buffer.getPath());		try		{			buffer.readLock();			Element map = buffer.getDefaultRootElement();			Segment text = new Segment();			int offset = 0;			int length = buffer.getLength();			int line = -1;loop:			for(;;)			{				buffer.getText(offset,length - offset,text);				int[] match = matcher.nextMatch(text);				if(match == null)					break loop;				offset += match[1];				int newLine = map.getElementIndex(offset);				if(line == newLine)				{					// already had a result on this					// line, skip					continue loop;				}				line = newLine;				resultCount++;				bufferNode.insert(new DefaultMutableTreeNode(					new HyperSearchResult(buffer,line),false),					bufferNode.getChildCount());			}		}		finally		{			buffer.readUnlock();		}		resultTreeRoot.insert(bufferNode,resultTreeRoot.getChildCount());		if(resultCount != 0)		{			SwingUtilities.invokeLater(new Runnable()			{				public void run()				{					resultTreeModel.reload(resultTreeRoot);				}			});		}		setAbortable(true);		return resultCount;	}