|
From: Christopher W. <caw...@us...> - 2005-03-28 23:22:49
|
Update of /cvsroot/rubyeclipse/org.rubypeople.rdt.debug.ui/src/org/rubypeople/rdt/internal/debug/ui/console In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1173/src/org/rubypeople/rdt/internal/debug/ui/console Modified Files: RubyStackTraceHyperlink.java RubyConsoleTracker.java Log Message: apply david corbin's patches Index: RubyStackTraceHyperlink.java =================================================================== RCS file: /cvsroot/rubyeclipse/org.rubypeople.rdt.debug.ui/src/org/rubypeople/rdt/internal/debug/ui/console/RubyStackTraceHyperlink.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** RubyStackTraceHyperlink.java 5 Mar 2005 15:19:08 -0000 1.3 --- RubyStackTraceHyperlink.java 28 Mar 2005 23:22:40 -0000 1.4 *************** *** 38,41 **** --- 38,42 ---- import org.rubypeople.rdt.internal.debug.ui.RdtDebugUiPlugin; import org.rubypeople.rdt.internal.debug.ui.RubySourceLocator; + import org.rubypeople.rdt.internal.ui.util.StackTraceLine; /** *************** *** 45,53 **** private IConsole fConsole; ! private RubyConsoleTracker.StackFrameInfo stackFrameInfo; ! public RubyStackTraceHyperlink(IConsole console, RubyConsoleTracker.StackFrameInfo pStackFrameInfo) { fConsole = console; ! stackFrameInfo = pStackFrameInfo; } --- 46,54 ---- private IConsole fConsole; ! private StackTraceLine fTraceLine; ! public RubyStackTraceHyperlink(IConsole console, StackTraceLine line) { fConsole = console; ! fTraceLine = line; } *************** *** 95,105 **** if (!(sourceLocator instanceof RubySourceLocator)) { return; } rubySourceLocator = (RubySourceLocator) sourceLocator; ! String filename; ! try { ! filename = this.getFilename(); ! } catch (BadLocationException e1) { ! RdtDebugUiPlugin.log(new Status(IStatus.ERROR, RdtDebugUiPlugin.PLUGIN_ID, 0, "Could not get filname from stackframe.", e1)); ! return ; ! } try { Object sourceElement = rubySourceLocator.getSourceElement(filename); --- 96,100 ---- if (!(sourceLocator instanceof RubySourceLocator)) { return; } rubySourceLocator = (RubySourceLocator) sourceLocator; ! String filename = this.getFilename(); try { Object sourceElement = rubySourceLocator.getSourceElement(filename); *************** *** 126,139 **** */ public int getLineNumber() { ! try { ! return Integer.parseInt(stackFrameInfo.lineNumber); ! } catch (NumberFormatException e) { ! // stackFrameInfo.lineNumber is a verified number ; ! return 0; ! } } ! public String getFilename() throws BadLocationException { ! return this.getLinkText().substring(0, stackFrameInfo.nameEnd - stackFrameInfo.start); } --- 121,129 ---- */ public int getLineNumber() { ! return fTraceLine.getLineNumber(); } ! public String getFilename() { ! return fTraceLine.getFilename(); } Index: RubyConsoleTracker.java =================================================================== RCS file: /cvsroot/rubyeclipse/org.rubypeople.rdt.debug.ui/src/org/rubypeople/rdt/internal/debug/ui/console/RubyConsoleTracker.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** RubyConsoleTracker.java 5 Mar 2005 15:19:08 -0000 1.3 --- RubyConsoleTracker.java 28 Mar 2005 23:22:40 -0000 1.4 *************** *** 21,24 **** --- 21,26 ---- + import java.io.File; + import org.eclipse.debug.ui.console.IConsole; import org.eclipse.debug.ui.console.IConsoleHyperlink; *************** *** 26,29 **** --- 28,32 ---- import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IRegion; + import org.rubypeople.rdt.internal.ui.util.StackTraceLine; /** *************** *** 39,42 **** --- 42,66 ---- + public interface FileExistanceChecker { + boolean fileExists(String filename); + } + + public static class StandardFileExistanceChecker implements FileExistanceChecker{ + + public boolean fileExists(String filename) { + File file = new File(filename); + return file.exists(); + } + } + private final FileExistanceChecker existanceChecker; + + public RubyConsoleTracker() { + this(new StandardFileExistanceChecker()); + } + + public RubyConsoleTracker(FileExistanceChecker existance) { + this.existanceChecker = existance; + } + /** * The console associated with this line tracker *************** *** 52,90 **** ! private StackFrameInfo detectStackFrame(String pLine) { ! // FIXME This is hardcoded to only recognize .rb endings! ! int startOfSuffix = pLine.indexOf(".rb:") ; ! if (startOfSuffix == -1) { ! return null ; ! } ! int startLineNumber = startOfSuffix + 4 ; ! int endLineNumber = pLine.indexOf(":", startLineNumber) ; ! if (endLineNumber == -1) { ! endLineNumber = pLine.length() ; ! } ! String lineNumber = pLine.substring(startLineNumber, endLineNumber) ; ! for (int i = 0; i < lineNumber.length(); i++) { ! char c = lineNumber.charAt(i) ; ! if (c < '0' || c > '9') { ! return null ; ! } ! } ! ! return new StackFrameInfo(0, endLineNumber, startOfSuffix+3, lineNumber) ; ! } - private void setStartPos(String pLine, StackFrameInfo pStackFrameInfo) { - int fromOffset = pLine.indexOf("from ") ; - if (fromOffset == -1) { - return ; - } - for (int i = 0; i < fromOffset; i++) { - char charBeforeFrom = pLine.charAt(i) ; - if (!(charBeforeFrom == ' ' || charBeforeFrom == '\t')) { - return ; - } - } - pStackFrameInfo.start = 5 + fromOffset ; - } /** --- 76,81 ---- ! /** *************** *** 95,106 **** int offset = line.getOffset(); int length = line.getLength(); String text = fConsole.getDocument().get(offset, length); ! StackFrameInfo sfi = this.detectStackFrame(text) ; ! if (sfi == null) { ! return ; } - this.setStartPos(text, sfi) ; - IConsoleHyperlink link = new RubyStackTraceHyperlink(fConsole, sfi); - fConsole.addLink(link, offset + sfi.start, sfi.end - sfi.start); } catch (BadLocationException e) { } --- 86,106 ---- int offset = line.getOffset(); int length = line.getLength(); + int prefix = 0; + String text = fConsole.getDocument().get(offset, length); ! while (StackTraceLine.isTraceLine(text)) { ! StackTraceLine stackTraceLine = new StackTraceLine(text); ! if (! existanceChecker.fileExists(stackTraceLine.getFilename())) ! return; ! IConsoleHyperlink link = new RubyStackTraceHyperlink(fConsole, stackTraceLine); ! fConsole.addLink(link, line.getOffset() + prefix + stackTraceLine.offset() , stackTraceLine.length()); ! ! prefix = stackTraceLine.offset() + stackTraceLine.length(); ! text = text.substring(stackTraceLine.offset() + stackTraceLine.length()); ! if (text.startsWith(":in `require':")) { ! text = text.substring(14); ! prefix += 14; ! } } } catch (BadLocationException e) { } *************** *** 113,131 **** fConsole = null; } - - public class StackFrameInfo { - - public StackFrameInfo(int pPosStart, int pPosEnd, int pNameEnd, String pLineNumber) { - start = pPosStart ; - end = pPosEnd ; - lineNumber = pLineNumber; - nameEnd = pNameEnd ; - } - public int start ; - public int nameEnd ; - public int end ; - public String lineNumber ; - } - } --- 113,116 ---- |