diff --git a/icons/currentMarker.png b/icons/currentMarker.png
new file mode 100644
index 0000000..bdbd6aa
--- /dev/null
+++ b/icons/currentMarker.png
Binary files differ
diff --git a/plugin.xml b/plugin.xml
index 7f5381a..2536e1b 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -183,6 +183,7 @@
markertype="org.ntlab.traceDebugger.dstSideDeltaMarker">
@@ -300,6 +301,7 @@
colorPreferenceValue="198,219,174"
highlightPreferenceKey="clhighlight5"
highlightPreferenceValue="true"
+ icon="icons/currentMarker.png"
includeOnPreferencePage="true"
label="CurrentAnnotation"
overviewRulerPreferenceKey="clruler5"
diff --git a/src/org/ntlab/traceDebugger/DebuggingController.java b/src/org/ntlab/traceDebugger/DebuggingController.java
index 7b8c78a..807d334 100644
--- a/src/org/ntlab/traceDebugger/DebuggingController.java
+++ b/src/org/ntlab/traceDebugger/DebuggingController.java
@@ -1,6 +1,8 @@
package org.ntlab.traceDebugger;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.eclipse.core.filebuffers.FileBuffers;
import org.eclipse.core.filebuffers.ITextFileBuffer;
@@ -37,7 +39,7 @@
private static final DebuggingController theInstance = new DebuggingController();
private TracePoint debuggingTp;
private TraceBreakPoint selectedTraceBreakPoint;
- private IMarker currentLineMarker;
+ private List currentLineMarkers = new ArrayList<>();
private LoadingTraceFileStatus loadingTraceFileStatus = LoadingTraceFileStatus.NOT_YET;
private boolean isRunning = false;
public static final String CURRENT_MARKER_ID = "org.ntlab.traceDebugger.currentMarker";
@@ -96,7 +98,8 @@
((CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID)).reset();
((VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID)).reset();
((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).reset();
- ((TracePointsView)TraceDebuggerPlugin.getActiveView(TracePointsView.ID)).reset();
+ TracePointsView tracePointsView = (TracePointsView)TraceDebuggerPlugin.getActiveView(TracePointsView.ID);
+ if (tracePointsView != null) tracePointsView.reset();
CallTreeView callTreeView = (CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID);
if (callTreeView != null) callTreeView.reset();
loadTraceFileOnOtherThread(path);
@@ -227,15 +230,32 @@
return true;
}
+// public void terminateAction() {
+// debuggingTp = null;
+// if (currentLineMarker != null) {
+// try {
+// currentLineMarker.delete();
+// } catch (CoreException e) {
+// e.printStackTrace();
+// }
+// }
+// ((CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID)).reset();
+// ((VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID)).reset();
+// ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).updateImagesForDebug(false);
+// isRunning = false;
+// }
+
public void terminateAction() {
debuggingTp = null;
- if (currentLineMarker != null) {
- try {
- currentLineMarker.delete();
- } catch (CoreException e) {
- e.printStackTrace();
- }
- }
+ if (!(currentLineMarkers.isEmpty())) {
+ for (IMarker currentLineMarker : currentLineMarkers) {
+ try {
+ currentLineMarker.delete();
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ }
+ }
((CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID)).reset();
((VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID)).reset();
((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).updateImagesForDebug(false);
@@ -453,10 +473,9 @@
}
private void refresh(TracePoint from, TracePoint to, boolean isReturned, boolean canDifferentialUpdateVariables) {
- MethodExecution me = to.getMethodExecution();
- int lineNo = to.getStatement().getLineNo();
- IMarker marker = createCurrentLineMarker(me, lineNo);
- JavaEditorOperator.markAndOpenJavaFile(marker);
+ List markers = createCurrentLineMarkers(to);
+ if (!(markers.isEmpty())) JavaEditorOperator.markAndOpenJavaFile(markers.get(0));
+
CallStackView callStackView = ((CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID));
callStackView.updateByTracePoint(to);
VariableView variableView = ((VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID));
@@ -487,32 +506,49 @@
variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers());
}
- public IMarker createCurrentLineMarker(MethodExecution methodExecution, int highlightLineNo) {
- IFile file = JavaElementFinder.findIFile(methodExecution);
- try {
- 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();
+ public List createCurrentLineMarkers(TracePoint tp) {
+ deleteCurrentLineMarkers();
+ while (tp != null) {
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) {
+ MethodExecution methodExecution = tp.getMethodExecution();
+ int highlightLineNo = tp.getStatement().getLineNo();
+ IFile file = JavaElementFinder.findIFile(methodExecution);
+ IMarker currentLineMarker = file.createMarker(CURRENT_MARKER_ID);
+ currentLineMarkers.add(currentLineMarker);
+ 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();
}
- currentLineMarker.setAttributes(attributes);
- } catch (CoreException e) {
- e.printStackTrace();
+ tp = tp.getMethodExecution().getCallerTracePoint();
}
- return currentLineMarker;
+ return currentLineMarkers;
+ }
+
+ private void deleteCurrentLineMarkers() {
+ for (IMarker currentLineMarker : currentLineMarkers) {
+ try {
+ currentLineMarker.delete();
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ }
+ currentLineMarkers.clear();
}
private TracePoint getTracePointSelectedOnCallStack() {
diff --git a/src/org/ntlab/traceDebugger/TracePoints.java b/src/org/ntlab/traceDebugger/TracePoints.java
index 45f3a19..b152466 100644
--- a/src/org/ntlab/traceDebugger/TracePoints.java
+++ b/src/org/ntlab/traceDebugger/TracePoints.java
@@ -16,6 +16,10 @@
return tracePoints.toArray(new TracePoint[tracePoints.size()]);
}
+ public boolean contains(TracePoint tp) {
+ return tracePoints.contains(tp);
+ }
+
public void add(TracePoint tp) {
tracePoints.add(tp);
}
diff --git a/src/org/ntlab/traceDebugger/TracePointsView.java b/src/org/ntlab/traceDebugger/TracePointsView.java
index 63f43d8..f561e17 100644
--- a/src/org/ntlab/traceDebugger/TracePointsView.java
+++ b/src/org/ntlab/traceDebugger/TracePointsView.java
@@ -1,5 +1,7 @@
package org.ntlab.traceDebugger;
+import java.util.List;
+
import org.eclipse.core.resources.IMarker;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
@@ -180,8 +182,10 @@
}
public void addTracePoint(TracePoint tp) {
- tracePoints.add(tp);
- update();
+ if (!(tracePoints.contains(tp))) {
+ tracePoints.add(tp);
+ update();
+ }
}
public void reset() {
@@ -197,9 +201,7 @@
protected void jumpToTheTracePoint(TracePoint tp) {
DebuggingController debuggingController = DebuggingController.getInstance();
debuggingController.jumpToTheTracePoint(tp, false);
- MethodExecution currentME = tp.getMethodExecution();
- int lineNo = tp.getStatement().getLineNo();
- IMarker marker = DebuggingController.getInstance().createCurrentLineMarker(currentME, lineNo);
- JavaEditorOperator.markAndOpenJavaFile(marker);
- }
+ List markers = DebuggingController.getInstance().createCurrentLineMarkers(tp);
+ if (!(markers.isEmpty())) JavaEditorOperator.markAndOpenJavaFile(markers.get(0));
+ }
}
\ No newline at end of file
diff --git a/src/org/ntlab/traceDebugger/Variable.java b/src/org/ntlab/traceDebugger/Variable.java
index 995cc31..3673307 100644
--- a/src/org/ntlab/traceDebugger/Variable.java
+++ b/src/org/ntlab/traceDebugger/Variable.java
@@ -39,8 +39,8 @@
public static final String RETURN_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "�߂�l" : "return";
public static final String ARG_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "����" : "arg";
public static final String RECEIVER_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "���V�[�o" : "receiver";
- public static final String VALUE_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "�R���|�[�l���g" : "value";
- public static final String CONTAINER_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "�R���e�i" : "container";
+ public static final String VALUE_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "�Q�Ɛ�" : "referred";
+ public static final String CONTAINER_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "�Q�ƌ�" : "referring";
public enum VariableType {
USE_VALUE, USE_CONTAINER, USE_RECEIVER, USE_RETURN,
diff --git a/src/org/ntlab/traceDebugger/Variables.java b/src/org/ntlab/traceDebugger/Variables.java
index 13cd031..61335f7 100644
--- a/src/org/ntlab/traceDebugger/Variables.java
+++ b/src/org/ntlab/traceDebugger/Variables.java
@@ -295,12 +295,12 @@
}
}
}
- if (parentNodeNameOfUseSide != null) {
- setSpecialVariableNodes(parentNodeNameOfUseSide, specialVariablesOfUseSide);
- }
if (parentNodeNameOfDefSide != null) {
setSpecialVariableNodes(parentNodeNameOfDefSide, specialVariablesDefSide);
- }
+ }
+ if (parentNodeNameOfUseSide != null) {
+ setSpecialVariableNodes(parentNodeNameOfUseSide, specialVariablesOfUseSide);
+ }
}
private void setSpecialVariableNodes(String parentNodeName, List specialVariables) {
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java
index 0e593ad..52039b2 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java
@@ -2,6 +2,7 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -42,7 +43,7 @@
public class DeltaMarkerManager {
private Map> markerIdToMarkers = new HashMap<>();
- private List markersByOrder = new ArrayList<>();
+ private List orderedMarkers = new ArrayList<>();
private MethodExecution coordinator;
private TracePoint relatedPoint;
private Reference relatedPointReference;
@@ -68,7 +69,7 @@
}
public List getMarkersByOrder() {
- return markersByOrder;
+ return orderedMarkers;
}
public TreeNode[] getMarkerTreeNodes() {
@@ -104,7 +105,7 @@
public IMarker getCoordinatorDeltaMarker() {
List markers = markerIdToMarkers.get(COORDINATOR_DELTA_MARKER);
if (markers == null || markers.isEmpty()) return null;
- return markers.get(0);
+ return markers.get(0);
}
public IMarker getBottomDeltaMarker() {
@@ -169,6 +170,31 @@
}
msg = TraceDebuggerPlugin.isJapanese() ? "�Q�Ǝ��_" : "RelatedPoint";
markAndOpenJavaFileForCreationPoint(relatedPoint, relatedPointReference, msg, DeltaMarkerManager.BOTTOM_DELTA_MARKER);
+ createMarkerListOrdered();
+ }
+
+ private void createMarkerListOrdered() {
+ orderedMarkers.clear();
+ IMarker coordinatorMarker = getCoordinatorDeltaMarker();
+ if (coordinatorMarker != null) orderedMarkers.add(coordinatorMarker);
+ List aliasMarkers = new ArrayList<>();
+ List srcSideMarkers = markerIdToMarkers.get(SRC_SIDE_DELTA_MARKER);
+ if (srcSideMarkers != null) aliasMarkers.addAll(srcSideMarkers);
+ List dstSideMarkers = markerIdToMarkers.get(DST_SIDE_DELTA_MARKER);
+ if (dstSideMarkers != null) aliasMarkers.addAll(dstSideMarkers);
+ Collections.sort(aliasMarkers, new Comparator() {
+ @Override
+ public int compare(IMarker o1, IMarker o2) {
+ TracePoint tp1 = DeltaMarkerManager.getTracePoint(o1);
+ TracePoint tp2 = DeltaMarkerManager.getTracePoint(o2);
+ long time1 = tp1.getMethodExecution().getEntryTime();
+ long time2 = tp2.getMethodExecution().getEntryTime();
+ return (time1 < time2) ? -1 : 1;
+ }
+ });
+ orderedMarkers.addAll(aliasMarkers);
+ IMarker bottomMarker = getBottomDeltaMarker();
+ if (bottomMarker != null) orderedMarkers.add(bottomMarker);
}
private void markAndOpenJavaFileForAlias(Alias alias, String message, String markerId) {
@@ -271,7 +297,7 @@
markerIdToMarkers.put(markerId, markerList);
}
markerList.add(marker);
- markersByOrder.add(marker);
+// orderedMarkers.add(marker);
}
private void setAttributesForAlias(final Map attributes, Alias alias, IFile file, String markerId) {
@@ -997,6 +1023,6 @@
deleteMarkers(markerList);
}
markerIdToMarkers.clear();
- markersByOrder.clear();
+ orderedMarkers.clear();
}
}
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java
index d9be4d4..4fa7c06 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java
@@ -19,8 +19,8 @@
@Override
public void addAlias(Alias alias) {
- relatedAliases.add(alias);
if (alias == null) return;
+ relatedAliases.add(alias);
String objId = alias.getObjectId();
String srcOrDst = "";
if (srcSideIdList.contains(objId) && !(dstSideIdList.contains(objId))) {