diff --git a/plugin.xml b/plugin.xml index fe414c1..66757f2 100644 --- a/plugin.xml +++ b/plugin.xml @@ -51,6 +51,42 @@ name="TracePoints" restorable="true"> + + + + + + + + + + + + @@ -59,6 +95,16 @@ id="org.ntlab.traceDebugger.traceDebuggerPerspective" name="TraceDebugger"> + + + + diff --git a/src/org/ntlab/traceDebugger/BreakPointView.java b/src/org/ntlab/traceDebugger/BreakPointView.java index 239bad6..84e1d25 100644 --- a/src/org/ntlab/traceDebugger/BreakPointView.java +++ b/src/org/ntlab/traceDebugger/BreakPointView.java @@ -29,24 +29,24 @@ import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution; public class BreakPointView extends ViewPart { - private TableViewer viewer; - private IAction fileOpenAction; - private IAction addTraceBreakPointAction; - private IAction removeTraceBreakPointAction; - private IAction changeAvailableAction; - private IAction debugAction; - private IAction terminateAction; - private IAction stepIntoAction; - private IAction stepOverAction; - private IAction stepReturnAction; - private IAction stepNextAction; - private IAction resumeAction; - private IAction stepBackIntoAction; - private IAction stepBackOverAction; - private IAction stepBackReturnAction; - private IAction backResumeAction; - private Shell shell; - private DebuggingController debuggingController = DebuggingController.getInstance(); + protected TableViewer viewer; + protected IAction fileOpenAction; + protected IAction addTraceBreakPointAction; + protected IAction removeTraceBreakPointAction; + protected IAction changeAvailableAction; + protected IAction debugAction; + protected IAction terminateAction; + protected IAction stepIntoAction; + protected IAction stepOverAction; + protected IAction stepReturnAction; + protected IAction stepNextAction; + protected IAction resumeAction; +// private IAction stepBackIntoAction; +// private IAction stepBackOverAction; +// private IAction stepBackReturnAction; +// private IAction backResumeAction; + protected Shell shell; + protected DebuggingController debuggingController = DebuggingController.getInstance(); public static final String ID = "org.ntlab.traceDebugger.breakPointView"; public BreakPointView() { @@ -106,7 +106,7 @@ viewer.getControl().setFocus(); } - private void createActions() { + protected void createActions() { ImageDescriptor fileOpenIcon = PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_FOLDER); fileOpenAction = new Action("Open Trace File...", fileOpenIcon) { @Override @@ -218,44 +218,44 @@ ImageDescriptor image = DebugUITools.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_RESUME); resumeAction.setImageDescriptor(image); - stepBackIntoAction = new Action() { - @Override - public void run() { - debuggingController.stepBackIntoAction(); - } - }; - stepBackIntoAction.setText("Step Back Into"); - stepBackIntoAction.setToolTipText("Step Back Into"); - - stepBackOverAction = new Action() { - @Override - public void run() { - debuggingController.stepBackOverAction(); - } - }; - stepBackOverAction.setText("Step Back Over"); - stepBackOverAction.setToolTipText("Step Back Over"); - - stepBackReturnAction = new Action() { - @Override - public void run() { - debuggingController.stepBackReturnAction(); - } - }; - stepBackReturnAction.setText("Step Back Return"); - stepBackReturnAction.setToolTipText("Step Back Return"); - - backResumeAction = new Action() { - @Override - public void run() { - debuggingController.backResumeAction(); - } - }; - backResumeAction.setText("Back Resume"); - backResumeAction.setToolTipText("Back Resume"); +// stepBackIntoAction = new Action() { +// @Override +// public void run() { +// debuggingController.stepBackIntoAction(); +// } +// }; +// stepBackIntoAction.setText("Step Back Into"); +// stepBackIntoAction.setToolTipText("Step Back Into"); +// +// stepBackOverAction = new Action() { +// @Override +// public void run() { +// debuggingController.stepBackOverAction(); +// } +// }; +// stepBackOverAction.setText("Step Back Over"); +// stepBackOverAction.setToolTipText("Step Back Over"); +// +// stepBackReturnAction = new Action() { +// @Override +// public void run() { +// debuggingController.stepBackReturnAction(); +// } +// }; +// stepBackReturnAction.setText("Step Back Return"); +// stepBackReturnAction.setToolTipText("Step Back Return"); +// +// backResumeAction = new Action() { +// @Override +// public void run() { +// debuggingController.backResumeAction(); +// } +// }; +// backResumeAction.setText("Back Resume"); +// backResumeAction.setToolTipText("Back Resume"); } - private void createToolBar() { + protected void createToolBar() { IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); mgr.add(fileOpenAction); mgr.add(debugAction); @@ -265,13 +265,13 @@ mgr.add(stepOverAction); mgr.add(stepReturnAction); mgr.add(stepNextAction); - mgr.add(stepBackIntoAction); - mgr.add(stepBackOverAction); - mgr.add(stepBackReturnAction); - mgr.add(backResumeAction); +// mgr.add(stepBackIntoAction); +// mgr.add(stepBackOverAction); +// mgr.add(stepBackReturnAction); +// mgr.add(backResumeAction); } - private void createMenuBar() { + protected void createMenuBar() { IMenuManager mgr = getViewSite().getActionBars().getMenuManager(); mgr.add(fileOpenAction); mgr.add(debugAction); @@ -281,10 +281,10 @@ mgr.add(stepOverAction); mgr.add(stepReturnAction); mgr.add(stepNextAction); - mgr.add(stepBackIntoAction); - mgr.add(stepBackOverAction); - mgr.add(stepBackReturnAction); - mgr.add(backResumeAction); +// mgr.add(stepBackIntoAction); +// mgr.add(stepBackOverAction); +// mgr.add(stepBackReturnAction); +// mgr.add(backResumeAction); } private void createPopupMenu() { diff --git a/src/org/ntlab/traceDebugger/BreakPointViewRelatedReverse.java b/src/org/ntlab/traceDebugger/BreakPointViewRelatedReverse.java new file mode 100644 index 0000000..affb0f7 --- /dev/null +++ b/src/org/ntlab/traceDebugger/BreakPointViewRelatedReverse.java @@ -0,0 +1,96 @@ +package org.ntlab.traceDebugger; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.swt.widgets.Composite; + +public class BreakPointViewRelatedReverse extends BreakPointView { + private IAction stepBackIntoAction; + private IAction stepBackOverAction; + private IAction stepBackReturnAction; + private IAction backResumeAction; + private DebuggingController debuggingController = DebuggingController.getInstance(); + public static final String ID = "org.ntlab.traceDebugger.breakPointViewRelatedReverse"; + + public BreakPointViewRelatedReverse() { + // TODO Auto-generated constructor stub + System.out.println("BreakPointViewRelatedReverse�N���X���������ꂽ��!"); + } + + @Override + public void createPartControl(Composite parent) { + // TODO Auto-generated method stub + System.out.println("BreakPointViewRelatedReverse#createPartControl(Composite)���Ă΂ꂽ��!"); + super.createPartControl(parent); + TraceDebuggerPlugin.setActiveView(ID, this); + } + + @Override + public void setFocus() { + // TODO Auto-generated method stub + TraceDebuggerPlugin.setActiveView(ID, this); + viewer.getControl().setFocus(); + } + + @Override + protected void createActions() { + super.createActions(); + stepBackIntoAction = new Action() { + @Override + public void run() { + debuggingController.stepBackIntoAction(); + } + }; + stepBackIntoAction.setText("Step Back Into"); + stepBackIntoAction.setToolTipText("Step Back Into"); + + stepBackOverAction = new Action() { + @Override + public void run() { + debuggingController.stepBackOverAction(); + } + }; + stepBackOverAction.setText("Step Back Over"); + stepBackOverAction.setToolTipText("Step Back Over"); + + stepBackReturnAction = new Action() { + @Override + public void run() { + debuggingController.stepBackReturnAction(); + } + }; + stepBackReturnAction.setText("Step Back Return"); + stepBackReturnAction.setToolTipText("Step Back Return"); + + backResumeAction = new Action() { + @Override + public void run() { + debuggingController.backResumeAction(); + } + }; + backResumeAction.setText("Back Resume"); + backResumeAction.setToolTipText("Back Resume"); + } + + @Override + protected void createToolBar() { + super.createToolBar(); + IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); + mgr.add(stepBackIntoAction); + mgr.add(stepBackOverAction); + mgr.add(stepBackReturnAction); + mgr.add(backResumeAction); + } + + @Override + protected void createMenuBar() { + super.createMenuBar(); + IMenuManager mgr = getViewSite().getActionBars().getMenuManager(); + mgr.add(stepBackIntoAction); + mgr.add(stepBackOverAction); + mgr.add(stepBackReturnAction); + mgr.add(backResumeAction); + } +} diff --git a/src/org/ntlab/traceDebugger/CallStackView.java b/src/org/ntlab/traceDebugger/CallStackView.java index c9cddc2..be2eb54 100644 --- a/src/org/ntlab/traceDebugger/CallStackView.java +++ b/src/org/ntlab/traceDebugger/CallStackView.java @@ -4,13 +4,8 @@ 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.action.Separator; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; @@ -18,11 +13,6 @@ import org.eclipse.jface.viewers.TreeNodeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.ui.ISharedImages; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.IWorkbenchPage; -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; @@ -31,11 +21,9 @@ import org.ntlab.traceDebugger.analyzerProvider.DeltaMarkerManager; public class CallStackView extends ViewPart { - private TreeViewer viewer; -// private IAction refreshAction; - private IAction deltaAction; - private CallStackModel selectionCallStackModel; - private CallStackModels callStackModels = new CallStackModels(); + protected TreeViewer viewer; + protected CallStackModel selectionCallStackModel; + protected CallStackModels callStackModels = new CallStackModels(); public static final String ID = "org.ntlab.traceDebugger.callStackView"; public CallStackView() { @@ -64,27 +52,8 @@ CallStackModel callStackModel = (CallStackModel)value; selectionCallStackModel = callStackModel; MethodExecution methodExecution = callStackModel.getMethodExecution(); - TracePoint tp = callStackModel.getTracePoint(); JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, callStackModel.getCallLineNo()); - CallTreeView callTreeView = (CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID); - callTreeView.highlight(methodExecution); - - TracePoint debuggingTp = DebuggingController.getInstance().getCurrentTp(); - VariableView variableView = (VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID); - variableView.updateVariablesByTracePoint(tp, false, debuggingTp); - AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); - if (analyzer instanceof DeltaExtractionAnalyzer) { - DeltaMarkerView deltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.getActiveView(DeltaMarkerView.ID); - if (deltaMarkerView != null) { - DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager(); - if (deltaMarkerManager != null) { - Map> deltaMarkers = deltaMarkerManager.getMarkers(); - if (deltaMarkers != null) { - variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkers); - } - } - } - } + additonalActionOnSelectionChanged(callStackModel); } } } @@ -103,74 +72,24 @@ viewer.getControl().setFocus(); } - private void createActions() { -// refreshAction = new Action() { -// @Override -// public void run() { -// refresh(); -// } -// }; -// refreshAction.setText("refresh"); -// refreshAction.setToolTipText("refresh"); -// refreshAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ELCL_SYNCED)); - - deltaAction = new Action() { - @Override - public void run() { - if (selectionCallStackModel != null) { - MethodExecution callee = selectionCallStackModel.getMethodExecution(); - MethodExecution caller = callee.getParent(); - String callerClassName = caller.getThisClassName(); - String callerId = caller.getThisObjId(); - String calleeClassName = callee.getThisClassName(); - String calleeId = callee.getThisObjId(); - TracePoint before = callee.getCallerTracePoint(); - Variable variable = new Variable("tmp", callerClassName, callerId, calleeClassName, calleeId, before, false); - DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.createNewView(DeltaMarkerView.ID, IWorkbenchPage.VIEW_ACTIVATE); - newDeltaMarkerView.extractDelta(variable, false); - } - } - }; - deltaAction.setText("Extract Delta"); - deltaAction.setToolTipText("Extract Delta"); + protected void createActions() { + } - private void createToolBar() { + protected void createToolBar() { IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); -// mgr.add(refreshAction); } - private void createMenuBar() { + protected void createMenuBar() { IMenuManager mgr = getViewSite().getActionBars().getMenuManager(); -// mgr.add(refreshAction); } - private void createPopupMenu() { - MenuManager menuMgr = new MenuManager("#PopupMenu"); - menuMgr.setRemoveAllWhenShown(true); - menuMgr.addMenuListener(new IMenuListener() { - @Override - public void menuAboutToShow(IMenuManager manager) { - if (selectionCallStackModel != null) { - MethodExecution callee = selectionCallStackModel.getMethodExecution(); - MethodExecution caller = callee.getParent(); - String callerId = caller.getThisObjId(); - String callerClassName = caller.getThisClassName(); - callerClassName = callerClassName.substring(callerClassName.lastIndexOf(".") + 1); - String calleeId = callee.getThisObjId(); - String calleeClassName = callee.getThisClassName(); - calleeClassName = calleeClassName.substring(calleeClassName.lastIndexOf(".") + 1); - String text = String.format("Extract Delta (%s: %s �� %s: %s)", callerId, callerClassName, calleeId, calleeClassName); - deltaAction.setText(text); - deltaAction.setToolTipText(text); - manager.add(deltaAction); - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } - } - }); - Menu menu = menuMgr.createContextMenu(viewer.getControl()); - viewer.getControl().setMenu(menu); - getSite().registerContextMenu(menuMgr, viewer); + protected void createPopupMenu() { + + } + + protected void additonalActionOnSelectionChanged(CallStackModel selectedCallStackModel) { + } public void updateByTracePoint(TracePoint tp) { @@ -217,5 +136,5 @@ public void highlight(MethodExecution methodExecution) { callStackModels.highlight(methodExecution); viewer.refresh(); - } + } } diff --git a/src/org/ntlab/traceDebugger/CallStackViewRelatedDelta.java b/src/org/ntlab/traceDebugger/CallStackViewRelatedDelta.java new file mode 100644 index 0000000..a5ca4c1 --- /dev/null +++ b/src/org/ntlab/traceDebugger/CallStackViewRelatedDelta.java @@ -0,0 +1,118 @@ +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.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.IWorkbenchPage; +import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution; +import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint; +import org.ntlab.traceDebugger.analyzerProvider.DeltaMarkerManager; + +public class CallStackViewRelatedDelta extends CallStackView { + private IAction deltaAction; + public static final String ID = "org.ntlab.traceDebugger.callStackViewRelatedDelta"; + + public CallStackViewRelatedDelta() { + // TODO Auto-generated constructor stub + System.out.println("callStackViewRelatedDelta�N���X���������ꂽ��"); + } + + @Override + public void createPartControl(Composite parent) { + // TODO Auto-generated method stub + System.out.println("CallStackViewRelatedDelta#createPartControl(Composite)���Ă΂ꂽ��!"); + super.createPartControl(parent); + TraceDebuggerPlugin.setActiveView(ID, this); + } + + @Override + public void setFocus() { + // TODO Auto-generated method stub + TraceDebuggerPlugin.setActiveView(ID, this); + viewer.getControl().setFocus(); + } + + @Override + protected void createActions() { + deltaAction = new Action() { + @Override + public void run() { + if (selectionCallStackModel != null) { + MethodExecution callee = selectionCallStackModel.getMethodExecution(); + MethodExecution caller = callee.getParent(); + String callerClassName = caller.getThisClassName(); + String callerId = caller.getThisObjId(); + String calleeClassName = callee.getThisClassName(); + String calleeId = callee.getThisObjId(); + TracePoint before = callee.getCallerTracePoint(); + Variable variable = new Variable("tmp", callerClassName, callerId, calleeClassName, calleeId, before, false); + DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.createNewView(DeltaMarkerView.ID, IWorkbenchPage.VIEW_ACTIVATE); + newDeltaMarkerView.extractDelta(variable, false); + } + } + }; + deltaAction.setText("Extract Delta"); + deltaAction.setToolTipText("Extract Delta"); + } + + protected void createPopupMenu() { + MenuManager menuMgr = new MenuManager("#PopupMenu"); + menuMgr.setRemoveAllWhenShown(true); + menuMgr.addMenuListener(new IMenuListener() { + @Override + public void menuAboutToShow(IMenuManager manager) { + if (selectionCallStackModel != null) { + MethodExecution callee = selectionCallStackModel.getMethodExecution(); + MethodExecution caller = callee.getParent(); + String callerId = caller.getThisObjId(); + String callerClassName = caller.getThisClassName(); + callerClassName = callerClassName.substring(callerClassName.lastIndexOf(".") + 1); + String calleeId = callee.getThisObjId(); + String calleeClassName = callee.getThisClassName(); + calleeClassName = calleeClassName.substring(calleeClassName.lastIndexOf(".") + 1); + String text = String.format("Extract Delta (%s: %s �� %s: %s)", callerId, callerClassName, calleeId, calleeClassName); + deltaAction.setText(text); + deltaAction.setToolTipText(text); + manager.add(deltaAction); + manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + } + } + }); + Menu menu = menuMgr.createContextMenu(viewer.getControl()); + viewer.getControl().setMenu(menu); + getSite().registerContextMenu(menuMgr, viewer); + } + + @Override + protected void additonalActionOnSelectionChanged(CallStackModel selectedCallStackModel) { + CallStackModel callStackModel = selectedCallStackModel; + MethodExecution methodExecution = callStackModel.getMethodExecution(); + TracePoint tp = callStackModel.getTracePoint(); + CallTreeView callTreeView = (CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID); + callTreeView.highlight(methodExecution); + + TracePoint debuggingTp = DebuggingController.getInstance().getCurrentTp(); + VariableViewRelatedDelta variableView = (VariableViewRelatedDelta)TraceDebuggerPlugin.getActiveView(VariableViewRelatedDelta.ID); + variableView.updateVariablesByTracePoint(tp, false, debuggingTp); + DeltaMarkerView deltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.getActiveView(DeltaMarkerView.ID); + if (deltaMarkerView != null) { + DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager(); + if (deltaMarkerManager != null) { + 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 1940cbf..73e8f94 100644 --- a/src/org/ntlab/traceDebugger/CallTreeView.java +++ b/src/org/ntlab/traceDebugger/CallTreeView.java @@ -54,17 +54,14 @@ highlight(methodExecution); DebuggingController controller = DebuggingController.getInstance(); controller.jumpToTheTracePoint(tp, false); - CallStackView callStackView = (CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID); - VariableView variableView = ((VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID)); - AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); - if (analyzer instanceof DeltaExtractionAnalyzer) { - DeltaMarkerView deltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.getActiveView(DeltaMarkerView.ID); - DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager(); - IMarker coodinatorMarker = deltaMarkerManager.getCoordinatorDeltaMarker(); - MethodExecution coordinatorME = DeltaMarkerManager.getMethodExecution(coodinatorMarker); - if (coordinatorME != null) callStackView.highlight((MethodExecution)coordinatorME); - variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); - } + CallStackViewRelatedDelta callStackView = (CallStackViewRelatedDelta)TraceDebuggerPlugin.getActiveView(CallStackViewRelatedDelta.ID); + VariableViewRelatedDelta variableView = ((VariableViewRelatedDelta)TraceDebuggerPlugin.getActiveView(VariableViewRelatedDelta.ID)); + DeltaMarkerView deltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.getActiveView(DeltaMarkerView.ID); + DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager(); + IMarker coodinatorMarker = deltaMarkerManager.getCoordinatorDeltaMarker(); + MethodExecution coordinatorME = DeltaMarkerManager.getMethodExecution(coodinatorMarker); + if (coordinatorME != null) callStackView.highlight((MethodExecution)coordinatorME); + variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); } else { int lineNo = tp.getStatement().getLineNo(); JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, lineNo); diff --git a/src/org/ntlab/traceDebugger/DebuggingController.java b/src/org/ntlab/traceDebugger/DebuggingController.java index a43638c..934a258 100644 --- a/src/org/ntlab/traceDebugger/DebuggingController.java +++ b/src/org/ntlab/traceDebugger/DebuggingController.java @@ -19,7 +19,6 @@ import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayUpdate; -import org.ntlab.traceAnalysisPlatform.tracer.trace.BlockEnter; import org.ntlab.traceAnalysisPlatform.tracer.trace.FieldUpdate; import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution; import org.ntlab.traceAnalysisPlatform.tracer.trace.Statement; @@ -80,13 +79,8 @@ ((VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID)).reset(); ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).updateTraceBreakPoints(traceBreakPoints); ((TracePointsView)TraceDebuggerPlugin.getActiveView(TracePointsView.ID)).reset(); - if (TraceDebuggerPlugin.getAnalyzer() instanceof DeltaExtractionAnalyzer) { - ((CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID)).reset(); -// Set views = TraceDebuggerPlugin.getViews(DeltaMarkerView.ID); -// for (IViewPart view : views) { -// ((DeltaMarkerView)view).dispose(); -// } - } + CallTreeView callTreeView = (CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID); + if (callTreeView != null) callTreeView.reset(); return true; } @@ -177,9 +171,6 @@ TracePoint previousTp = debuggingTp; debuggingTp = debuggingTp.duplicate(); debuggingTp.stepFull(); -// if (debuggingTp.getStatement() instanceof BlockEnter) { -// debuggingTp.stepFull(); -// } if (!debuggingTp.isValid()) { terminateAction(); MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); @@ -227,9 +218,6 @@ MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); return false; } -// if (debuggingTp.getStatement() instanceof BlockEnter) { -// debuggingTp.stepFull(); -// } refresh(previousTp, debuggingTp, isReturned, true); return true; } @@ -285,9 +273,6 @@ MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); return false; } -// if (debuggingTp.getStatement() instanceof BlockEnter) { -// debuggingTp.stepFull(); -// } refresh(previousTp, debuggingTp, isReturned, true); return true; } @@ -414,8 +399,8 @@ } else { variableView.updateVariablesByTracePoint(from, to, isReturned); } - if ((TraceDebuggerPlugin.getAnalyzer() instanceof DeltaExtractionAnalyzer)) { - refreshRelatedDelta(to); + if (TraceDebuggerPlugin.getActiveView(DeltaMarkerView.ID) != null) { + refreshRelatedDelta(to); } } @@ -431,7 +416,7 @@ callStackView.highlight(coordinatorME); CallTreeView callTreeView = (CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID); callTreeView.highlight(tp.getMethodExecution()); - VariableView variableView = (VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID); + VariableViewRelatedDelta variableView = (VariableViewRelatedDelta)TraceDebuggerPlugin.getActiveView(VariableViewRelatedDelta.ID); variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); } @@ -470,11 +455,5 @@ return callStackModel.getTracePoint(); } return null; -// if (!(callStackView.isSelectionOnTop())) { -// CallStackModel selectionCallStackModel = callStackView.getSelectionCallStackModel(); -// if (selectionCallStackModel != null) { -// debuggingTp = selectionCallStackModel.getTracePoint(); -// } -// } } } diff --git a/src/org/ntlab/traceDebugger/DeltaMarkerView.java b/src/org/ntlab/traceDebugger/DeltaMarkerView.java index 497f3f8..5468018 100644 --- a/src/org/ntlab/traceDebugger/DeltaMarkerView.java +++ b/src/org/ntlab/traceDebugger/DeltaMarkerView.java @@ -166,7 +166,7 @@ // callTreeView.highlight(selectionME); CallStackView callStackView = (CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID); callStackView.highlight(coordinatorPoint.getMethodExecution()); - VariableView variableView = (VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID); + VariableViewRelatedDelta variableView = (VariableViewRelatedDelta)TraceDebuggerPlugin.getActiveView(VariableViewRelatedDelta.ID); variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); } catch (CoreException e) { e.printStackTrace(); @@ -192,7 +192,7 @@ MethodExecution bottomME = creationPoint.getMethodExecution(); DebuggingController controller = DebuggingController.getInstance(); controller.jumpToTheTracePoint(creationPoint, false); - VariableView variableView = (VariableView)(TraceDebuggerPlugin.getActiveView(VariableView.ID)); + VariableViewRelatedDelta variableView = (VariableViewRelatedDelta)(TraceDebuggerPlugin.getActiveView(VariableViewRelatedDelta.ID)); variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); CallStackView callStackView = (CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID); callStackView.highlight(coordinatorME); diff --git a/src/org/ntlab/traceDebugger/TraceDebuggerPerspective.java b/src/org/ntlab/traceDebugger/TraceDebuggerPerspective.java index a7309c2..23f2605 100644 --- a/src/org/ntlab/traceDebugger/TraceDebuggerPerspective.java +++ b/src/org/ntlab/traceDebugger/TraceDebuggerPerspective.java @@ -15,20 +15,12 @@ IFolderLayout right = layout.createFolder("right", IPageLayout.RIGHT, 0.5f, editorArea); right.addView(BreakPointView.ID); - // �E���Ƀg���[�X�|�C���g�̃r���[��z�u - IFolderLayout rightBottom = layout.createFolder("rightBottom", IPageLayout.BOTTOM, 0.5f, "right"); - rightBottom.addView(TracePointsView.ID); + // ����ɃR�[���X�^�b�N�̃r���[��z�u + IFolderLayout topLeft = layout.createFolder("topLeft", IPageLayout.TOP, 0.25f, editorArea); + topLeft.addView(CallStackView.ID); // �E��ɕϐ��̃r���[��z�u - IFolderLayout topRight = layout.createFolder("topRight", IPageLayout.TOP, 0.25f, editorArea); + IFolderLayout topRight = layout.createFolder("topRight", IPageLayout.TOP, 0.25f, "right"); topRight.addView(VariableView.ID); - - // ����ɃR�[���c���[�̃r���[��z�u - IFolderLayout topLeft = layout.createFolder("topLeft", IPageLayout.LEFT, 0.25f, "topRight"); - topLeft.addView(CallTreeView.ID); - - // ����ɃR�[���X�^�b�N�̃r���[��z�u - IFolderLayout topLeft2 = layout.createFolder("topLeft2", IPageLayout.TOP, 0.25f, "topLeft"); - topLeft2.addView(CallStackView.ID); } } diff --git a/src/org/ntlab/traceDebugger/TraceDebuggerPerspectiveRelatedDelta.java b/src/org/ntlab/traceDebugger/TraceDebuggerPerspectiveRelatedDelta.java new file mode 100644 index 0000000..6f4679b --- /dev/null +++ b/src/org/ntlab/traceDebugger/TraceDebuggerPerspectiveRelatedDelta.java @@ -0,0 +1,34 @@ +package org.ntlab.traceDebugger; + +import org.eclipse.ui.IFolderLayout; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IPerspectiveFactory; + +public class TraceDebuggerPerspectiveRelatedDelta implements IPerspectiveFactory { + + @Override + public void createInitialLayout(IPageLayout layout) { + // �G�f�B�^�̏ꏊ���擾 + String editorArea = layout.getEditorArea(); + + // �E�Ƀu���[�N�|�C���g�̃r���[��z�u + IFolderLayout right = layout.createFolder("right", IPageLayout.RIGHT, 0.5f, editorArea); + right.addView(BreakPointViewRelatedReverse.ID); + + // �E���Ƀg���[�X�|�C���g�̃r���[��z�u + IFolderLayout rightBottom = layout.createFolder("rightBottom", IPageLayout.BOTTOM, 0.5f, "right"); + rightBottom.addView(TracePointsView.ID); + + // �E��ɕϐ��̃r���[��z�u + IFolderLayout topRight = layout.createFolder("topRight", IPageLayout.TOP, 0.25f, editorArea); + topRight.addView(VariableViewRelatedDelta.ID); + + // ����ɃR�[���c���[�̃r���[��z�u + IFolderLayout topLeft = layout.createFolder("topLeft", IPageLayout.LEFT, 0.25f, "topRight"); + topLeft.addView(CallTreeView.ID); + + // ����ɃR�[���X�^�b�N�̃r���[��z�u + IFolderLayout topLeft2 = layout.createFolder("topLeft2", IPageLayout.TOP, 0.25f, "topLeft"); + topLeft2.addView(CallStackViewRelatedDelta.ID); + } +} diff --git a/src/org/ntlab/traceDebugger/TraceDebuggerPerspectiveRelatedReverse.java b/src/org/ntlab/traceDebugger/TraceDebuggerPerspectiveRelatedReverse.java new file mode 100644 index 0000000..85662e9 --- /dev/null +++ b/src/org/ntlab/traceDebugger/TraceDebuggerPerspectiveRelatedReverse.java @@ -0,0 +1,30 @@ +package org.ntlab.traceDebugger; + +import org.eclipse.ui.IFolderLayout; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IPerspectiveFactory; + +public class TraceDebuggerPerspectiveRelatedReverse implements IPerspectiveFactory { + + @Override + public void createInitialLayout(IPageLayout layout) { + // �G�f�B�^�̏ꏊ���擾 + String editorArea = layout.getEditorArea(); + + // �E�Ƀu���[�N�|�C���g�̃r���[��z�u + IFolderLayout right = layout.createFolder("right", IPageLayout.RIGHT, 0.5f, editorArea); + right.addView(BreakPointViewRelatedReverse.ID); + + // �E���Ƀg���[�X�|�C���g�̃r���[��z�u + IFolderLayout rightBottom = layout.createFolder("rightBottom", IPageLayout.BOTTOM, 0.5f, "right"); + rightBottom.addView(TracePointsView.ID); + + // ����ɃR�[���X�^�b�N�̃r���[��z�u + IFolderLayout topLeft = layout.createFolder("topLeft", IPageLayout.TOP, 0.25f, editorArea); + topLeft.addView(CallStackView.ID); + + // �E��ɕϐ��̃r���[��z�u + IFolderLayout topRight = layout.createFolder("topRight", IPageLayout.RIGHT, 0.25f, "topLeft"); + topRight.addView(VariableViewRelatedReverse.ID); + } +} diff --git a/src/org/ntlab/traceDebugger/TracePointsView.java b/src/org/ntlab/traceDebugger/TracePointsView.java index 2db9839..0bb3b5c 100644 --- a/src/org/ntlab/traceDebugger/TracePointsView.java +++ b/src/org/ntlab/traceDebugger/TracePointsView.java @@ -188,34 +188,12 @@ viewer.refresh(); } - private void jumpToTheTracePoint(TracePoint tp) { + 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); - - CallStackView callStackView = ((CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID)); - VariableView variableView = ((VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID)); - - AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); - if (analyzer instanceof DeltaExtractionAnalyzer) { - DeltaMarkerView deltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.getActiveView(DeltaMarkerView.ID); - if (deltaMarkerView != null) { - DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager(); - Map> deltaMarkers = deltaMarkerManager.getMarkers(); - if (deltaMarkers != null) { - variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkers); - } - IMarker coordinatorMarker = deltaMarkerManager.getCoordinatorDeltaMarker(); - if (coordinatorMarker != null) { - MethodExecution coordinatorME = DeltaMarkerManager.getMethodExecution(coordinatorMarker); - callStackView.highlight(coordinatorME); - } - CallTreeView callTreeView = ((CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID)); - callTreeView.highlight(currentME); - } - } } } \ No newline at end of file diff --git a/src/org/ntlab/traceDebugger/VariableView.java b/src/org/ntlab/traceDebugger/VariableView.java index 6f296c7..946d429 100644 --- a/src/org/ntlab/traceDebugger/VariableView.java +++ b/src/org/ntlab/traceDebugger/VariableView.java @@ -1,21 +1,9 @@ package org.ntlab.traceDebugger; import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.CoreException; -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.action.Separator; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeViewerListener; @@ -25,28 +13,15 @@ import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; -import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.part.ViewPart; -import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution; -import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodInvocation; import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint; -import org.ntlab.traceDebugger.Variable.VariableType; -import org.ntlab.traceDebugger.analyzerProvider.Alias; -import org.ntlab.traceDebugger.analyzerProvider.DeltaMarkerManager; -import org.ntlab.traceDebugger.analyzerProvider.VariableUpdatePointFinder; public class VariableView extends ViewPart { - private TreeViewer viewer; - private IAction jumpAction; - private IAction deltaActionForContainerToComponent; - private IAction deltaActionForThisToAnother; - private Variable selectedVariable; - private Variables variables = Variables.getInstance(); + protected TreeViewer viewer; + protected Variable selectedVariable; + protected Variables variables = Variables.getInstance(); public static final String ID = "org.ntlab.traceDebugger.variableView"; public VariableView() { @@ -130,154 +105,27 @@ viewer.getControl().setFocus(); } - private void createActions() { - jumpAction = new Action() { - public void run() { - TracePoint tp = null; - TracePoint before = DebuggingController.getInstance().getCurrentTp(); - VariableType variableType = selectedVariable.getVariableType(); - if (variableType.equals(VariableType.USE_VALUE)) { - String containerId = selectedVariable.getContainerId(); - String fieldName = selectedVariable.getFullyQualifiedVariableName(); - tp = VariableUpdatePointFinder.getInstance().getPoint(containerId, fieldName, before); - } else if (variableType.equals(VariableType.USE_RETURN)) { - String receiverId = selectedVariable.getContainerId(); - String valueId = selectedVariable.getValueId(); - String receiverClassName = selectedVariable.getContainerClassName(); - VariableUpdatePointFinder finder = VariableUpdatePointFinder.getInstance(); - if (receiverClassName.contains("Iterator") || receiverClassName.contains("Itr") - || receiverClassName.contains("Collections$UnmodifiableCollection$1")) { - tp = finder.getIteratorPoint(receiverId); - if (tp == null) return; - MethodInvocation mi = ((MethodInvocation)tp.getStatement()); - receiverId = mi.getCalledMethodExecution().getThisObjId(); - } - tp = finder.getDefinitionInvocationPoint(receiverId, valueId, before); - } - if (tp == null) return; - DebuggingController controller = DebuggingController.getInstance(); - controller.jumpToTheTracePoint(tp, false); - } - }; - jumpAction.setText("Jump to Definition"); - jumpAction.setToolTipText("Jump to Definition"); - - deltaActionForContainerToComponent = new Action() { - @Override - public void run() { - DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.createNewView(DeltaMarkerView.ID, IWorkbenchPage.VIEW_ACTIVATE); - newDeltaMarkerView.extractDelta(selectedVariable, true); - } - }; - deltaActionForContainerToComponent.setText("Extract Delta"); - deltaActionForContainerToComponent.setToolTipText("Extract Delta"); + protected void createActions() { - deltaActionForThisToAnother = new Action() { - @Override - public void run() { - DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.createNewView(DeltaMarkerView.ID, IWorkbenchPage.VIEW_ACTIVATE); - newDeltaMarkerView.extractDelta(selectedVariable, false); - } - }; - deltaActionForThisToAnother.setText("Extract Delta"); - deltaActionForThisToAnother.setToolTipText("Extract Delta"); } - private void createToolBar() { + protected void createToolBar() { IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); } - private void createMenuBar() { + protected void createMenuBar() { IMenuManager mgr = getViewSite().getActionBars().getMenuManager(); } - private void createPopupMenu() { - MenuManager menuMgr = new MenuManager("#PopupMenu"); - menuMgr.setRemoveAllWhenShown(true); - menuMgr.addMenuListener(new IMenuListener() { - @Override - public void menuAboutToShow(IMenuManager manager) { - // �E�N���b�N����x�ɌĂяo����� - VariableType variableType = selectedVariable.getVariableType(); - if (variableType.equals(VariableType.USE_VALUE)) { - manager.add(jumpAction); - jumpAction.setText("Jump to Definition"); - jumpAction.setToolTipText("Jump to Definition"); - } else if (variableType.equals(VariableType.USE_RETURN)) { - manager.add(jumpAction); - if (updateDeltaActionForThisToAnotherTexts(selectedVariable)) { - manager.add(deltaActionForThisToAnother); - } - jumpAction.setText("Jump to Addition"); - jumpAction.setToolTipText("Jump to Addition"); - } else if (variableType.isDef()) { - if (updateDeltaActionForContainerToComponentTexts(selectedVariable)) { - manager.add(deltaActionForContainerToComponent); - } - if (updateDeltaActionForThisToAnotherTexts(selectedVariable)) { - String text1 = deltaActionForThisToAnother.getText(); - String text2 = deltaActionForContainerToComponent.getText(); - if (!(text1.equals(text2))) { - manager.add(deltaActionForThisToAnother); - } - } - } else if (variableType.equals(VariableType.PARAMETER)) { - if (updateDeltaActionForThisToAnotherTexts(selectedVariable)) { - manager.add(deltaActionForThisToAnother); - } - } - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - } - }); - Menu menu = menuMgr.createContextMenu(viewer.getControl()); - viewer.getControl().setMenu(menu); - getSite().registerContextMenu(menuMgr, viewer); + protected void createPopupMenu() { + } public void reset() { variables.resetData(); viewer.setInput(variables.getVariablesTreeNodesList()); viewer.refresh(); - } - - private boolean updateDeltaActionForContainerToComponentTexts(Variable variable) { - String valueId = selectedVariable.getValueId(); - String valueClassName = selectedVariable.getValueClassName(); - valueClassName = valueClassName.substring(valueClassName.lastIndexOf(".") + 1); - String containerId = selectedVariable.getContainerId(); - String containerClassName = selectedVariable.getContainerClassName(); - 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); - return true; - } else { - deltaActionForContainerToComponent.setText(""); - deltaActionForContainerToComponent.setToolTipText(""); - return false; - } - } - - private boolean updateDeltaActionForThisToAnotherTexts(Variable variable) { - String valueId = selectedVariable.getValueId(); - String valueClassName = selectedVariable.getValueClassName(); - valueClassName = valueClassName.substring(valueClassName.lastIndexOf(".") + 1); - TracePoint before = selectedVariable.getBeforeTracePoint(); - String thisId = before.getMethodExecution().getThisObjId(); - String thisClassName = before.getMethodExecution().getThisClassName(); - 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); - return true; - } else { - deltaActionForThisToAnother.setText(""); - deltaActionForThisToAnother.setToolTipText(""); - return false; - } - } + } public void updateVariablesByTracePoint(TracePoint tp, boolean isReturned) { updateVariablesByTracePoint(tp, isReturned, null); @@ -300,68 +148,5 @@ variables.updateForDifferential(from, to, isReturned); // viewer.setInput(variables.getVariablesTreeNodes()); viewer.refresh(); - } - - public void markAndExpandVariablesByDeltaMarkers(Map> markers) { - List srcSideDeltaMarkers = markers.get(DeltaMarkerManager.SRC_SIDE_DELTA_MARKER); - List dstSideDeltaMarkers = markers.get(DeltaMarkerManager.DST_SIDE_DELTA_MARKER); - List coordinatorMarker = markers.get(DeltaMarkerManager.COORDINATOR_DELTA_MARKER); - if (srcSideDeltaMarkers != null) { - markVariables(DeltaMarkerManager.SRC_SIDE_DELTA_MARKER, srcSideDeltaMarkers); - } - if (dstSideDeltaMarkers != null) { - markVariables(DeltaMarkerManager.DST_SIDE_DELTA_MARKER, dstSideDeltaMarkers); - } - if (coordinatorMarker != null) { - markVariables(DeltaMarkerManager.COORDINATOR_DELTA_MARKER, coordinatorMarker); - } - viewer.refresh(); - expandAllMarkedNodes(); - } - - private void markVariables(String markerId, List markerList) { - Set idSet = new HashSet<>(); - Map additionalAttributesForVariables = new HashMap<>(); - additionalAttributesForVariables.put("markerId", markerId); - for (IMarker marker : markerList) { - try { - Object data = marker.getAttribute(DeltaMarkerManager.DELTA_MARKER_ATR_DATA); - if (data instanceof Alias) { - idSet.add(((Alias)data).getObjectId()); - } else if (data instanceof MethodExecution) { - idSet.add(((MethodExecution)data).getThisObjId()); - } - } catch (CoreException e) { - e.printStackTrace(); - } - } - variables.addAdditionalAttributes(idSet, additionalAttributesForVariables); - } - - private void expandAllMarkedNodes() { - Set expandedNodes = new HashSet<>(); - for (TreeItem item : viewer.getTree().getItems()) { - Object obj = item.getData(); - if (!(obj instanceof TreeNode)) continue; - collectNodes((TreeNode)obj, expandedNodes); - } - viewer.setExpandedElements(expandedNodes.toArray(new Object[expandedNodes.size()])); - } - - private void collectNodes(TreeNode node, final Set expandedNodes) { - Object value = node.getValue(); - if (!(value instanceof Variable)) return; - Variable variable = (Variable)value; - if (variable.getAdditionalAttribute("markerId") != null) { - TreeNode parent = node.getParent(); - if (parent != null) { - expandedNodes.add(parent); - } - } - TreeNode[] children = node.getChildren(); - if (children == null) return; - for (TreeNode child : children) { - collectNodes(child, expandedNodes); - } } } diff --git a/src/org/ntlab/traceDebugger/VariableViewRelatedDelta.java b/src/org/ntlab/traceDebugger/VariableViewRelatedDelta.java new file mode 100644 index 0000000..a36eba1 --- /dev/null +++ b/src/org/ntlab/traceDebugger/VariableViewRelatedDelta.java @@ -0,0 +1,223 @@ +package org.ntlab.traceDebugger; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.runtime.CoreException; +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.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.viewers.TreeNode; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.TreeItem; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.IWorkbenchPage; +import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution; +import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint; +import org.ntlab.traceDebugger.Variable.VariableType; +import org.ntlab.traceDebugger.analyzerProvider.Alias; +import org.ntlab.traceDebugger.analyzerProvider.DeltaMarkerManager; + +public class VariableViewRelatedDelta extends VariableViewRelatedReverse { + private IAction deltaActionForContainerToComponent; + private IAction deltaActionForThisToAnother; + public static final String ID = "org.ntlab.traceDebugger.variableViewRelatedDelta"; + + public VariableViewRelatedDelta() { + // TODO Auto-generated constructor stub + System.out.println("VariableViewRelatedDelta�N���X���������ꂽ��!"); + } + + @Override + public void createPartControl(Composite parent) { + // TODO Auto-generated method stub + System.out.println("VariableViewRelatedDelta#createPartControl(Composite)���Ă΂ꂽ��!"); + super.createPartControl(parent); + TraceDebuggerPlugin.setActiveView(ID, this); + } + + @Override + public void setFocus() { + // TODO Auto-generated method stub + TraceDebuggerPlugin.setActiveView(ID, this); + viewer.getControl().setFocus(); + } + + @Override + protected void createActions() { + super.createActions(); + deltaActionForContainerToComponent = new Action() { + @Override + public void run() { + DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.createNewView(DeltaMarkerView.ID, IWorkbenchPage.VIEW_ACTIVATE); + newDeltaMarkerView.extractDelta(selectedVariable, true); + } + }; + deltaActionForContainerToComponent.setText("Extract Delta"); + deltaActionForContainerToComponent.setToolTipText("Extract Delta"); + + deltaActionForThisToAnother = new Action() { + @Override + public void run() { + DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.createNewView(DeltaMarkerView.ID, IWorkbenchPage.VIEW_ACTIVATE); + newDeltaMarkerView.extractDelta(selectedVariable, false); + } + }; + deltaActionForThisToAnother.setText("Extract Delta"); + deltaActionForThisToAnother.setToolTipText("Extract Delta"); + } + + @Override + protected void createPopupMenu() { + MenuManager menuMgr = new MenuManager("#PopupMenu"); + menuMgr.setRemoveAllWhenShown(true); + menuMgr.addMenuListener(new IMenuListener() { + @Override + public void menuAboutToShow(IMenuManager manager) { + // �E�N���b�N����x�ɌĂяo����� + VariableType variableType = selectedVariable.getVariableType(); + if (variableType.equals(VariableType.USE_VALUE)) { + manager.add(jumpAction); + jumpAction.setText("Jump to Definition"); + jumpAction.setToolTipText("Jump to Definition"); + } else if (variableType.equals(VariableType.USE_RETURN)) { + manager.add(jumpAction); + if (updateDeltaActionForThisToAnotherTexts(selectedVariable)) { + manager.add(deltaActionForThisToAnother); + } + jumpAction.setText("Jump to Addition"); + jumpAction.setToolTipText("Jump to Addition"); + } else if (variableType.isDef()) { + if (updateDeltaActionForContainerToComponentTexts(selectedVariable)) { + manager.add(deltaActionForContainerToComponent); + } + if (updateDeltaActionForThisToAnotherTexts(selectedVariable)) { + String text1 = deltaActionForThisToAnother.getText(); + String text2 = deltaActionForContainerToComponent.getText(); + if (!(text1.equals(text2))) { + manager.add(deltaActionForThisToAnother); + } + } + } else if (variableType.equals(VariableType.PARAMETER)) { + if (updateDeltaActionForThisToAnotherTexts(selectedVariable)) { + manager.add(deltaActionForThisToAnother); + } + } + manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + } + }); + Menu menu = menuMgr.createContextMenu(viewer.getControl()); + viewer.getControl().setMenu(menu); + getSite().registerContextMenu(menuMgr, viewer); + } + + private boolean updateDeltaActionForContainerToComponentTexts(Variable variable) { + String valueId = selectedVariable.getValueId(); + String valueClassName = selectedVariable.getValueClassName(); + valueClassName = valueClassName.substring(valueClassName.lastIndexOf(".") + 1); + String containerId = selectedVariable.getContainerId(); + String containerClassName = selectedVariable.getContainerClassName(); + 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); + return true; + } else { + deltaActionForContainerToComponent.setText(""); + deltaActionForContainerToComponent.setToolTipText(""); + return false; + } + } + + private boolean updateDeltaActionForThisToAnotherTexts(Variable variable) { + String valueId = selectedVariable.getValueId(); + String valueClassName = selectedVariable.getValueClassName(); + valueClassName = valueClassName.substring(valueClassName.lastIndexOf(".") + 1); + TracePoint before = selectedVariable.getBeforeTracePoint(); + String thisId = before.getMethodExecution().getThisObjId(); + String thisClassName = before.getMethodExecution().getThisClassName(); + 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); + return true; + } else { + deltaActionForThisToAnother.setText(""); + deltaActionForThisToAnother.setToolTipText(""); + return false; + } + } + + public void markAndExpandVariablesByDeltaMarkers(Map> markers) { + List srcSideDeltaMarkers = markers.get(DeltaMarkerManager.SRC_SIDE_DELTA_MARKER); + List dstSideDeltaMarkers = markers.get(DeltaMarkerManager.DST_SIDE_DELTA_MARKER); + List coordinatorMarker = markers.get(DeltaMarkerManager.COORDINATOR_DELTA_MARKER); + if (srcSideDeltaMarkers != null) { + markVariables(DeltaMarkerManager.SRC_SIDE_DELTA_MARKER, srcSideDeltaMarkers); + } + if (dstSideDeltaMarkers != null) { + markVariables(DeltaMarkerManager.DST_SIDE_DELTA_MARKER, dstSideDeltaMarkers); + } + if (coordinatorMarker != null) { + markVariables(DeltaMarkerManager.COORDINATOR_DELTA_MARKER, coordinatorMarker); + } + viewer.refresh(); + expandAllMarkedNodes(); + } + + private void markVariables(String markerId, List markerList) { + Set idSet = new HashSet<>(); + Map additionalAttributesForVariables = new HashMap<>(); + additionalAttributesForVariables.put("markerId", markerId); + for (IMarker marker : markerList) { + try { + Object data = marker.getAttribute(DeltaMarkerManager.DELTA_MARKER_ATR_DATA); + if (data instanceof Alias) { + idSet.add(((Alias)data).getObjectId()); + } else if (data instanceof MethodExecution) { + idSet.add(((MethodExecution)data).getThisObjId()); + } + } catch (CoreException e) { + e.printStackTrace(); + } + } + variables.addAdditionalAttributes(idSet, additionalAttributesForVariables); + } + + private void expandAllMarkedNodes() { + Set expandedNodes = new HashSet<>(); + for (TreeItem item : viewer.getTree().getItems()) { + Object obj = item.getData(); + if (!(obj instanceof TreeNode)) continue; + collectNodes((TreeNode)obj, expandedNodes); + } + viewer.setExpandedElements(expandedNodes.toArray(new Object[expandedNodes.size()])); + } + + private void collectNodes(TreeNode node, final Set expandedNodes) { + Object value = node.getValue(); + if (!(value instanceof Variable)) return; + Variable variable = (Variable)value; + if (variable.getAdditionalAttribute("markerId") != null) { + TreeNode parent = node.getParent(); + if (parent != null) { + expandedNodes.add(parent); + } + } + TreeNode[] children = node.getChildren(); + if (children == null) return; + for (TreeNode child : children) { + collectNodes(child, expandedNodes); + } + } +} diff --git a/src/org/ntlab/traceDebugger/VariableViewRelatedReverse.java b/src/org/ntlab/traceDebugger/VariableViewRelatedReverse.java new file mode 100644 index 0000000..93653f8 --- /dev/null +++ b/src/org/ntlab/traceDebugger/VariableViewRelatedReverse.java @@ -0,0 +1,100 @@ +package org.ntlab.traceDebugger; + +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.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodInvocation; +import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint; +import org.ntlab.traceDebugger.Variable.VariableType; +import org.ntlab.traceDebugger.analyzerProvider.VariableUpdatePointFinder; + +public class VariableViewRelatedReverse extends VariableView { + protected IAction jumpAction; + public static final String ID = "org.ntlab.traceDebugger.variableViewRelatedReverse"; + + public VariableViewRelatedReverse() { + // TODO Auto-generated constructor stub + System.out.println("VariableViewRelatedReverse�N���X���������ꂽ��!"); + } + + @Override + public void createPartControl(Composite parent) { + // TODO Auto-generated method stub + System.out.println("VariableViewRelatedReverse#createPartControl(Composite)���Ă΂ꂽ��!"); + super.createPartControl(parent); + TraceDebuggerPlugin.setActiveView(ID, this); + } + + @Override + public void setFocus() { + // TODO Auto-generated method stub + TraceDebuggerPlugin.setActiveView(ID, this); + viewer.getControl().setFocus(); + } + + @Override + protected void createActions() { + jumpAction = new Action() { + public void run() { + TracePoint tp = null; + TracePoint before = DebuggingController.getInstance().getCurrentTp(); + VariableType variableType = selectedVariable.getVariableType(); + if (variableType.equals(VariableType.USE_VALUE)) { + String containerId = selectedVariable.getContainerId(); + String fieldName = selectedVariable.getFullyQualifiedVariableName(); + tp = VariableUpdatePointFinder.getInstance().getPoint(containerId, fieldName, before); + } else if (variableType.equals(VariableType.USE_RETURN)) { + String receiverId = selectedVariable.getContainerId(); + String valueId = selectedVariable.getValueId(); + String receiverClassName = selectedVariable.getContainerClassName(); + VariableUpdatePointFinder finder = VariableUpdatePointFinder.getInstance(); + if (receiverClassName.contains("Iterator") || receiverClassName.contains("Itr") + || receiverClassName.contains("Collections$UnmodifiableCollection$1")) { + tp = finder.getIteratorPoint(receiverId); + if (tp == null) return; + MethodInvocation mi = ((MethodInvocation)tp.getStatement()); + receiverId = mi.getCalledMethodExecution().getThisObjId(); + } + tp = finder.getDefinitionInvocationPoint(receiverId, valueId, before); + } + if (tp == null) return; + DebuggingController controller = DebuggingController.getInstance(); + controller.jumpToTheTracePoint(tp, false); + } + }; + jumpAction.setText("Jump to Definition"); + jumpAction.setToolTipText("Jump to Definition"); + } + + @Override + protected void createPopupMenu() { + MenuManager menuMgr = new MenuManager("#PopupMenu"); + menuMgr.setRemoveAllWhenShown(true); + menuMgr.addMenuListener(new IMenuListener() { + @Override + public void menuAboutToShow(IMenuManager manager) { + // �E�N���b�N����x�ɌĂяo����� + VariableType variableType = selectedVariable.getVariableType(); + if (variableType.equals(VariableType.USE_VALUE)) { + manager.add(jumpAction); + jumpAction.setText("Jump to Definition"); + jumpAction.setToolTipText("Jump to Definition"); + } else if (variableType.equals(VariableType.USE_RETURN)) { + manager.add(jumpAction); + jumpAction.setText("Jump to Addition"); + jumpAction.setToolTipText("Jump to Addition"); + } + manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + } + }); + Menu menu = menuMgr.createContextMenu(viewer.getControl()); + viewer.getControl().setMenu(menu); + getSite().registerContextMenu(menuMgr, viewer); + } +}