diff --git a/plugin.xml b/plugin.xml
index f170f3b..dfc8153 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -111,6 +111,17 @@
+
+
+
+
+
+
+
+
@@ -159,6 +174,12 @@
name="org.ntlab.traceDebugger.dstSideDeltaAnnotation"
super="org.eclipse.ui.workbench.texteditor.info">
+
+
@@ -234,6 +255,23 @@
verticalRulerPreferenceKey="clvertical4"
verticalRulerPreferenceValue="true">
+
+
diff --git a/src/org/ntlab/traceDebugger/BreakPointView.java b/src/org/ntlab/traceDebugger/BreakPointView.java
index 375fccd..d5787bc 100644
--- a/src/org/ntlab/traceDebugger/BreakPointView.java
+++ b/src/org/ntlab/traceDebugger/BreakPointView.java
@@ -1,5 +1,6 @@
package org.ntlab.traceDebugger;
+import org.eclipse.core.resources.IMarker;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuListener;
@@ -84,7 +85,9 @@
// �I������TraceBreakPoint�̏ꏊ���J���Ĕ��]�\������ (������������?)
MethodExecution methodExecution = tbp.getMethodExecutions().iterator().next();
int highlightLineNo = tbp.getLineNo();
- JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, highlightLineNo);
+// JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, highlightLineNo);
+ IMarker marker = DebuggingController.getInstance().createCurrentLineMarker(methodExecution, highlightLineNo);
+ JavaEditorOperator.markAndOpenJavaFile(marker);
}
}
});
diff --git a/src/org/ntlab/traceDebugger/CallStackView.java b/src/org/ntlab/traceDebugger/CallStackView.java
index 1febba0..d4cdf64 100644
--- a/src/org/ntlab/traceDebugger/CallStackView.java
+++ b/src/org/ntlab/traceDebugger/CallStackView.java
@@ -65,7 +65,10 @@
selectionCallStackModel = callStackModel;
MethodExecution methodExecution = callStackModel.getMethodExecution();
TracePoint tp = callStackModel.getTracePoint();
- JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, callStackModel.getCallLineNo());
+// JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, callStackModel.getCallLineNo());
+ IMarker marker = DebuggingController.getInstance().createCurrentLineMarker(methodExecution, callStackModel.getCallLineNo());
+ JavaEditorOperator.markAndOpenJavaFile(marker);
+
CallTreeView callTreeView = (CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID);
callTreeView.highlight(methodExecution);
@@ -76,9 +79,11 @@
DeltaMarkerView deltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.getActiveView(DeltaMarkerView.ID);
if (deltaMarkerView != null) {
DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager();
- Map> deltaMarkers = deltaMarkerManager.getMarkers();
- if (deltaMarkers != null) {
- variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkers);
+ if (deltaMarkerManager != null) {
+ Map> deltaMarkers = deltaMarkerManager.getMarkers();
+ if (deltaMarkers != null) {
+ variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkers);
+ }
}
}
}
diff --git a/src/org/ntlab/traceDebugger/DebuggingController.java b/src/org/ntlab/traceDebugger/DebuggingController.java
index 1879b4e..3a56beb 100644
--- a/src/org/ntlab/traceDebugger/DebuggingController.java
+++ b/src/org/ntlab/traceDebugger/DebuggingController.java
@@ -1,7 +1,21 @@
package org.ntlab.traceDebugger;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.filebuffers.ITextFileBufferManager;
+import org.eclipse.core.filebuffers.LocationKind;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
@@ -24,6 +38,8 @@
private TracePoint debuggingTp;
private TraceBreakPoint selectedTraceBreakPoint;
private TraceBreakPoints traceBreakPoints = new TraceBreakPoints();
+ private IMarker currentLineMarker;
+ public static final String CURRENT_MARKER_ID = "org.ntlab.traceDebugger.currentMarker";
private DebuggingController() {
@@ -122,6 +138,13 @@
public void terminateAction() {
debuggingTp = null;
+ if (currentLineMarker != null) {
+ try {
+ currentLineMarker.delete();
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ }
((CallStackView)getOtherView(CallStackView.ID)).reset();
((VariableView)getOtherView(VariableView.ID)).reset();
}
@@ -168,13 +191,13 @@
}
} while (debuggingTp.stepFull());
- if (debuggingTp.getStatement() instanceof BlockEnter) {
- debuggingTp.stepFull();
- }
if (!debuggingTp.isValid()) {
terminateAction();
MessageDialog.openInformation(null, "Terminate", "This trace is terminated");
return false;
+ }
+ if (debuggingTp.getStatement() instanceof BlockEnter) {
+ debuggingTp.stepFull();
}
refresh(previousTp, debuggingTp, isReturned, true);
return true;
@@ -211,14 +234,14 @@
Variables.getInstance().addDifferentialUpdatePoint(debuggingTp);
}
} while (debuggingTp.stepFull());
-
- if (debuggingTp.getStatement() instanceof BlockEnter) {
- debuggingTp.stepFull();
- }
+
if (!debuggingTp.isValid()) {
terminateAction();
MessageDialog.openInformation(null, "Terminate", "This trace is terminated");
return false;
+ }
+ if (debuggingTp.getStatement() instanceof BlockEnter) {
+ debuggingTp.stepFull();
}
boolean isReturned = false;
refresh(previousTp, debuggingTp, isReturned, true);
@@ -318,7 +341,9 @@
private void refresh(TracePoint from, TracePoint to, boolean isReturned, boolean canDifferentialUpdateVariables) {
MethodExecution me = to.getMethodExecution();
int lineNo = to.getStatement().getLineNo();
- JavaEditorOperator.openSrcFileOfMethodExecution(me, lineNo);
+// JavaEditorOperator.openSrcFileOfMethodExecution(me, lineNo);
+ IMarker marker = createCurrentLineMarker(me, lineNo);
+ JavaEditorOperator.markAndOpenJavaFile(marker);
CallStackView callStackView = ((CallStackView)getOtherView(CallStackView.ID));
callStackView.updateByTracePoint(to);
VariableView variableView = ((VariableView)getOtherView(VariableView.ID));
@@ -330,6 +355,35 @@
}
}
+ public IMarker createCurrentLineMarker(MethodExecution methodExecution, int highlightLineNo) {
+ IFile file = JavaElementFinder.findIFile(methodExecution);
+ try {
+// file.deleteMarkers(CURRENT_MARKER_ID, false, IResource.DEPTH_ZERO);
+ if (currentLineMarker != null) currentLineMarker.delete();
+ currentLineMarker = file.createMarker(CURRENT_MARKER_ID);
+ Map attributes = new HashMap<>();
+ attributes.put(IMarker.TRANSIENT, true);
+ attributes.put(IMarker.LINE_NUMBER, highlightLineNo);
+
+ IPath path = file.getFullPath();
+ ITextFileBufferManager manager = FileBuffers.getTextFileBufferManager();
+ manager.connect(path, LocationKind.IFILE, null);
+ ITextFileBuffer buffer = manager.getTextFileBuffer(path, LocationKind.IFILE);
+ IDocument document = buffer.getDocument();
+ try {
+ IRegion region = document.getLineInformation(highlightLineNo - 1);
+ attributes.put(IMarker.CHAR_START, region.getOffset());
+ attributes.put(IMarker.CHAR_END, region.getOffset() + region.getLength());
+ } catch (BadLocationException e) {
+ e.printStackTrace();
+ }
+ currentLineMarker.setAttributes(attributes);
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ return currentLineMarker;
+ }
+
private IViewPart getOtherView(String viewId) {
IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try {
diff --git a/src/org/ntlab/traceDebugger/TracePointsView.java b/src/org/ntlab/traceDebugger/TracePointsView.java
index 7933aba..7ac112a 100644
--- a/src/org/ntlab/traceDebugger/TracePointsView.java
+++ b/src/org/ntlab/traceDebugger/TracePointsView.java
@@ -75,7 +75,9 @@
selectedTp = (TracePoint)element;
MethodExecution me = selectedTp.getMethodExecution();
int lineNo = selectedTp.getStatement().getLineNo();
- JavaEditorOperator.openSrcFileOfMethodExecution(me, lineNo);
+// JavaEditorOperator.openSrcFileOfMethodExecution(me, lineNo);
+ IMarker marker = DebuggingController.getInstance().createCurrentLineMarker(me, lineNo);
+ JavaEditorOperator.markAndOpenJavaFile(marker);
}
}
});
@@ -186,7 +188,10 @@
debuggingController.jumpToTheTracePoint(tp, false);
MethodExecution currentME = tp.getMethodExecution();
int lineNo = tp.getStatement().getLineNo();
- JavaEditorOperator.openSrcFileOfMethodExecution(currentME, lineNo);
+// JavaEditorOperator.openSrcFileOfMethodExecution(currentME, lineNo);
+ IMarker marker = DebuggingController.getInstance().createCurrentLineMarker(currentME, lineNo);
+ JavaEditorOperator.markAndOpenJavaFile(marker);
+
CallStackView callStackView = ((CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID));
VariableView variableView = ((VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID));
diff --git a/src/org/ntlab/traceDebugger/VariableView.java b/src/org/ntlab/traceDebugger/VariableView.java
index 01755e2..63a9189 100644
--- a/src/org/ntlab/traceDebugger/VariableView.java
+++ b/src/org/ntlab/traceDebugger/VariableView.java
@@ -215,9 +215,10 @@
updateDeltaActionsTexts(selectedVariable);
if (selectedVariable.getVariableName().equals(Variables.RETURN_VARIABLE_NAME)) {
manager.add(deltaActionForContainerToComponent);
- manager.add(deltaActionForThisToAnother);
+ manager.add(deltaActionForThisToAnother);
} else {
manager.add(deltaAction);
+// manager.add(deltaActionForCollection);
}
// manager.add(deltaActionForCollection);
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
@@ -241,20 +242,27 @@
String containerId = selectedVariable.getContainerId();
String containerClassName = selectedVariable.getContainerClassName();
- containerClassName = containerClassName.substring(containerClassName.lastIndexOf(".") + 1);
- String textForContainerToComponent = String.format("Extract Delta (%s: %s �� %s: %s)", containerId, containerClassName, valueId, valueClassName);
- deltaActionForContainerToComponent.setText(textForContainerToComponent);
- deltaActionForContainerToComponent.setToolTipText(textForContainerToComponent);
- deltaAction.setText(textForContainerToComponent);
- deltaAction.setToolTipText(textForContainerToComponent);
-
+ if (containerId != null && containerClassName != null) {
+ containerClassName = containerClassName.substring(containerClassName.lastIndexOf(".") + 1);
+ String textForContainerToComponent = String.format("Extract Delta (%s: %s �� %s: %s)", containerId, containerClassName, valueId, valueClassName);
+ deltaActionForContainerToComponent.setText(textForContainerToComponent);
+ deltaActionForContainerToComponent.setToolTipText(textForContainerToComponent);
+ deltaAction.setText(textForContainerToComponent);
+ deltaAction.setToolTipText(textForContainerToComponent);
+ } else {
+ deltaAction.setText("Extract Delta");
+ deltaAction.setToolTipText("Extract Delta");
+ }
+
TracePoint before = selectedVariable.getBeforeTracePoint();
String thisId = before.getMethodExecution().getThisObjId();
String thisClassName = before.getMethodExecution().getThisClassName();
- thisClassName = thisClassName.substring(thisClassName.lastIndexOf(".") + 1);
- String textForThisToAnother = String.format("Extract Delta (%s: %s �� %s: %s)", thisId, thisClassName, valueId, valueClassName);
- deltaActionForThisToAnother.setText(textForThisToAnother);
- deltaActionForThisToAnother.setToolTipText(textForThisToAnother);
+ if (thisId != null && thisClassName != null) {
+ thisClassName = thisClassName.substring(thisClassName.lastIndexOf(".") + 1);
+ String textForThisToAnother = String.format("Extract Delta (%s: %s �� %s: %s)", thisId, thisClassName, valueId, valueClassName);
+ deltaActionForThisToAnother.setText(textForThisToAnother);
+ deltaActionForThisToAnother.setToolTipText(textForThisToAnother);
+ }
}
public void updateVariablesByTracePoint(TracePoint tp, boolean isReturned) {