diff --git a/plugin.xml b/plugin.xml index 02f69a7..0f7803f 100644 --- a/plugin.xml +++ b/plugin.xml @@ -28,6 +28,14 @@ name="BreakPoint" restorable="true"> + + @@ -98,7 +106,7 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/org/ntlab/traceDebugger/BreakPointView.java b/src/org/ntlab/traceDebugger/BreakPointView.java index 89c5f79..b22185e 100644 --- a/src/org/ntlab/traceDebugger/BreakPointView.java +++ b/src/org/ntlab/traceDebugger/BreakPointView.java @@ -41,9 +41,8 @@ private IAction stepBackOverAction; private IAction stepBackReturnAction; private IAction backResumeAction; - private IAction tmpAction; private Shell shell; - private DebuggingController debuggingController = new DebuggingController(); + private DebuggingController debuggingController = DebuggingController.getInstance(); public static final String ID = "org.ntlab.traceDebugger.breakPointView"; public BreakPointView() { @@ -227,15 +226,6 @@ }; backResumeAction.setText("Back Resume"); backResumeAction.setToolTipText("Back Resume"); - - tmpAction = new Action() { - @Override - public void run() { - debuggingController.tmp(); - } - }; - tmpAction.setText("Tmp"); - tmpAction.setToolTipText("Tmp"); } private void createToolBar() { @@ -251,7 +241,6 @@ mgr.add(stepBackOverAction); mgr.add(stepBackReturnAction); mgr.add(backResumeAction); - mgr.add(tmpAction); } private void createMenuBar() { @@ -267,7 +256,6 @@ mgr.add(stepBackOverAction); mgr.add(stepBackReturnAction); mgr.add(backResumeAction); - mgr.add(tmpAction); } private void createPopupMenu() { diff --git a/src/org/ntlab/traceDebugger/DebuggingController.java b/src/org/ntlab/traceDebugger/DebuggingController.java index d781ec5..3fbc334 100644 --- a/src/org/ntlab/traceDebugger/DebuggingController.java +++ b/src/org/ntlab/traceDebugger/DebuggingController.java @@ -13,14 +13,24 @@ import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution; import org.ntlab.traceAnalysisPlatform.tracer.trace.TraceJSON; import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint; +import org.ntlab.traceDebugger.analyzerProvider.AbstractAnalyzer; import org.ntlab.traceDebugger.analyzerProvider.DeltaExtractionAnalyzer; import org.ntlab.traceDebugger.analyzerProvider.ReferencePoint; public class DebuggingController { + private static final DebuggingController theInstance = new DebuggingController(); private TracePoint debuggingTp; private TraceBreakPoint selectedTraceBreakPoint; private TraceBreakPoints traceBreakPoints = new TraceBreakPoints(); + private DebuggingController() { + + } + + public static DebuggingController getInstance() { + return theInstance; + } + public void setDebuggingTp(TracePoint tp) { this.debuggingTp = tp; } @@ -240,36 +250,16 @@ } /** - * ���݂̃f�o�b�O�ʒu�𒊏o�����f���^�̒�ӂ̃g���[�X�|�C���g�ɍ��킹�� (�Ƃ肠�����m�F���邾���p) + * ���݂̃f�o�b�O�ʒu���w�肵���g���[�X�|�C���g�ɍ��킹�� * @return */ - public boolean tmp() { - DeltaExtractionAnalyzer analyzer = (DeltaExtractionAnalyzer)TraceDebuggerPlugin.getAnalyzer(); - TracePoint tp = analyzer.getBottomPoint(); + public boolean jumpToTheTracePoint(TracePoint tp) { + if (tp == null) return false; debuggingTp = tp.duplicate(); refresh(false); return true; } -// /** -// * ���݂̃f�o�b�O�ʒu�𒊏o�����f���^�̒�ӂ̃g���[�X�|�C���g�ɍ��킹�� (�Ƃ肠�����m�F���邾���p) -// * @return -// */ -// public boolean tmp() { -// DeltaExtractionAnalyzer analyzer = (DeltaExtractionAnalyzer)TraceDebuggerPlugin.getAnalyzer(); -// ReferencePoint rp = analyzer.getBottomPoint(); -// long previousTime = debuggingTp.getStatement().getTimeStamp(); -// long rpTime = rp.getTime(); -// debuggingTp = rp.getTracePoint(); -//// if (rpTime < previousTime) { -//// traceBreakPoints.reverseAll(rpTime); -//// } else { -//// traceBreakPoints.forwardAll(rpTime); -//// } -// refresh(false); -// return true; -// } - private void refresh(boolean isReturned) { MethodExecution me = debuggingTp.getMethodExecution(); int lineNo = debuggingTp.getStatement().getLineNo(); diff --git a/src/org/ntlab/traceDebugger/DeltaMarkerView.java b/src/org/ntlab/traceDebugger/DeltaMarkerView.java new file mode 100644 index 0000000..97a3bee --- /dev/null +++ b/src/org/ntlab/traceDebugger/DeltaMarkerView.java @@ -0,0 +1,20 @@ +package org.ntlab.traceDebugger; + +import org.eclipse.ui.IMemento; +import org.eclipse.ui.IViewSite; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.views.markers.MarkerSupportView; + +public class DeltaMarkerView extends MarkerSupportView { + public static String ID = "org.ntlab.traceDebugger.deltaMarkerView"; + + public DeltaMarkerView() { + super("org.ntlab.traceDebugger.markerContentGenerator"); + } + + @Override + public void init(IViewSite site, IMemento m) throws PartInitException { + // note: ���̃��\�b�h���I�[�o�[���C�h����IMemento��null�ɂ��Ă����Ȃ��ƃR���X�g���N�^�Őݒ肵��Generator����������� + super.init(site, null); + } +} diff --git a/src/org/ntlab/traceDebugger/Variable.java b/src/org/ntlab/traceDebugger/Variable.java index 413bf50..92e415e 100644 --- a/src/org/ntlab/traceDebugger/Variable.java +++ b/src/org/ntlab/traceDebugger/Variable.java @@ -23,22 +23,31 @@ private List children = new ArrayList<>(); private String containerClassName; private String containerId; - private TracePoint tracePoint; + private TracePoint lastUpdatePoint; + private TracePoint before; private boolean isReturned; private DeepHierarchy deepHierarchy; private boolean alreadyCreatedChildHierarchy = false; private boolean alreadyCreatedGrandChildHierarchy = false; + private boolean isSrcSideRelatedDelta = false; + private boolean isDstSideRelatedDelta = false; public Variable(String variableName, String containerClassName, String containerId, String className, String id, TracePoint before, boolean isReturned) { + this(variableName, containerClassName, containerId, className, id, null, before, isReturned); + } + + public Variable(String variableName, String containerClassName, String containerId, + String className, String id, TracePoint lastUpdatePoint, TracePoint before, boolean isReturned) { this.variableName = variableName; this.containerClassName = containerClassName; this.containerId = containerId; this.className = className; this.id = id; - this.tracePoint = before; + this.lastUpdatePoint = lastUpdatePoint; + this.before = before; this.isReturned = isReturned; - this.deepHierarchy = checkDeepHierarchy(); + this.deepHierarchy = checkDeepHierarchy(); } public String getVariableName() { @@ -61,8 +70,12 @@ return id; } - public TracePoint getTracePoint() { - return tracePoint; + public TracePoint getLastUpdatePoint() { + return lastUpdatePoint; + } + + public TracePoint getBeforeTracePoint() { + return before; } public Variable getParent() { @@ -172,12 +185,15 @@ // ���̃t�B�[���h�ɂ‚��Ă̍ŐV�̍X�V�����擾(FieldUpdate) // FieldUpdate fieldUpdate = trace.getRecentlyFieldUpdate(thisObjData.getId(), fieldName, tp); - FieldUpdate fieldUpdate = trace.getFieldUpdate(id, fullyQualifiedFieldName, tracePoint, isReturned); +// FieldUpdate fieldUpdate = trace.getFieldUpdate(id, fullyQualifiedFieldName, before, isReturned); + TracePoint updateTracePoint = trace.getFieldUpdateTracePoint(id, fullyQualifiedFieldName, before, isReturned); + if (updateTracePoint == null) continue; + FieldUpdate fieldUpdate = (FieldUpdate)updateTracePoint.getStatement(); // �t�B�[���h��ID��Type���擾(String) String fieldObjId = (fieldUpdate != null) ? fieldUpdate.getValueObjId() : "0"; String fieldType = (fieldUpdate != null) ? fieldUpdate.getValueClassName() : "---"; - Variable fieldData = new Variable(fieldName, className, id, fieldType, fieldObjId, tracePoint, isReturned); + Variable fieldData = new Variable(fieldName, className, id, fieldType, fieldObjId, updateTracePoint, before, isReturned); this.addChild(fieldData); } } catch (JavaModelException e) { @@ -189,7 +205,7 @@ TraceJSON trace = (TraceJSON)TraceDebuggerPlugin.getAnalyzer().getTrace(); for (int i = 0;; i++){ // ���̔z��v�f�ɂ‚��Ă̍ŐV�̍X�V�����擾(ArrayUpdate) - ArrayUpdate arrayUpdate = trace.getRecentlyArrayUpdate(id, i, tracePoint); + ArrayUpdate arrayUpdate = trace.getRecentlyArrayUpdate(id, i, before); if (arrayUpdate == null) { // �z��̃T�C�Y���擾�ł��Ȃ����߁A�C���f�b�N�X���T�C�Y���߂̂Ƃ��Ɋm���ɔ���������@�Ƃ��ĉ����� // �������A�z��v�f�̓r���ɖ���`���������ꍇ�ł��A�����Ă��܂��̂����_ @@ -200,11 +216,28 @@ // �z��v�f��ID��Type���擾(String) String valueObjId = arrayUpdate.getValueObjectId(); String valueType = arrayUpdate.getValueClassName(); - Variable arrayIndexData = new Variable(arrayIndexName, className, id, valueType, valueObjId, tracePoint, isReturned); + Variable arrayIndexData = new Variable(arrayIndexName, className, id, valueType, valueObjId, before, isReturned); this.addChild(arrayIndexData); } } + public boolean isSrcSideRelatedDelta() { + return isSrcSideRelatedDelta; + } + + public void setSrcSideRelatedDelta(boolean isSrcSideRelatedDelta) { + this.isSrcSideRelatedDelta = isSrcSideRelatedDelta; + } + + public boolean isDstSideRelatedDelta() { + return isDstSideRelatedDelta; + } + + public void setDstSideRelatedDelta(boolean isDstSideRelatedDelta) { + this.isDstSideRelatedDelta = isDstSideRelatedDelta; + } + + private enum DeepHierarchy { NONE, FIELD, ARRAY; } diff --git a/src/org/ntlab/traceDebugger/VariableLabelProvider.java b/src/org/ntlab/traceDebugger/VariableLabelProvider.java index 3607ae2..6bee46d 100644 --- a/src/org/ntlab/traceDebugger/VariableLabelProvider.java +++ b/src/org/ntlab/traceDebugger/VariableLabelProvider.java @@ -1,13 +1,17 @@ package org.ntlab.traceDebugger; +import org.eclipse.jface.viewers.ITableColorProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeNode; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; -public class VariableLabelProvider extends LabelProvider implements ITableLabelProvider { +public class VariableLabelProvider extends LabelProvider implements ITableLabelProvider, ITableColorProvider { @Override public String getColumnText(Object element, int columnIndex) { if (element instanceof TreeNode) { @@ -40,4 +44,27 @@ public Image getImage(Object element) { return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); } + + @Override + public Color getForeground(Object element, int columnIndex) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Color getBackground(Object element, int columnIndex) { + // TODO Auto-generated method stub + if (element instanceof TreeNode) { + Object value = ((TreeNode)element).getValue(); + if (value instanceof Variable) { + Variable variable = (Variable)value; + if (variable.isSrcSideRelatedDelta()) { + org.eclipse.swt.graphics.Color color = new org.eclipse.swt.graphics.Color(Display.getDefault(), 255, 128, 0); + return color; + } + if (variable.isDstSideRelatedDelta()) return Display.getDefault().getSystemColor(SWT.COLOR_CYAN); + } + } + return null; + } } diff --git a/src/org/ntlab/traceDebugger/VariableView.java b/src/org/ntlab/traceDebugger/VariableView.java index d87ba6a..ac30a38 100644 --- a/src/org/ntlab/traceDebugger/VariableView.java +++ b/src/org/ntlab/traceDebugger/VariableView.java @@ -1,6 +1,9 @@ package org.ntlab.traceDebugger; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; @@ -9,9 +12,12 @@ import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ITableColorProvider; import org.eclipse.jface.viewers.ITreeViewerListener; +import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeExpansionEvent; import org.eclipse.jface.viewers.TreeNode; @@ -23,6 +29,7 @@ import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; 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; @@ -31,9 +38,11 @@ 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 VariableView extends ViewPart { - private TreeViewer viewer; + private TreeViewer viewer; + private IAction jumpAction; private IAction deltaAction; private Variable selectedVariable; private Variables variables = Variables.getInstance(); @@ -101,7 +110,7 @@ grandChildNode.setChildren(nodes); } } - viewer.refresh(); + viewer.refresh(); } @Override @@ -120,6 +129,18 @@ } private void createActions() { + jumpAction = new Action() { + public void run() { + TracePoint tp = selectedVariable.getLastUpdatePoint(); + if (tp == null) return; + DebuggingController controller = DebuggingController.getInstance(); + controller.jumpToTheTracePoint(tp); + controller.stepOverAction(); + } + }; + jumpAction.setText("Jump to Creation Point"); + jumpAction.setToolTipText("Jump to Creation Point"); + deltaAction = new Action() { @Override public void run() { @@ -127,6 +148,19 @@ if (analyzer instanceof DeltaExtractionAnalyzer) { DeltaExtractionAnalyzer deltaAnalyzer = (DeltaExtractionAnalyzer)analyzer; deltaAnalyzer.extractDelta(selectedVariable); + TracePoint coordinatorPoint = deltaAnalyzer.getCoordinatorPoint(); + DebuggingController controller = DebuggingController.getInstance(); + controller.jumpToTheTracePoint(coordinatorPoint); + + IWorkbench workbench = PlatformUI.getWorkbench(); + IWorkbenchPage workbenchPage = workbench.getActiveWorkbenchWindow().getActivePage(); + try { + // note: ����r���[�𕡐��J���e�X�g + workbenchPage.showView("org.eclipse.ui.views.AllMarkersView", "tmp" + Math.random(), IWorkbenchPage.VIEW_ACTIVATE); + } catch (PartInitException e) { + e.printStackTrace(); + } + expandParticularNodes(); } } }; @@ -134,6 +168,49 @@ deltaAction.setToolTipText("Extract Delta"); } + private void expandParticularNodes() { + Map> markerIdToObjectIdSet = DeltaMarkerManager.getInstance().getMarkerIdToObjectIdSet(); + Set srcSideIdSet = new HashSet<>(markerIdToObjectIdSet.get(DeltaMarkerManager.DELTA_MARKER_ID)); + Set dstSideIdSet = new HashSet<>(markerIdToObjectIdSet.get(DeltaMarkerManager.DELTA_MARKER_ID_2)); +// Set idSet = new HashSet<>(DeltaMarkerManager.getInstance().getIdSet()); + Set expandNodes = new HashSet<>(); + Object obj = viewer.getTree().getTopItem().getData(); + if (!(obj instanceof TreeNode)) return; + TreeNode node = (TreeNode)obj; + Object value = node.getValue(); + if (!(value instanceof Variable)) return; + expandParticularNodes(srcSideIdSet, dstSideIdSet, expandNodes, node); + viewer.setExpandedElements(expandNodes.toArray(new Object[expandNodes.size()])); + } + + private void expandParticularNodes(Set srcSideIdSet, Set dstSideIdSet, Set expandNodes, TreeNode node) { +// if (idSet.isEmpty()) return; + Object value = node.getValue(); + if (!(value instanceof Variable)) return; + Variable variable = (Variable)value; + String id = variable.getId(); + if (srcSideIdSet.contains(id)) { + variable.setSrcSideRelatedDelta(true); + srcSideIdSet.remove(id); + TreeNode parent = node.getParent(); + if (parent != null) { + expandNodes.add(node.getParent()); + } + } else if (dstSideIdSet.contains(id)) { + variable.setDstSideRelatedDelta(true); + dstSideIdSet.remove(id); + TreeNode parent = node.getParent(); + if (parent != null) { + expandNodes.add(node.getParent()); + } + } + TreeNode[] children = node.getChildren(); + if (children == null) return; + for (TreeNode child : children) { + expandParticularNodes(srcSideIdSet, dstSideIdSet, expandNodes, child); + } + } + private void createToolBar() { IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); } @@ -148,6 +225,7 @@ menuMgr.addMenuListener(new IMenuListener() { @Override public void menuAboutToShow(IMenuManager manager) { + manager.add(jumpAction); manager.add(deltaAction); manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } @@ -168,11 +246,6 @@ viewer.setInput(variables.getVariablesTreeNodes()); } -// public void updateVariablesByAlias(Alias alias) { -// variables.getAllObjectDataByAlias(alias); -// viewer.setInput(variables.getVariablesTreeNodesList()); -// } - private IViewPart getOtherView(String viewId) { IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); try { diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java index 08aae6c..82e2b73 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java @@ -19,6 +19,7 @@ private DeltaExtractorJSON deltaExtractor; private ExtractedStructure extractedStructure; private TracePoint bottomPoint; + private TracePoint coordinatorPoint; public DeltaExtractionAnalyzer(Trace trace) { super(trace); @@ -26,6 +27,7 @@ DeltaMarkerManager mgr = DeltaMarkerManager.getInstance(); mgr.deleteMarkers(DeltaMarkerManager.DELTA_MARKER_ID); mgr.deleteMarkers(DeltaMarkerManager.DELTA_MARKER_ID_2); + mgr.deleteMarkerIdToObjectIdSet(); } private static DeltaExtractionAnalyzer getInstance() { @@ -39,6 +41,10 @@ return bottomPoint; } + public TracePoint getCoordinatorPoint() { + return coordinatorPoint; + } + public ExtractedStructure geExtractedStructure() { return extractedStructure; } @@ -48,7 +54,7 @@ String srcClassName = variable.getContainerClassName(); String dstId = variable.getId(); String dstClassName = variable.getClassName(); - TracePoint before = variable.getTracePoint(); + TracePoint before = variable.getBeforeTracePoint(); Reference reference = new Reference(srcId, dstId, srcClassName, dstClassName); // �f���^���o @@ -61,6 +67,18 @@ MethodExecution coordinator = extractedStructure.getCoordinator(); bottomPoint = findTracePoint(reference, creationCallTree, before.getStatement().getTimeStamp()); + MethodExecution me = bottomPoint.getMethodExecution(); + MethodExecution childMe = null; + coordinatorPoint = null; + while (me != null) { + childMe = me; + me = me.getParent(); + if (coordinator.equals(me)) { + coordinatorPoint = childMe.getCallerTracePoint(); + break; + } + } + // �f���^���o�̌��ʂ����Ƀ\�[�X�R�[�h�𔽓]�\������ mark(bottomPoint, srcSideRelatedAliases, dstSideRelatedAliases, coordinator); } @@ -103,6 +121,7 @@ DeltaMarkerManager mgr = DeltaMarkerManager.getInstance(); mgr.deleteMarkers(DeltaMarkerManager.DELTA_MARKER_ID); mgr.deleteMarkers(DeltaMarkerManager.DELTA_MARKER_ID_2); + mgr.deleteMarkerIdToObjectIdSet(); } private void markAndOpenJavaFile(Alias alias, String message, String markerId) { diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java index dd98e05..eaa2f72 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java @@ -2,8 +2,10 @@ 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.IFile; import org.eclipse.core.resources.IMarker; @@ -37,6 +39,7 @@ public class DeltaMarkerManager { private static final DeltaMarkerManager theInstance = new DeltaMarkerManager(); private Map> markers = new HashMap<>(); + private Map> markerIdToObjectIdSet = new HashMap<>(); public static final String DELTA_MARKER_ID = "org.ntlab.traceDebugger.deltaMarker"; public static final String DELTA_MARKER_ID_2 = "org.ntlab.traceDebugger.deltaMarker2"; @@ -53,6 +56,23 @@ } public IMarker addMarker(Alias alias, IFile file, String message, String markerId) { +// idSet.add(alias.getObjectId()); + if (markerId.equals(DELTA_MARKER_ID)) { + Set objectIdSet = markerIdToObjectIdSet.get(DELTA_MARKER_ID); + if (objectIdSet == null) { + objectIdSet = new HashSet(); + markerIdToObjectIdSet.put(DELTA_MARKER_ID, objectIdSet); + } + objectIdSet.add(alias.getObjectId()); + } else if (markerId.equals(DELTA_MARKER_ID_2)) { + Set objectIdSet = markerIdToObjectIdSet.get(DELTA_MARKER_ID_2); + if (objectIdSet == null) { + objectIdSet = new HashSet(); + markerIdToObjectIdSet.put(DELTA_MARKER_ID_2, objectIdSet); + } + objectIdSet.add(alias.getObjectId()); + } + try { IMarker marker = file.createMarker(markerId); Map attributes = new HashMap<>(); @@ -621,7 +641,8 @@ } else { // note: ���\�b�h�V�O�l�`�����n�C���C�g IType type = JavaEditorOperator.findIType(methodExecution); - final IMethod method = JavaEditorOperator.findIMethod(methodExecution, type); + final IMethod method = JavaEditorOperator.findIMethod(methodExecution, type); + if (method == null) return; ASTParser parser = ASTParser.newParser(AST.JLS10); ICompilationUnit unit = method.getCompilationUnit(); parser.setSource(unit); @@ -670,4 +691,12 @@ markerList.clear(); markers.remove(markerId); } + + public Map> getMarkerIdToObjectIdSet() { + return markerIdToObjectIdSet; + } + + public void deleteMarkerIdToObjectIdSet() { + markerIdToObjectIdSet.clear(); + } }