|
From: <caw...@us...> - 2007-05-30 19:36:40
|
Revision: 2562
http://svn.sourceforge.net/rubyeclipse/?rev=2562&view=rev
Author: cawilliams
Date: 2007-05-30 12:36:18 -0700 (Wed, 30 May 2007)
Log Message:
-----------
fix Trac ticket # 4350 - fix opening editors on relative paths in stack trace for Test::Unit stack traces
Modified Paths:
--------------
trunk/org.rubypeople.rdt.debug.ui/src/org/rubypeople/rdt/internal/debug/ui/RubySourceLocator.java
trunk/org.rubypeople.rdt.testunit/src/org/rubypeople/rdt/internal/testunit/ui/FailureTrace.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/util/StackTraceLine.java
Modified: trunk/org.rubypeople.rdt.debug.ui/src/org/rubypeople/rdt/internal/debug/ui/RubySourceLocator.java
===================================================================
--- trunk/org.rubypeople.rdt.debug.ui/src/org/rubypeople/rdt/internal/debug/ui/RubySourceLocator.java 2007-05-30 19:35:25 UTC (rev 2561)
+++ trunk/org.rubypeople.rdt.debug.ui/src/org/rubypeople/rdt/internal/debug/ui/RubySourceLocator.java 2007-05-30 19:36:18 UTC (rev 2562)
@@ -105,7 +105,8 @@
public SourceElement(String aFilename, RubySourceLocator pSourceLocator) {
filename = aFilename;
workspaceFile = RdtDebugCorePlugin.getWorkspace().getRoot().getFileForLocation(new Path(filename));
-
+ if (workspaceFile == null) workspaceFile = RdtDebugCorePlugin.getWorkspace().getRoot().getFile(new Path(filename));
+
if (workspaceFile == null) {
// using slash here is platform independent
workspaceFile = RdtDebugCorePlugin.getWorkspace().getRoot().getFileForLocation(new Path(pSourceLocator.getAbsoluteWorkingDirectory() + "/" + filename)); //$NON-NLS-1$
Modified: trunk/org.rubypeople.rdt.testunit/src/org/rubypeople/rdt/internal/testunit/ui/FailureTrace.java
===================================================================
--- trunk/org.rubypeople.rdt.testunit/src/org/rubypeople/rdt/internal/testunit/ui/FailureTrace.java 2007-05-30 19:35:25 UTC (rev 2561)
+++ trunk/org.rubypeople.rdt.testunit/src/org/rubypeople/rdt/internal/testunit/ui/FailureTrace.java 2007-05-30 19:36:18 UTC (rev 2562)
@@ -28,7 +28,6 @@
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
@@ -50,6 +49,7 @@
private final Clipboard fClipboard;
private TestRunInfo fFailure;
private CompareResultsAction fCompareAction;
+ private TestUnitView fTestRunner;
public FailureTrace(Composite parent, Clipboard clipboard, TestUnitView testRunner, ToolBar toolBar) {
@@ -64,6 +64,7 @@
failureToolBarmanager.add(fCompareAction);
failureToolBarmanager.update(true);
+ fTestRunner = testRunner;
fTable= new Table(parent, SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
fClipboard= clipboard;
@@ -82,15 +83,7 @@
});
initMenu();
- fTable.addSelectionListener(new SelectionListener() {
- public void widgetSelected(SelectionEvent e) {}
-
- public void widgetDefaultSelected(SelectionEvent e) {
- new StackTraceLine(getSelectedText()).openEditor();
- }
- });
-
parent.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
disposeIcons();
@@ -127,7 +120,8 @@
}
private Action createOpenEditorAction(String traceLine) {
- return new OpenEditorAction(new StackTraceLine(traceLine));
+ StackTraceLine stack = new StackTraceLine(traceLine, fTestRunner.getLaunchedProject());
+ return new OpenEditorAtLineAction(fTestRunner, stack.getFilename(), stack.getLineNumber());
}
private void disposeIcons(){
@@ -246,17 +240,4 @@
public Shell getShell() {
return fTable.getShell();
}
-
- private class OpenEditorAction extends Action {
- private final StackTraceLine trace;
-
- public OpenEditorAction(StackTraceLine trace) {
- super(TestUnitMessages.OpenEditor_action_label);
- this.trace = trace;
- }
-
- public void run() {
- trace.openEditor();
- }
- }
}
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/util/StackTraceLine.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/util/StackTraceLine.java 2007-05-30 19:35:25 UTC (rev 2561)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/util/StackTraceLine.java 2007-05-30 19:36:18 UTC (rev 2562)
@@ -15,8 +15,12 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.rubypeople.rdt.core.IRubyProject;
+import org.rubypeople.rdt.internal.ui.rubyeditor.EditorUtility;
+import org.rubypeople.rdt.ui.actions.OpenEditorActionGroup;
+
public class StackTraceLine {
// for better matching with 1.8, append /:in `(.*)'/ to the regex
private static Pattern OPEN_TRACE_LINE_PATTERN = Pattern.compile("\\s*(\\S.*?):(\\d+)(:|$)");
@@ -34,7 +38,11 @@
}
public StackTraceLine(String traceLine) {
- int prefix = 0;
+ this(traceLine, null);
+ }
+
+ public StackTraceLine(String traceLine, IRubyProject launchedProject) {
+ int prefix = 0;
Matcher matcher = OPTIONAL_PREFIX.matcher(traceLine);
if (matcher.find()) {
traceLine = traceLine.substring(matcher.group(0).length());
@@ -48,15 +56,18 @@
return;
}
- fFilename = matcher.group(1);
+ fFilename = matcher.group(1);
+ if (fFilename.startsWith("./") && launchedProject != null) {
+ fFilename = launchedProject.getPath().toPortableString() + fFilename.substring(1);
+ }
String lineNumber = matcher.group(2);
fLineNumber = Integer.parseInt(lineNumber);
offset = matcher.start(1) + prefix;
length = fFilename.length()+lineNumber.length()+1;
}
-
- public void openEditor() {
+
+ public void openEditor() {
if (fFilename == null)
return;
new LineBasedEditorOpener(fFilename, fLineNumber).open();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|