package monolipse.ui.debug; import monolipse.core.foundation.WorkspaceUtilities; import monolipse.ui.BooUI; import org.eclipse.core.resources.IFile; import org.eclipse.debug.ui.console.FileLink; import org.eclipse.jface.text.BadLocationException; import org.eclipse.ui.console.IPatternMatchListenerDelegate; import org.eclipse.ui.console.TextConsole; public abstract class AbstractStackTracePatternMatchListener implements IPatternMatchListenerDelegate { private TextConsole _console; public AbstractStackTracePatternMatchListener() { super(); } public void connect(TextConsole console) { _console = console; } public void disconnect() { _console = null; } protected void hyperlinkStackTraceMatch(final int offset, final int length) { String match = null; try { match = _console.getDocument().get(offset, length); } catch (BadLocationException e) { BooUI.logException(e); return; } int position = match.lastIndexOf(':'); String fname = match.substring(0, position); final int lineNumber = Integer.parseInt(match.substring(position+1)); final IFile file = WorkspaceUtilities.getFileForLocation(fname); if (file != null) { try { FileLink link = new FileLink(file, null, -1, -1, lineNumber); _console.addHyperlink(link, offset, length); } catch (BadLocationException e) { BooUI.logException(e); } } } }