diff --git a/src/org/ntlab/traceDebugger/CallStackView.java b/src/org/ntlab/traceDebugger/CallStackView.java index 1576496..4cf4d8d 100644 --- a/src/org/ntlab/traceDebugger/CallStackView.java +++ b/src/org/ntlab/traceDebugger/CallStackView.java @@ -11,7 +11,6 @@ import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; -import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; @@ -22,7 +21,6 @@ import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IViewPart; -import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; @@ -77,7 +75,7 @@ variableView.updateVariablesByTracePoint(tp, false); AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); if (analyzer instanceof DeltaExtractionAnalyzer) { - DeltaMarkerView deltaMarkerView = ((DeltaExtractionAnalyzer)analyzer).getActiveDeltaMarkerView(); + DeltaMarkerView deltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.getActiveView(DeltaMarkerView.ID); if (deltaMarkerView != null) { DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager(); Map> deltaMarkers = deltaMarkerManager.getMarkers(); @@ -124,8 +122,10 @@ String calleeClassName = callee.getThisClassName(); String calleeId = callee.getThisObjId(); TracePoint before = callee.getCallerTracePoint(); - Variable variable = new Variable("tmp", callerClassName, callerId, calleeClassName, calleeId, before, false); - delta(variable); + Variable variable = new Variable("tmp", callerClassName, callerId, calleeClassName, calleeId, before, false); + String secandaryId = TraceDebuggerPlugin.assignUniqueIdForNewView(); + DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)(getNewView(DeltaMarkerView.ID, secandaryId, IWorkbenchPage.VIEW_ACTIVATE)); + newDeltaMarkerView.extractDelta(variable, false); } } }; @@ -200,39 +200,6 @@ callStackModels.highlight(methodExecution); viewer.refresh(); } - - private void delta(Variable variable) { - AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); - if (analyzer instanceof DeltaExtractionAnalyzer) { - DeltaExtractionAnalyzer deltaAnalyzer = (DeltaExtractionAnalyzer)analyzer; - IWorkbench workbench = PlatformUI.getWorkbench(); - IWorkbenchPage workbenchPage = workbench.getActiveWorkbenchWindow().getActivePage(); - try { - // note: ����r���[�𕡐��J���e�X�g - String subIdWithNewView = deltaAnalyzer.getNextDeltaMarkerSubId(); - DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)workbenchPage.showView(DeltaMarkerView.ID, subIdWithNewView, IWorkbenchPage.VIEW_ACTIVATE); - deltaAnalyzer.extractDeltaForThisToAnother(variable, newDeltaMarkerView, subIdWithNewView); - TracePoint coordinatorPoint = newDeltaMarkerView.getCoordinatorPoint(); - TracePoint creationPoint = newDeltaMarkerView.getCreationPoint(); - DebuggingController controller = DebuggingController.getInstance(); - controller.jumpToTheTracePoint(creationPoint, false); - - DeltaMarkerManager deltaMarkerManager = newDeltaMarkerView.getDeltaMarkerManager(); - VariableView variableView = (VariableView)getOtherView(VariableView.ID); - variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); - MethodExecution coordinatorME = coordinatorPoint.getMethodExecution(); - MethodExecution bottomME = newDeltaMarkerView.getCreationPoint().getMethodExecution(); - highlight(coordinatorME); - CallTreeView callTreeView = (CallTreeView)getOtherView(CallTreeView.ID); - callTreeView.update(deltaMarkerManager); - callTreeView.highlight(bottomME); - TracePointsView tracePointsView = (TracePointsView)getOtherView(TracePointsView.ID); - tracePointsView.addTracePoint(creationPoint); - } catch (PartInitException e) { - e.printStackTrace(); - } - } - } private IViewPart getOtherView(String viewId) { IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); @@ -242,4 +209,13 @@ throw new RuntimeException(e); } } + + private IViewPart getNewView(String viewId, String secondaryId, int mode) { + IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + try { + return workbenchPage.showView(viewId, secondaryId, mode); + } catch (PartInitException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/org/ntlab/traceDebugger/CallTreeView.java b/src/org/ntlab/traceDebugger/CallTreeView.java index e1c9f9c..a9b1873 100644 --- a/src/org/ntlab/traceDebugger/CallTreeView.java +++ b/src/org/ntlab/traceDebugger/CallTreeView.java @@ -61,7 +61,7 @@ VariableView variableView = ((VariableView)getOtherView(VariableView.ID)); AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); if (analyzer instanceof DeltaExtractionAnalyzer) { - DeltaMarkerView deltaMarkerView = ((DeltaExtractionAnalyzer)analyzer).getActiveDeltaMarkerView(); + DeltaMarkerView deltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.getActiveView(DeltaMarkerView.ID); DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager(); IMarker coodinatorMarker = deltaMarkerManager.getCoordinatorDeltaMarker(); MethodExecution coordinatorME = DeltaMarkerManager.getMethodExecution(coodinatorMarker); diff --git a/src/org/ntlab/traceDebugger/DeltaMarkerView.java b/src/org/ntlab/traceDebugger/DeltaMarkerView.java index a11c93d..d7bd689 100644 --- a/src/org/ntlab/traceDebugger/DeltaMarkerView.java +++ b/src/org/ntlab/traceDebugger/DeltaMarkerView.java @@ -33,8 +33,7 @@ private TreeViewer viewer; private Shell shell; private IMarker selectionMarker; - private DeltaMarkerManager deltaMarkerManager = new DeltaMarkerManager(); - private String subId; + private DeltaMarkerManager deltaMarkerManager; public static String ID = "org.ntlab.traceDebugger.deltaMarkerView"; @Override @@ -98,10 +97,7 @@ @Override public void setFocus() { // TODO Auto-generated method stub - AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); - if (analyzer instanceof DeltaExtractionAnalyzer) { - ((DeltaExtractionAnalyzer)analyzer).setActiveDeltaMarkerView(this); - } + TraceDebuggerPlugin.addActiveView(ID, this); CallTreeView callTreeView = (CallTreeView)getOtherView(CallTreeView.ID); callTreeView.update(deltaMarkerManager); updateOtherViewsByMarker(selectionMarker); @@ -111,16 +107,12 @@ public void update() { viewer.setInput(deltaMarkerManager.getMarkerTreeNodes()); viewer.expandAll(); - viewer.refresh(); + viewer.refresh(); } public DeltaMarkerManager getDeltaMarkerManager() { return deltaMarkerManager; } - - public String getSubId() { - return subId; - } public TracePoint getCreationPoint() { IMarker creationPointMarker = deltaMarkerManager.getBottomDeltaMarker(); @@ -131,10 +123,6 @@ IMarker coordinatorMarker = deltaMarkerManager.getCoordinatorDeltaMarker(); return DeltaMarkerManager.getTracePoint(coordinatorMarker); } - - public void setSubId(String subId) { - this.subId = subId; - } @Override public void dispose() { @@ -159,8 +147,7 @@ jumpPoint = alias.getOccurrencePoint(); selectionME = jumpPoint.getMethodExecution(); Alias.AliasType type = alias.getAliasType(); - isReturned = type.equals(AliasType.METHOD_INVOCATION) - || type.equals(AliasType.CONSTRACTOR_INVOCATION); + isReturned = type.equals(AliasType.METHOD_INVOCATION) || type.equals(AliasType.CONSTRACTOR_INVOCATION); } else if (obj instanceof TracePoint) { jumpPoint = (TracePoint)obj; selectionME = jumpPoint.getMethodExecution(); @@ -182,6 +169,36 @@ } } } + + public void extractDelta(Variable variable, boolean isContainerToComponent) { + AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); + if (analyzer instanceof DeltaExtractionAnalyzer) { + DeltaExtractionAnalyzer deltaAnalyzer = (DeltaExtractionAnalyzer)analyzer; + if (isContainerToComponent) { + deltaMarkerManager = deltaAnalyzer.extractDeltaForContainerToComponent(variable); + } else { + deltaMarkerManager = deltaAnalyzer.extractDeltaForThisToAnother(variable); + } + deltaMarkerManager.createMarkerAndOpenJavaFileForAll(); // �f���^���o�̌��ʂ����Ƀ\�[�X�R�[�h�𔽓]�\������ + update(); + + TracePoint coordinatorPoint = getCoordinatorPoint(); + TracePoint creationPoint = getCreationPoint(); + MethodExecution coordinatorME = coordinatorPoint.getMethodExecution(); + MethodExecution bottomME = creationPoint.getMethodExecution(); + DebuggingController controller = DebuggingController.getInstance(); + controller.jumpToTheTracePoint(creationPoint, false); + VariableView variableView = (VariableView)(getOtherView(VariableView.ID)); + variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); + CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID); + callStackView.highlight(coordinatorME); + CallTreeView callTreeView = (CallTreeView)getOtherView(CallTreeView.ID); + callTreeView.update(deltaMarkerManager); + callTreeView.highlight(bottomME); + TracePointsView tracePointsView = (TracePointsView)getOtherView(TracePointsView.ID); + tracePointsView.addTracePoint(creationPoint); + } + } private IViewPart getOtherView(String viewId) { IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); @@ -190,5 +207,5 @@ } catch (PartInitException e) { throw new RuntimeException(e); } - } + } } diff --git a/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java b/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java index 0e6ee82..3ded418 100644 --- a/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java +++ b/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java @@ -1,5 +1,9 @@ package org.ntlab.traceDebugger; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.ui.IViewPart; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.ntlab.traceDebugger.analyzerProvider.AbstractAnalyzer; import org.osgi.framework.BundleContext; @@ -12,9 +16,12 @@ // The plug-in ID public static final String PLUGIN_ID = "org.ntlab.helloWorld"; //$NON-NLS-1$ -// private static ObjectFlowAnalyzer objectFlowAnalyzer; private static AbstractAnalyzer analyzer; + private static int uniqueIdForViews = 0; + + private static Map viewIdToActiveView = new HashMap<>(); + // The shared instance private static TraceDebuggerPlugin plugin; @@ -50,20 +57,24 @@ public static TraceDebuggerPlugin getDefault() { return plugin; } - -// public static ObjectFlowAnalyzer getObjectFlowAnalyzer() { -// return objectFlowAnalyzer; -// } -// -// public static void setObjectFlowAnalyzer(ObjectFlowAnalyzer objectFlowAnalyzer) { -// TraceDebuggerPlugin.objectFlowAnalyzer = objectFlowAnalyzer; -// } public static AbstractAnalyzer getAnalyzer() { return analyzer; } + public static IViewPart getActiveView(String viewId) { + return viewIdToActiveView.get(viewId); + } + public static void setAnalyzer(AbstractAnalyzer analyzer) { TraceDebuggerPlugin.analyzer = analyzer; } + + public static void addActiveView(String viewId, IViewPart activeView) { + viewIdToActiveView.put(viewId, activeView); + } + + public static String assignUniqueIdForNewView() { + return "View" + (uniqueIdForViews++); + } } diff --git a/src/org/ntlab/traceDebugger/TracePointsView.java b/src/org/ntlab/traceDebugger/TracePointsView.java index 516a327..f499298 100644 --- a/src/org/ntlab/traceDebugger/TracePointsView.java +++ b/src/org/ntlab/traceDebugger/TracePointsView.java @@ -194,7 +194,7 @@ AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); if (analyzer instanceof DeltaExtractionAnalyzer) { - DeltaMarkerView deltaMarkerView = ((DeltaExtractionAnalyzer)analyzer).getActiveDeltaMarkerView(); + DeltaMarkerView deltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.getActiveView(DeltaMarkerView.ID); if (deltaMarkerView != null) { DeltaMarkerManager deltaMarkerManager = deltaMarkerView.getDeltaMarkerManager(); Map> deltaMarkers = deltaMarkerManager.getMarkers(); diff --git a/src/org/ntlab/traceDebugger/VariableView.java b/src/org/ntlab/traceDebugger/VariableView.java index 792fef0..7467f16 100644 --- a/src/org/ntlab/traceDebugger/VariableView.java +++ b/src/org/ntlab/traceDebugger/VariableView.java @@ -31,7 +31,6 @@ import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.IViewPart; -import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; @@ -39,9 +38,7 @@ 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.DeltaExtractionAnalyzer; import org.ntlab.traceDebugger.analyzerProvider.DeltaMarkerManager; public class VariableView extends ViewPart { @@ -150,8 +147,9 @@ deltaAction = new Action() { @Override public void run() { - String containerClassName = selectedVariable.getContainerClassName(); - delta(selectedVariable, containerClassName.startsWith("java.util."), false); + String secandaryId = TraceDebuggerPlugin.assignUniqueIdForNewView(); + DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)(getNewView(DeltaMarkerView.ID, secandaryId, IWorkbenchPage.VIEW_ACTIVATE)); + newDeltaMarkerView.extractDelta(selectedVariable, true); } }; deltaAction.setText("Extract Delta"); @@ -159,9 +157,10 @@ deltaActionForContainerToComponent = new Action() { @Override - public void run() { - String containerClassName = selectedVariable.getContainerClassName(); - delta(selectedVariable, containerClassName.startsWith("java.util."), false); + public void run() { + String secandaryId = TraceDebuggerPlugin.assignUniqueIdForNewView(); + DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)(getNewView(DeltaMarkerView.ID, secandaryId, IWorkbenchPage.VIEW_ACTIVATE)); + newDeltaMarkerView.extractDelta(selectedVariable, true); } }; deltaActionForContainerToComponent.setText("Extract Delta"); @@ -170,7 +169,9 @@ deltaActionForThisToAnother = new Action() { @Override public void run() { - delta(selectedVariable, false, true); + String secandaryId = TraceDebuggerPlugin.assignUniqueIdForNewView(); + DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)(getNewView(DeltaMarkerView.ID, secandaryId, IWorkbenchPage.VIEW_ACTIVATE)); + newDeltaMarkerView.extractDelta(selectedVariable, false); } }; deltaActionForThisToAnother.setText("Extract Delta"); @@ -190,8 +191,10 @@ String valueId = selectedVariable.getValueId(); String valueType = selectedVariable.getValueClassName(); TracePoint tp = DebuggingController.getInstance().getCurrentTp(); - Variable variable = new Variable("tmp", containerType, containerId, valueType, valueId, tp, false); - delta(variable, true, false); + Variable variable = new Variable("tmp", containerType, containerId, valueType, valueId, tp, false); + String secandaryId = TraceDebuggerPlugin.assignUniqueIdForNewView(); + DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)(getNewView(DeltaMarkerView.ID, secandaryId, IWorkbenchPage.VIEW_ACTIVATE)); + newDeltaMarkerView.extractDelta(variable, true); } }; deltaActionForCollection.setText("Extract Delta for Collection"); @@ -257,44 +260,7 @@ String textForThisToAnother = String.format("Extract Delta (%s: %s �� %s: %s)", thisId, thisClassName, valueId, valueClassName); deltaActionForThisToAnother.setText(textForThisToAnother); deltaActionForThisToAnother.setToolTipText(textForThisToAnother); - } - - private void delta(Variable variable, boolean isCollection, boolean isForThisToAnother) { - AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); - if (analyzer instanceof DeltaExtractionAnalyzer) { - DeltaExtractionAnalyzer deltaAnalyzer = (DeltaExtractionAnalyzer)analyzer; - IWorkbench workbench = PlatformUI.getWorkbench(); - IWorkbenchPage workbenchPage = workbench.getActiveWorkbenchWindow().getActivePage(); - try { - // note: ����r���[�𕡐��J���e�X�g - String subIdWithNewView = deltaAnalyzer.getNextDeltaMarkerSubId(); - DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)workbenchPage.showView(DeltaMarkerView.ID, subIdWithNewView, IWorkbenchPage.VIEW_ACTIVATE); - if (isForThisToAnother) { - deltaAnalyzer.extractDeltaForThisToAnother(variable, newDeltaMarkerView, subIdWithNewView); - } else { - deltaAnalyzer.extractDelta(variable, isCollection, newDeltaMarkerView, subIdWithNewView); - } - TracePoint coordinatorPoint = newDeltaMarkerView.getCoordinatorPoint(); - TracePoint creationPoint = newDeltaMarkerView.getCreationPoint(); - DebuggingController controller = DebuggingController.getInstance(); - controller.jumpToTheTracePoint(creationPoint, false); - - DeltaMarkerManager deltaMarkerManager = newDeltaMarkerView.getDeltaMarkerManager(); - markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); - MethodExecution coordinatorME = coordinatorPoint.getMethodExecution(); - MethodExecution bottomME = newDeltaMarkerView.getCreationPoint().getMethodExecution(); - CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID); - callStackView.highlight(coordinatorME); - CallTreeView callTreeView = (CallTreeView)getOtherView(CallTreeView.ID); - callTreeView.update(deltaMarkerManager); - callTreeView.highlight(bottomME); - TracePointsView tracePointsView = (TracePointsView)getOtherView(TracePointsView.ID); - tracePointsView.addTracePoint(creationPoint); - } catch (PartInitException e) { - e.printStackTrace(); - } - } - } + } public void updateVariablesByTracePoint(TracePoint tp, boolean isReturned) { updateVariablesByTracePoint(null, tp, isReturned); @@ -381,5 +347,14 @@ } catch (PartInitException e) { throw new RuntimeException(e); } + } + + private IViewPart getNewView(String viewId, String secondaryId, int mode) { + IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + try { + return workbenchPage.showView(viewId, secondaryId, mode); + } catch (PartInitException e) { + throw new RuntimeException(e); + } } } diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java index 5aa8b06..2331de1 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java @@ -1,11 +1,8 @@ package org.ntlab.traceDebugger.analyzerProvider; -import java.util.Collections; -import java.util.HashMap; 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.MethodInvocation; @@ -15,21 +12,16 @@ import org.ntlab.traceAnalysisPlatform.tracer.trace.Trace; 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 { private static DeltaExtractionAnalyzer theInstance = null; private DeltaExtractorJSON deltaExtractor; private ExtractedStructure extractedStructure; - private Map deltaMarkerViews = new HashMap<>(); - private DeltaMarkerView activeDeltaMarkerView; public DeltaExtractionAnalyzer(Trace trace) { super(trace); deltaExtractor = new DeltaExtractorJSON((TraceJSON)trace); - reset(); } /** @@ -47,15 +39,14 @@ return extractedStructure; } - public void extractDelta(Variable variable, boolean isCollection, DeltaMarkerView deltaMarkerView, String deltaMarkerViewSubId) { - addDeltaMarkerView(deltaMarkerViewSubId, deltaMarkerView); + public DeltaMarkerManager extractDeltaForContainerToComponent(Variable variable) { String srcId = variable.getContainerId(); String srcClassName = variable.getContainerClassName(); String dstId = variable.getValueId(); String dstClassName = variable.getValueClassName(); TracePoint before = variable.getBeforeTracePoint(); Reference reference = new Reference(srcId, dstId, srcClassName, dstClassName); - reference.setCollection(isCollection); // true�ɂ���ƃR���N�V�����ȊO���o�ł��Ȃ��Ȃ� + reference.setCollection(srcClassName.startsWith("java.util.")); // true�ɂ���ƃR���N�V�����ȊO���o�ł��Ȃ��Ȃ� // �f���^���o DeltaRelatedAliasCollector aliasCollector = new DeltaRelatedAliasCollector(srcId, dstId); @@ -63,15 +54,10 @@ MethodExecution creationCallTree = extractedStructure.getCreationCallTree(); MethodExecution coordinator = extractedStructure.getCoordinator(); TracePoint bottomPoint = findTracePoint(reference, creationCallTree, before.getStatement().getTimeStamp()); - - // �f���^���o�̌��ʂ����Ƀ\�[�X�R�[�h�𔽓]�\������ - DeltaMarkerManager mgr = deltaMarkerView.getDeltaMarkerManager(); - mark(mgr, coordinator, aliasCollector, bottomPoint, reference); - deltaMarkerView.update(); + return new DeltaMarkerManager(coordinator, bottomPoint, reference, aliasCollector); } - public void extractDeltaForThisToAnother(Variable variable, DeltaMarkerView deltaMarkerView, String deltaMarkerViewSubId) { - addDeltaMarkerView(deltaMarkerViewSubId, deltaMarkerView); + public DeltaMarkerManager extractDeltaForThisToAnother(Variable variable) { TracePoint before = variable.getBeforeTracePoint(); String srcId = before.getMethodExecution().getThisObjId(); String srcClassName = before.getMethodExecution().getThisClassName(); @@ -95,12 +81,8 @@ DeltaRelatedAliasCollector aliasCollector = new DeltaRelatedAliasCollector(srcId, dstId); extractedStructure = deltaExtractor.extract(tp, objectReference, aliasCollector); MethodExecution coordinator = extractedStructure.getCoordinator(); - - // �f���^���o�̌��ʂ����Ƀ\�[�X�R�[�h�𔽓]�\������ - DeltaMarkerManager mgr = deltaMarkerView.getDeltaMarkerManager(); Reference reference = new Reference(srcId, dstId, srcClassName, dstClassName); - mark(mgr, coordinator, aliasCollector, bottomPoint, reference); - deltaMarkerView.update(); + return new DeltaMarkerManager(coordinator, bottomPoint, reference, aliasCollector); } private TracePoint findTracePoint(Reference reference, MethodExecution methodExecution, long beforeTime) { @@ -127,49 +109,4 @@ } return null; } - - private void mark(DeltaMarkerManager mgr, MethodExecution coordinator, DeltaRelatedAliasCollector aliasCollector, TracePoint bottomPoint, Reference creationReference) { - int srcSideCnt = 1; - int dstSideCnt = 1; - mgr.markAndOpenJavaFileForCoordinator(coordinator, "Coordinator", DeltaMarkerManager.COORDINATOR_DELTA_MARKER); - List relatedAliases = aliasCollector.getRelatedAliases(); - Collections.reverse(relatedAliases); - for (Alias alias : relatedAliases) { - String side = aliasCollector.resolveSideInTheDelta(alias); - if (side.contains(DeltaRelatedAliasCollector.SRC_SIDE)) { - String message = String.format("SrcSide%03d", srcSideCnt); - mgr.markAndOpenJavaFileForAlias(alias, message, DeltaMarkerManager.SRC_SIDE_DELTA_MARKER); - srcSideCnt++; - } else if (side.contains(DeltaRelatedAliasCollector.DST_SIDE)) { - String message = String.format("DstSide%03d", dstSideCnt); - mgr.markAndOpenJavaFileForAlias(alias, message, DeltaMarkerManager.DST_SIDE_DELTA_MARKER); - dstSideCnt++; - } - } - mgr.markAndOpenJavaFileForCreationPoint(bottomPoint, creationReference, "RelatedPoint", DeltaMarkerManager.BOTTOM_DELTA_MARKER); - } - - private void reset() { - for (DeltaMarkerView deltaMarkerView : deltaMarkerViews.values()) { - deltaMarkerView.getDeltaMarkerManager().clearAllMarkers(); - } - deltaMarkerViews.clear(); - } - - private void addDeltaMarkerView(String subId, DeltaMarkerView deltaMarkerView) { - deltaMarkerView.setSubId(subId); - deltaMarkerViews.put(subId, deltaMarkerView); - } - - 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 diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java index b300faf..6f87917 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java @@ -1,6 +1,7 @@ package org.ntlab.traceDebugger.analyzerProvider; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -40,6 +41,10 @@ public class DeltaMarkerManager { private Map> markerIdToMarkers = new HashMap<>(); private List markersByOrder = new ArrayList<>(); + private MethodExecution coordinator; + private TracePoint relatedPoint; + private Reference relatedPointReference; + private DeltaRelatedAliasCollector aliasCollector; public static final String BOTTOM_DELTA_MARKER = "org.ntlab.traceDebugger.bottomDeltaMarker"; public static final String COORDINATOR_DELTA_MARKER = "org.ntlab.traceDebugger.coordinatorDeltaMarker"; public static final String SRC_SIDE_DELTA_MARKER = "org.ntlab.traceDebugger.srcSideDeltaMarker"; @@ -49,6 +54,13 @@ public static final String DELTA_MARKER_ATR_OBJECT_TYPE = "objectType"; public static final String DELTA_MARKER_ATR_ALIAS_TYPE = "aliasType"; + public DeltaMarkerManager(MethodExecution coordinator, TracePoint relatedPoint, Reference relatedPointReference, DeltaRelatedAliasCollector aliasCollector) { + this.coordinator = coordinator; + this.relatedPoint = relatedPoint; + this.relatedPointReference = relatedPointReference; + this.aliasCollector = aliasCollector; + } + public Map> getMarkers() { return markerIdToMarkers; } @@ -135,7 +147,28 @@ return null; } - public void markAndOpenJavaFileForAlias(Alias alias, String message, String markerId) { + public void createMarkerAndOpenJavaFileForAll() { + int srcSideCnt = 1; + int dstSideCnt = 1; + markAndOpenJavaFileForCoordinator(coordinator, "Coordinator", DeltaMarkerManager.COORDINATOR_DELTA_MARKER); + List relatedAliases = aliasCollector.getRelatedAliases(); + Collections.reverse(relatedAliases); + for (Alias alias : relatedAliases) { + String side = aliasCollector.resolveSideInTheDelta(alias); + if (side.contains(DeltaRelatedAliasCollector.SRC_SIDE)) { + String message = String.format("SrcSide%03d", srcSideCnt); + markAndOpenJavaFileForAlias(alias, message, DeltaMarkerManager.SRC_SIDE_DELTA_MARKER); + srcSideCnt++; + } else if (side.contains(DeltaRelatedAliasCollector.DST_SIDE)) { + String message = String.format("DstSide%03d", dstSideCnt); + markAndOpenJavaFileForAlias(alias, message, DeltaMarkerManager.DST_SIDE_DELTA_MARKER); + dstSideCnt++; + } + } + markAndOpenJavaFileForCreationPoint(relatedPoint, relatedPointReference, "RelatedPoint", DeltaMarkerManager.BOTTOM_DELTA_MARKER); + } + + private void markAndOpenJavaFileForAlias(Alias alias, String message, String markerId) { IFile file = JavaEditorOperator.findIFile(alias.getMethodExecution()); if (file != null) { IMarker marker = addMarkerForAlias(alias, file, message, markerId); @@ -143,7 +176,7 @@ } } - public void markAndOpenJavaFileForCreationPoint(TracePoint creationPoint, Reference reference, String message, String markerId) { + private void markAndOpenJavaFileForCreationPoint(TracePoint creationPoint, Reference reference, String message, String markerId) { MethodExecution me = creationPoint.getMethodExecution(); String objectId = reference.getSrcObjectId() + " -> " + reference.getDstObjectId(); String objectType = reference.getSrcClassName() + " -> " + reference.getDstClassName(); @@ -154,7 +187,7 @@ } } - public void markAndOpenJavaFileForCoordinator(MethodExecution methodExecution, String message, String markerId) { + private void markAndOpenJavaFileForCoordinator(MethodExecution methodExecution, String message, String markerId) { IFile file = JavaEditorOperator.findIFile(methodExecution); if (file != null) { String objectId = methodExecution.getThisObjId();