diff --git a/src/org/ntlab/traceDebugger/CallTreeView.java b/src/org/ntlab/traceDebugger/CallTreeView.java index b0381f2..90c2c7f 100644 --- a/src/org/ntlab/traceDebugger/CallTreeView.java +++ b/src/org/ntlab/traceDebugger/CallTreeView.java @@ -2,7 +2,7 @@ import java.util.List; -import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.resources.IMarker; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.viewers.ISelectionChangedListener; @@ -19,12 +19,13 @@ 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 CallTreeView extends ViewPart { private TreeViewer viewer; private CallTreeModels callTreeModels = new CallTreeModels(); - private String subId; public static final String ID = "org.ntlab.traceDebugger.callTreeView"; public CallTreeView() { @@ -46,30 +47,27 @@ public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection sel = (IStructuredSelection)event.getSelection(); Object element = sel.getFirstElement(); - if (element instanceof TreeNode) { - Object value = ((TreeNode)element).getValue(); - if (value instanceof CallTreeModel) { - CallTreeModel callTreeModel = (CallTreeModel)value; - MethodExecution methodExecution = callTreeModel.getMethodExecution(); - highlight(methodExecution); - TracePoint tp = methodExecution.getEntryPoint(); - JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, -1); - DeltaMarkerView deltaMarkerView = ((DeltaMarkerView)getOtherView(DeltaMarkerView.ID, subId)); - DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager(); - CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID, null); - callStackView.updateByTracePoint(tp); - try { - Object coordinatorME = deltaMarkerManager.getCoordinatorDeltaMarker().getAttribute("data"); - if (coordinatorME instanceof MethodExecution) { - callStackView.highlight((MethodExecution)coordinatorME); - } - } catch (CoreException e) { - e.printStackTrace(); - } - VariableView variableView = ((VariableView)getOtherView(VariableView.ID, null)); - variableView.updateVariablesByTracePoint(tp, false); - variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); - } + if (!(element instanceof TreeNode)) return; + Object value = ((TreeNode)element).getValue(); + if (!(value instanceof CallTreeModel)) return; + + CallTreeModel callTreeModel = (CallTreeModel)value; + MethodExecution methodExecution = callTreeModel.getMethodExecution(); + highlight(methodExecution); + TracePoint tp = methodExecution.getEntryPoint(); + JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, -1); + CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID); + callStackView.updateByTracePoint(tp); + VariableView variableView = ((VariableView)getOtherView(VariableView.ID)); + variableView.updateVariablesByTracePoint(tp, false); + AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); + if (analyzer instanceof DeltaExtractionAnalyzer) { + DeltaMarkerView deltaMarkerView = ((DeltaExtractionAnalyzer)analyzer).getActiveDeltaMarkerView(); + DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager(); + IMarker coodinatorMarker = deltaMarkerManager.getCoordinatorDeltaMarker(); + MethodExecution coordinatorME = DeltaMarkerManager.getMethodExecution(coodinatorMarker); + if (coordinatorME != null) callStackView.highlight((MethodExecution)coordinatorME); + variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); } } }); @@ -96,14 +94,6 @@ IMenuManager mgr = getViewSite().getActionBars().getMenuManager(); } - public String getSubId() { - return subId; - } - - public void setSubId(String subId) { - this.subId = subId; - } - public void update(DeltaMarkerManager deltaMarkerManager) { callTreeModels.update(deltaMarkerManager); viewer.setInput(callTreeModels.getCallTreeModels()); @@ -128,14 +118,13 @@ viewer.setInput(callTreeModels.getCallTreeModelList()); viewer.refresh(); } - - private IViewPart getOtherView(String viewId, String subId) { + + private IViewPart getOtherView(String viewId) { IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); try { - if (subId == null) return workbenchPage.showView(viewId); - return workbenchPage.showView(viewId, subId, IWorkbenchPage.VIEW_ACTIVATE); + return workbenchPage.showView(viewId); } catch (PartInitException e) { throw new RuntimeException(e); } - } + } } diff --git a/src/org/ntlab/traceDebugger/DeltaMarkerView.java b/src/org/ntlab/traceDebugger/DeltaMarkerView.java index e1e35d4..d7dab09 100644 --- a/src/org/ntlab/traceDebugger/DeltaMarkerView.java +++ b/src/org/ntlab/traceDebugger/DeltaMarkerView.java @@ -32,8 +32,7 @@ public class DeltaMarkerView extends ViewPart { private TreeViewer viewer; private Shell shell; - private TracePoint bottomPoint; - private TracePoint coordinatorPoint; + private IMarker selectionMarker; private DeltaMarkerManager deltaMarkerManager = new DeltaMarkerManager(); private String subId; public static String ID = "org.ntlab.traceDebugger.deltaMarkerView"; @@ -67,42 +66,9 @@ if (!(element instanceof TreeNode)) return; Object value = ((TreeNode)element).getValue(); if (!(value instanceof IMarker)) return; - IMarker selectionMarker = (IMarker)value; - try { - DebuggingController controller = DebuggingController.getInstance(); - Object obj = selectionMarker.getAttribute(DeltaMarkerManager.DELTA_MARKER_ATR_DATA); - TracePoint jumpPoint; - MethodExecution selectionME; - boolean isReturned = false; - if (obj instanceof Alias) { - Alias alias = (Alias)obj; - jumpPoint = alias.getOccurrencePoint(); - selectionME = jumpPoint.getMethodExecution(); - Alias.AliasType type = alias.getAliasType(); - isReturned = type.equals(AliasType.METHOD_INVOCATION) - || type.equals(AliasType.CONSTRACTOR_INVOCATION); - } else if (obj instanceof TracePoint) { - jumpPoint = (TracePoint)obj; - selectionME = jumpPoint.getMethodExecution(); - } else { - jumpPoint = coordinatorPoint; - selectionME = coordinatorPoint.getMethodExecution(); - } - controller.jumpToTheTracePoint(jumpPoint, isReturned); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IDE.openEditor(page, selectionMarker); - - CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID, null); - callStackView.highlight(coordinatorPoint.getMethodExecution()); - VariableView variableView = (VariableView)getOtherView(VariableView.ID, null); - variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); - CallTreeView callTreeView = ((CallTreeView)getOtherView(CallTreeView.ID, null)); -// CallTreeView callTreeView = ((CallTreeView)getOtherView(CallTreeView.ID, subId)); - callTreeView.highlight(selectionME); - setFocus(); - } catch (CoreException e) { - e.printStackTrace(); - } + selectionMarker = (IMarker)value; + updateOtherViewsByMarker(selectionMarker); + setFocus(); } }); viewer.refresh(); @@ -136,6 +102,9 @@ if (analyzer instanceof DeltaExtractionAnalyzer) { ((DeltaExtractionAnalyzer)analyzer).setActiveDeltaMarkerView(this); } + CallTreeView callTreeView = (CallTreeView)getOtherView(CallTreeView.ID); + callTreeView.update(deltaMarkerManager); + updateOtherViewsByMarker(selectionMarker); viewer.getControl().setFocus(); } @@ -153,40 +122,72 @@ return subId; } - public TracePoint getBottomPoint() { - return bottomPoint; + public TracePoint getCreationPoint() { + IMarker creationPointMarker = deltaMarkerManager.getBottomDeltaMarker(); + return DeltaMarkerManager.getTracePoint(creationPointMarker); } public TracePoint getCoordinatorPoint() { - return coordinatorPoint; + IMarker coordinatorMarker = deltaMarkerManager.getCoordinatorDeltaMarker(); + return DeltaMarkerManager.getTracePoint(coordinatorMarker); } public void setSubId(String subId) { this.subId = subId; } - public void setBottomPoint(TracePoint bottomPoint) { - this.bottomPoint = bottomPoint; - } - - public void setCoordinatorPoint(TracePoint coordinatorPoint) { - this.coordinatorPoint = coordinatorPoint; - } - + @Override public void dispose() { deltaMarkerManager.clearAllMarkers(); - CallTreeView callTreeView = ((CallTreeView)getOtherView(CallTreeView.ID, null)); + CallTreeView callTreeView = ((CallTreeView)getOtherView(CallTreeView.ID)); callTreeView.reset(); super.dispose(); } - - private IViewPart getOtherView(String viewId, String subId) { + + private void updateOtherViewsByMarker(IMarker marker) { + try { + DebuggingController controller = DebuggingController.getInstance(); + Object obj = marker.getAttribute(DeltaMarkerManager.DELTA_MARKER_ATR_DATA); + IMarker coordinator = deltaMarkerManager.getCoordinatorDeltaMarker(); + TracePoint coordinatorPoint = DeltaMarkerManager.getTracePoint(coordinator); + TracePoint jumpPoint; + MethodExecution selectionME; + boolean isReturned = false; + if (obj instanceof Alias) { + Alias alias = (Alias)obj; + jumpPoint = alias.getOccurrencePoint(); + selectionME = jumpPoint.getMethodExecution(); + Alias.AliasType type = alias.getAliasType(); + isReturned = type.equals(AliasType.METHOD_INVOCATION) + || type.equals(AliasType.CONSTRACTOR_INVOCATION); + } else if (obj instanceof TracePoint) { + jumpPoint = (TracePoint)obj; + selectionME = jumpPoint.getMethodExecution(); + } else { + jumpPoint = coordinatorPoint; + selectionME = coordinatorPoint.getMethodExecution(); + } + controller.jumpToTheTracePoint(jumpPoint, isReturned); + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IDE.openEditor(page, marker); + + CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID); + callStackView.highlight(coordinatorPoint.getMethodExecution()); + VariableView variableView = (VariableView)getOtherView(VariableView.ID); + variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); + CallTreeView callTreeView = ((CallTreeView)getOtherView(CallTreeView.ID)); + callTreeView.highlight(selectionME); + } catch (CoreException e) { + e.printStackTrace(); + } + } + + private IViewPart getOtherView(String viewId) { IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); try { - if (subId == null) return workbenchPage.showView(viewId); - return workbenchPage.showView(viewId, subId, IWorkbenchPage.VIEW_ACTIVATE); + return workbenchPage.showView(viewId); } catch (PartInitException e) { throw new RuntimeException(e); } - } + } } diff --git a/src/org/ntlab/traceDebugger/VariableView.java b/src/org/ntlab/traceDebugger/VariableView.java index 9dbcd18..51c297c 100644 --- a/src/org/ntlab/traceDebugger/VariableView.java +++ b/src/org/ntlab/traceDebugger/VariableView.java @@ -16,7 +16,6 @@ import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.InputDialog; -import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeViewerListener; @@ -150,7 +149,7 @@ deltaAction = new Action() { @Override public void run() { - delta(selectedVariable, false); + delta(selectedVariable, !false); } }; deltaAction.setText("Extract Delta"); @@ -219,26 +218,23 @@ // note: ����r���[�𕡐��J���e�X�g String subIdWithNewView = deltaAnalyzer.getNextDeltaMarkerSubId(); DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)workbenchPage.showView(DeltaMarkerView.ID, subIdWithNewView, IWorkbenchPage.VIEW_ACTIVATE); -// deltaAnalyzer.extractDelta(selectedVariable, newDeltaMarkerView, subIdWithNewView); deltaAnalyzer.extractDelta(variable, isCollection, newDeltaMarkerView, subIdWithNewView); TracePoint coordinatorPoint = newDeltaMarkerView.getCoordinatorPoint(); + TracePoint creationPoint = newDeltaMarkerView.getCreationPoint(); DebuggingController controller = DebuggingController.getInstance(); - controller.jumpToTheTracePoint(coordinatorPoint, false); + controller.jumpToTheTracePoint(creationPoint, false); DeltaMarkerManager deltaMarkerManager = newDeltaMarkerView.getDeltaMarkerManager(); markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); MethodExecution coordinatorME = coordinatorPoint.getMethodExecution(); - MethodExecution bottomME = newDeltaMarkerView.getBottomPoint().getMethodExecution(); + MethodExecution bottomME = newDeltaMarkerView.getCreationPoint().getMethodExecution(); CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID); callStackView.highlight(coordinatorME); CallTreeView callTreeView = (CallTreeView)getOtherView(CallTreeView.ID); - callTreeView.setSubId(subIdWithNewView); -// callTreeView.update(coordinatorME, bottomME); -// callTreeView.highlight(coordinatorME); callTreeView.update(deltaMarkerManager); - callTreeView.highlight(coordinatorME); + callTreeView.highlight(bottomME); TracePointsView tracePointsView = (TracePointsView)getOtherView(TracePointsView.ID); - tracePointsView.addTracePoint(coordinatorPoint); + tracePointsView.addTracePoint(creationPoint); } catch (PartInitException e) { e.printStackTrace(); } diff --git a/src/org/ntlab/traceDebugger/Variables.java b/src/org/ntlab/traceDebugger/Variables.java index 82f0dda..613dbcc 100644 --- a/src/org/ntlab/traceDebugger/Variables.java +++ b/src/org/ntlab/traceDebugger/Variables.java @@ -66,56 +66,31 @@ updateRootThisState(me, to, isReturned); updateArgsState(me, to, isReturned); } - + private void updateReturnValue(TracePoint from, TracePoint to, boolean isReturned) { Statement statement = from.getStatement(); ObjectReference ref = null; + MethodExecution me = null; if (statement instanceof MethodInvocation) { MethodInvocation mi = (MethodInvocation)statement; + me = mi.getCalledMethodExecution(); ref = mi.getCalledMethodExecution().getReturnValue(); } else if (isReturned) { - MethodExecution me = from.getMethodExecution(); + me = from.getMethodExecution(); ref = me.getReturnValue(); } if (ref != null) { String returnValueClassName = ref.getActualType(); if (returnValueClassName.equals("void")) return; String returnValueId = ref.getId(); - String thisObjId = to.getMethodExecution().getThisObjId(); - String thisClassName = to.getMethodExecution().getThisClassName(); - Variable variable = new Variable("Return", thisObjId, thisClassName, returnValueClassName, returnValueId, from, isReturned); + String thisObjId = me.getThisObjId(); + String thisClassName = me.getThisClassName(); + Variable variable = new Variable("Return", thisClassName, thisObjId, returnValueClassName, returnValueId, from, isReturned); roots.add(variable); variable.createNextHierarchyState(); } } -// private void updateReturnValue(TracePoint from, TracePoint to, boolean isReturned) { -// Statement statement = from.getStatement(); -// if (statement instanceof MethodInvocation) { -// MethodInvocation mi = (MethodInvocation)statement; -// ObjectReference ref = mi.getCalledMethodExecution().getReturnValue(); -// String returnValueClassName = ref.getActualType(); -// if (returnValueClassName.equals("void")) return; -// String returnValueId = ref.getId(); -// String thisObjId = to.getMethodExecution().getThisObjId(); -// String thisClassName = to.getMethodExecution().getThisClassName(); -// Variable variable = new Variable("Return", thisObjId, thisClassName, returnValueClassName, returnValueId, from, isReturned); -// roots.add(variable); -// variable.createNextHierarchyState(); -// } else if (isReturned) { -// MethodExecution me = from.getMethodExecution(); -// ObjectReference ref = me.getReturnValue(); -// String returnValueClassName = ref.getActualType(); -// if (returnValueClassName.equals("void")) return; -// String returnValueId = ref.getId(); -// String thisObjId = to.getMethodExecution().getThisObjId(); -// String thisClassName = to.getMethodExecution().getThisClassName(); -// Variable variable = new Variable("Return", thisObjId, thisClassName, returnValueClassName, returnValueId, from, isReturned); -// roots.add(variable); -// variable.createNextHierarchyState(); -// } -// } - private void updateRootThisState(MethodExecution methodExecution, TracePoint tp, boolean isReturned) { String thisObjId = methodExecution.getThisObjId(); String thisClassName = methodExecution.getThisClassName(); diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java index 97be91e..ca75cad 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java @@ -63,25 +63,6 @@ MethodExecution creationCallTree = extractedStructure.getCreationCallTree(); MethodExecution coordinator = extractedStructure.getCoordinator(); TracePoint bottomPoint = findTracePoint(reference, creationCallTree, before.getStatement().getTimeStamp()); - deltaMarkerView.setBottomPoint(bottomPoint); - - deltaMarkerView.setCoordinatorPoint(coordinator.getEntryPoint()); -// MethodExecution me = bottomPoint.getMethodExecution(); -// MethodExecution childMe = null; -// while (me != null) { -// if (coordinator.equals(me)) { -// TracePoint coordinatorPoint; -// if (childMe != null) { -// coordinatorPoint = childMe.getCallerTracePoint(); -// } else { -// coordinatorPoint = bottomPoint; -// } -// deltaMarkerView.setCoordinatorPoint(coordinatorPoint); -// break; -// } -// childMe = me; -// me = me.getParent(); -// } // �f���^���o�̌��ʂ����Ƀ\�[�X�R�[�h�𔽓]�\������ DeltaMarkerManager mgr = deltaMarkerView.getDeltaMarkerManager(); @@ -99,17 +80,16 @@ if (fu.getContainerObjId().equals(reference.getSrcObjectId()) && fu.getValueObjId().equals(reference.getDstObjectId())) { return new TracePoint(methodExecution, i); - } + } } else if (statement instanceof MethodInvocation) { MethodInvocation mi = (MethodInvocation)statement; MethodExecution me = mi.getCalledMethodExecution(); - if (me.getThisObjId().equals(reference.getSrcObjectId())) { - for (ObjectReference arg : me.getArguments()) { - if (arg.getId().equals(reference.getDstObjectId())) { - return new TracePoint(methodExecution, i); - } + if (!(me.getThisObjId().equals(reference.getSrcObjectId()))) continue; + for (ObjectReference arg : me.getArguments()) { + if (arg.getId().equals(reference.getDstObjectId())) { + return new TracePoint(methodExecution, i); } - } + } } } return null; diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java index c4c91c1..e3ed809 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java @@ -30,7 +30,6 @@ import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayAccess; import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayCreate; import org.ntlab.traceAnalysisPlatform.tracer.trace.FieldAccess; -import org.ntlab.traceAnalysisPlatform.tracer.trace.FieldUpdate; import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution; import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodInvocation; import org.ntlab.traceAnalysisPlatform.tracer.trace.Reference; @@ -119,6 +118,22 @@ } return null; } + + public static TracePoint getTracePoint(IMarker deltaMarker) { + try { + Object data = deltaMarker.getAttribute(DELTA_MARKER_ATR_DATA); + if (data instanceof MethodExecution) { + return ((MethodExecution)data).getEntryPoint(); + } else if (data instanceof TracePoint) { + return (TracePoint)data; + } else if (data instanceof Alias) { + return ((Alias)data).getOccurrencePoint(); + } + } catch (CoreException e) { + e.printStackTrace(); + } + return null; + } public void markAndOpenJavaFileForAlias(Alias alias, String message, String markerId) { IFile file = JavaEditorOperator.findIFile(alias.getMethodExecution());