diff --git a/plugin.xml b/plugin.xml
index 252a1c2..f170f3b 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -44,6 +44,13 @@
name="CallTree"
restorable="true">
+
+
diff --git a/src/org/ntlab/traceDebugger/CallStackView.java b/src/org/ntlab/traceDebugger/CallStackView.java
index fb58439..c04ba47 100644
--- a/src/org/ntlab/traceDebugger/CallStackView.java
+++ b/src/org/ntlab/traceDebugger/CallStackView.java
@@ -3,6 +3,7 @@
import java.util.List;
import java.util.Map;
+import org.eclipse.core.resources.IMarker;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
@@ -22,6 +23,9 @@
import org.eclipse.ui.part.ViewPart;
import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution;
import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint;
+import org.ntlab.traceDebugger.analyzerProvider.AbstractAnalyzer;
+import org.ntlab.traceDebugger.analyzerProvider.DeltaExtractionAnalyzer;
+import org.ntlab.traceDebugger.analyzerProvider.DeltaMarkerManager;
public class CallStackView extends ViewPart {
private TreeViewer viewer;
@@ -56,7 +60,22 @@
MethodExecution methodExecution = callStackModel.getMethodExecution();
TracePoint tp = callStackModel.getTracePoint();
JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, callStackModel.getCallLineNo());
- ((VariableView)getOtherView(VariableView.ID)).updateVariablesByTracePoint(tp, false);
+ CallTreeView callTreeView = (CallTreeView)(getOtherView(CallTreeView.ID));
+ callTreeView.highlight(methodExecution);
+
+ VariableView variableView = (VariableView)(getOtherView(VariableView.ID));
+ variableView.updateVariablesByTracePoint(tp, false);
+ AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer();
+ if (analyzer instanceof DeltaExtractionAnalyzer) {
+ DeltaMarkerView deltaMarkerView = ((DeltaExtractionAnalyzer)analyzer).getActiveDeltaMarkerView();
+ if (deltaMarkerView != null) {
+ DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager();
+ Map> deltaMarkers = deltaMarkerManager.getMarkers();
+ if (deltaMarkers != null) {
+ variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkers);
+ }
+ }
+ }
}
}
}
diff --git a/src/org/ntlab/traceDebugger/CallTreeView.java b/src/org/ntlab/traceDebugger/CallTreeView.java
index 2470723..8fdd670 100644
--- a/src/org/ntlab/traceDebugger/CallTreeView.java
+++ b/src/org/ntlab/traceDebugger/CallTreeView.java
@@ -51,8 +51,9 @@
if (value instanceof CallTreeModel) {
CallTreeModel callTreeModel = (CallTreeModel)value;
MethodExecution methodExecution = callTreeModel.getMethodExecution();
+ highlight(methodExecution);
TracePoint tp = methodExecution.getEntryPoint();
- JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, -1);
+ JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, -1);
DeltaMarkerView deltaMarkerView = ((DeltaMarkerView)getOtherView(DeltaMarkerView.ID, subId));
DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager();
CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID, null);
diff --git a/src/org/ntlab/traceDebugger/DebuggingController.java b/src/org/ntlab/traceDebugger/DebuggingController.java
index ce24a7f..46f9009 100644
--- a/src/org/ntlab/traceDebugger/DebuggingController.java
+++ b/src/org/ntlab/traceDebugger/DebuggingController.java
@@ -36,6 +36,10 @@
this.selectedTraceBreakPoint = tbp;
}
+ public TracePoint getCurrentTp() {
+ return debuggingTp.duplicate();
+ }
+
public boolean fileOpenAction(Shell shell) {
FileDialog fileDialog = new FileDialog(shell, SWT.OPEN);
fileDialog.setText("Open Trace File");
diff --git a/src/org/ntlab/traceDebugger/DeltaMarkerView.java b/src/org/ntlab/traceDebugger/DeltaMarkerView.java
index 2951ee3..e1e35d4 100644
--- a/src/org/ntlab/traceDebugger/DeltaMarkerView.java
+++ b/src/org/ntlab/traceDebugger/DeltaMarkerView.java
@@ -23,9 +23,10 @@
import org.eclipse.ui.part.ViewPart;
import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution;
import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint;
+import org.ntlab.traceDebugger.analyzerProvider.AbstractAnalyzer;
import org.ntlab.traceDebugger.analyzerProvider.Alias;
import org.ntlab.traceDebugger.analyzerProvider.Alias.AliasType;
-
+import org.ntlab.traceDebugger.analyzerProvider.DeltaExtractionAnalyzer;
import org.ntlab.traceDebugger.analyzerProvider.DeltaMarkerManager;
public class DeltaMarkerView extends ViewPart {
@@ -131,6 +132,10 @@
@Override
public void setFocus() {
// TODO Auto-generated method stub
+ AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer();
+ if (analyzer instanceof DeltaExtractionAnalyzer) {
+ ((DeltaExtractionAnalyzer)analyzer).setActiveDeltaMarkerView(this);
+ }
viewer.getControl().setFocus();
}
diff --git a/src/org/ntlab/traceDebugger/TracePoints.java b/src/org/ntlab/traceDebugger/TracePoints.java
new file mode 100644
index 0000000..3014b65
--- /dev/null
+++ b/src/org/ntlab/traceDebugger/TracePoints.java
@@ -0,0 +1,26 @@
+package org.ntlab.traceDebugger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint;
+
+public class TracePoints {
+ List tracePoints = new ArrayList<>();
+
+ public List getTracePoints() {
+ return tracePoints;
+ }
+
+ public TracePoint[] getTracePointsArray() {
+ return tracePoints.toArray(new TracePoint[tracePoints.size()]);
+ }
+
+ public void addTracePoints(TracePoint tp) {
+ tracePoints.add(tp);
+ }
+
+ public void removeTracePoints(TracePoint tp) {
+ tracePoints.remove(tp);
+ }
+}
diff --git a/src/org/ntlab/traceDebugger/TracePointsLabelProvider.java b/src/org/ntlab/traceDebugger/TracePointsLabelProvider.java
new file mode 100644
index 0000000..4d0d377
--- /dev/null
+++ b/src/org/ntlab/traceDebugger/TracePointsLabelProvider.java
@@ -0,0 +1,35 @@
+package org.ntlab.traceDebugger;
+
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint;
+
+public class TracePointsLabelProvider extends LabelProvider implements ITableLabelProvider {
+
+ @Override
+ public String getColumnText(Object element, int columnIndex) {
+ if (element instanceof TracePoint) {
+ TracePoint tp = (TracePoint)element;
+ switch (columnIndex) {
+ case 0:
+ return String.valueOf(tp.getStatement().getLineNo());
+ case 1:
+ return tp.getMethodExecution().getSignature();
+ }
+ }
+ return "�e�X�g�p�e�L�X�g" + columnIndex;
+ }
+
+ @Override
+ public Image getColumnImage(Object element, int columnIndex) {
+ return getImage(element);
+ }
+
+ @Override
+ public Image getImage(Object element) {
+ return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
+ }
+}
\ No newline at end of file
diff --git a/src/org/ntlab/traceDebugger/TracePointsView.java b/src/org/ntlab/traceDebugger/TracePointsView.java
new file mode 100644
index 0000000..e315b8d
--- /dev/null
+++ b/src/org/ntlab/traceDebugger/TracePointsView.java
@@ -0,0 +1,185 @@
+package org.ntlab.traceDebugger;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ViewPart;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint;
+import org.ntlab.traceDebugger.analyzerProvider.AbstractAnalyzer;
+import org.ntlab.traceDebugger.analyzerProvider.DeltaExtractionAnalyzer;
+import org.ntlab.traceDebugger.analyzerProvider.DeltaMarkerManager;
+
+public class TracePointsView extends ViewPart {
+ private TableViewer viewer;
+ private Shell shell;
+ private IAction addAction;
+ private IAction removeAction;
+ private TracePoints tracePoints = new TracePoints();
+ public static final String ID = "org.ntlab.traceDebugger.tracePointsView";
+
+ public TracePointsView() {
+ // TODO Auto-generated constructor stub
+ System.out.println("BreakPointView�N���X���������ꂽ��!");
+ }
+
+ @Override
+ public void createPartControl(Composite parent) {
+ // TODO Auto-generated method stub
+ System.out.println("TracePointsView#createPartControl(Composite)���Ăꂽ��!");
+ shell = parent.getShell();
+ viewer = new TableViewer(parent, SWT.FULL_SELECTION);
+ Table table = viewer.getTable();
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ // �e�[�u���̃J�������쐬
+ String[] tableColumnTexts = {"Line No", "Signature"};
+ int[] tableColumnWidth = {80, 1000};
+ TableColumn[] tableColumns = new TableColumn[tableColumnTexts.length];
+ for (int i = 0; i < tableColumns.length; i++) {
+ tableColumns[i] = new TableColumn(table, SWT.NULL);
+ tableColumns[i].setText(tableColumnTexts[i]);
+ tableColumns[i].setWidth(tableColumnWidth[i]);
+ }
+ viewer.setContentProvider(new ArrayContentProvider());
+ viewer.setLabelProvider(new TracePointsLabelProvider());
+ viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ IStructuredSelection sel = (IStructuredSelection)event.getSelection();
+ Object element = sel.getFirstElement();
+ if (element instanceof TracePoint) {
+ TracePoint tp = (TracePoint)element;
+ DebuggingController debuggingController = DebuggingController.getInstance();
+ debuggingController.jumpToTheTracePoint(tp, false);
+ MethodExecution currentME = tp.getMethodExecution();
+ int lineNo = tp.getStatement().getLineNo();
+ JavaEditorOperator.openSrcFileOfMethodExecution(currentME, lineNo);
+ CallStackView callStackView = ((CallStackView)getOtherView(CallStackView.ID));
+ VariableView variableView = ((VariableView)getOtherView(VariableView.ID));
+
+ AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer();
+ if (analyzer instanceof DeltaExtractionAnalyzer) {
+ DeltaMarkerView deltaMarkerView = ((DeltaExtractionAnalyzer)analyzer).getActiveDeltaMarkerView();
+ if (deltaMarkerView != null) {
+ DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager();
+ Map> deltaMarkers = deltaMarkerManager.getMarkers();
+ if (deltaMarkers != null) {
+ variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkers);
+ }
+ IMarker coordinatorMarker = deltaMarkerManager.getCoordinatorDeltaMarker();
+ MethodExecution coordinatorME = deltaMarkerManager.getMethodExecution(coordinatorMarker);
+ callStackView.highlight(coordinatorME);
+ CallTreeView callTreeView = ((CallTreeView)getOtherView(CallTreeView.ID));
+ callTreeView.highlight(currentME);
+ }
+ }
+ }
+ }
+ });
+
+ createActions();
+ createToolBar();
+ createMenuBar();
+ createPopupMenu();
+ }
+
+ @Override
+ public void setFocus() {
+ // TODO Auto-generated method stub
+ viewer.getControl().setFocus();
+ }
+
+ private void createActions() {
+ addAction = new Action() {
+ @Override
+ public void run() {
+ DebuggingController debuggingController = DebuggingController.getInstance();
+ TracePoint currentTp = debuggingController.getCurrentTp();
+ addTracePoint(currentTp);
+// tracePoints.addTracePoints(currentTp);
+// update();
+ }
+ };
+ addAction.setText("Add");
+ addAction.setToolTipText("Add");
+
+ removeAction = new Action() {
+ @Override
+ public void run() {
+// tracePoints.removeTracePoints(tp);
+ update();
+ }
+ };
+ removeAction.setText("Remove");
+ removeAction.setToolTipText("Remove");
+ }
+
+ private void createToolBar() {
+ IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
+ mgr.add(addAction);
+ }
+
+ private void createMenuBar() {
+ IMenuManager mgr = getViewSite().getActionBars().getMenuManager();
+ mgr.add(addAction);
+ }
+
+ private void createPopupMenu() {
+ MenuManager menuMgr = new MenuManager("#PopupMenu");
+ menuMgr.setRemoveAllWhenShown(true);
+ menuMgr.addMenuListener(new IMenuListener() {
+ @Override
+ public void menuAboutToShow(IMenuManager manager) {
+// manager.add(addAction);
+// manager.add(removeAction);
+// manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+ });
+ Menu menu = menuMgr.createContextMenu(viewer.getControl());
+ viewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(menuMgr, viewer);
+ }
+
+ public void addTracePoint(TracePoint tp) {
+ tracePoints.addTracePoints(tp);
+ update();
+ }
+
+ private void update() {
+ viewer.setInput(tracePoints.getTracePointsArray());
+ viewer.refresh();
+ }
+
+ private IViewPart getOtherView(String viewId) {
+ IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ try {
+ return workbenchPage.showView(viewId);
+ } catch (PartInitException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/org/ntlab/traceDebugger/VariableView.java b/src/org/ntlab/traceDebugger/VariableView.java
index 2fa6fa7..a429e27 100644
--- a/src/org/ntlab/traceDebugger/VariableView.java
+++ b/src/org/ntlab/traceDebugger/VariableView.java
@@ -173,6 +173,8 @@
// callTreeView.highlight(coordinatorME);
callTreeView.update(deltaMarkerManager);
callTreeView.highlight(coordinatorME);
+ TracePointsView tracePointsView = (TracePointsView)getOtherView(TracePointsView.ID);
+ tracePointsView.addTracePoint(coordinatorPoint);
} catch (PartInitException e) {
e.printStackTrace();
}
@@ -228,7 +230,9 @@
if (dstSideDeltaMarkers != null) {
markVariables(DeltaMarkerManager.DST_SIDE_DELTA_MARKER, dstSideDeltaMarkers);
}
- markVariables(DeltaMarkerManager.COORDINATOR_DELTA_MARKER, coordinatorMarker);
+ if (coordinatorMarker != null) {
+ markVariables(DeltaMarkerManager.COORDINATOR_DELTA_MARKER, coordinatorMarker);
+ }
viewer.refresh();
expandAllMarkedNodes();
}
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java
index 8a951d2..afd9b83 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java
@@ -5,6 +5,7 @@
import java.util.List;
import java.util.Map;
+import org.eclipse.ui.IViewPart;
import org.ntlab.traceAnalysisPlatform.tracer.trace.FieldUpdate;
import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution;
import org.ntlab.traceAnalysisPlatform.tracer.trace.Reference;
@@ -13,6 +14,7 @@
import org.ntlab.traceAnalysisPlatform.tracer.trace.TraceJSON;
import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint;
import org.ntlab.traceDebugger.DeltaMarkerView;
+import org.ntlab.traceDebugger.TraceDebuggerPlugin;
import org.ntlab.traceDebugger.Variable;
public class DeltaExtractionAnalyzer extends AbstractAnalyzer {
@@ -20,6 +22,7 @@
private DeltaExtractorJSON deltaExtractor;
private ExtractedStructure extractedStructure;
private Map deltaMarkerViews = new HashMap<>();
+ private DeltaMarkerView activeDeltaMarkerView;
public DeltaExtractionAnalyzer(Trace trace) {
super(trace);
@@ -27,6 +30,10 @@
reset();
}
+ /**
+ * note: �I�����C����͗p
+ * @return
+ */
private static DeltaExtractionAnalyzer getInstance() {
if (theInstance == null) {
theInstance = new DeltaExtractionAnalyzer(TraceJSON.getInstance());
@@ -135,4 +142,12 @@
public String getNextDeltaMarkerSubId() {
return String.valueOf(deltaMarkerViews.size() + 1);
}
+
+ public DeltaMarkerView getActiveDeltaMarkerView() {
+ return activeDeltaMarkerView;
+ }
+
+ public void setActiveDeltaMarkerView(DeltaMarkerView deltaMarkerView) {
+ this.activeDeltaMarkerView = deltaMarkerView;
+ }
}
\ No newline at end of file