diff --git a/src/org/ntlab/traceDebugger/CallStackLabelProvider.java b/src/org/ntlab/traceDebugger/CallStackLabelProvider.java index 119b894..dd1c85f 100644 --- a/src/org/ntlab/traceDebugger/CallStackLabelProvider.java +++ b/src/org/ntlab/traceDebugger/CallStackLabelProvider.java @@ -43,20 +43,18 @@ @Override public Color getForeground(Object element) { - // TODO Auto-generated method stub return null; } @Override public Color getBackground(Object element) { - // TODO Auto-generated method stub if (element instanceof TreeNode) { Object value = ((TreeNode)element).getValue(); if (value instanceof CallStackModel) { CallStackModel callStackModel = (CallStackModel)value; if (callStackModel.isHighlighting()) { -// return Display.getDefault().getSystemColor(SWT.COLOR_CYAN); - return Display.getDefault().getSystemColor(SWT.COLOR_CYAN); +// return new Color(Display.getDefault(), 0, 192, 255); + return Display.getDefault().getSystemColor(SWT.COLOR_GREEN); } } } diff --git a/src/org/ntlab/traceDebugger/DeltaMarkerLabelProvider.java b/src/org/ntlab/traceDebugger/DeltaMarkerLabelProvider.java index 9d258a8..f369d8a 100644 --- a/src/org/ntlab/traceDebugger/DeltaMarkerLabelProvider.java +++ b/src/org/ntlab/traceDebugger/DeltaMarkerLabelProvider.java @@ -30,20 +30,35 @@ return "" + marker.getAttribute(IMarker.MESSAGE); case 1: Object objectId = marker.getAttribute("objectId"); - return (objectId != null) ? "" + objectId : null; + return (objectId != null) ? objectId.toString() : null; case 2: Object objectType = marker.getAttribute("objectType"); - return (objectType != null) ? "" + objectType : null; + return (objectType != null) ? objectType.toString() : null; case 3: - Object aliasType = marker.getAttribute("aliasType"); - return (aliasType != null) ? ((Alias.AliasType)aliasType).toString() : null; + Object obj = marker.getAttribute("aliasType"); + if (obj == null) return null; + // note: �X�l�[�N�P�[�X���p�X�J���P�[�X(�������P��Ԃ��󔒂ŋ�؂�)�ɕς��� + String aliasType = obj.toString(); + aliasType = aliasType.toLowerCase().replace("_", " "); + StringBuilder sb = new StringBuilder(); + for (int index = -1;;) { + sb.append(aliasType.substring(index + 1, index + 2).toUpperCase()); + int nextIndex = aliasType.indexOf(" ", index + 1); + if (nextIndex == -1) { + sb.append(aliasType.substring(index + 2)); + break; + } else { + sb.append(aliasType.substring(index + 2, nextIndex + 1)); + index = nextIndex; + } + } + aliasType = sb.toString(); + return aliasType; case 4: - return marker.getResource().toString(); + String resource = marker.getResource().toString(); + return resource.substring(resource.lastIndexOf("/") + 1); case 5: - return "line " + marker.getAttribute(IMarker.LINE_NUMBER); - case 6: - String markerType = marker.getType(); - return markerType.substring(markerType.lastIndexOf(".") + 1); + return "line: " + marker.getAttribute(IMarker.LINE_NUMBER); } } catch(CoreException e) { e.printStackTrace(); @@ -55,12 +70,12 @@ @Override public Image getColumnImage(Object element, int columnIndex) { - if (element instanceof TreeNode) { - Object value = ((TreeNode)element).getValue(); - if (value instanceof String && columnIndex == 0) { - return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); - } - } +// if (element instanceof TreeNode) { +// Object value = ((TreeNode)element).getValue(); +// if (value instanceof String && columnIndex == 0) { +// return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); +// } +// } return null; } diff --git a/src/org/ntlab/traceDebugger/DeltaMarkerView.java b/src/org/ntlab/traceDebugger/DeltaMarkerView.java index 1d09865..c1f0001 100644 --- a/src/org/ntlab/traceDebugger/DeltaMarkerView.java +++ b/src/org/ntlab/traceDebugger/DeltaMarkerView.java @@ -67,8 +67,8 @@ tree.setLinesVisible(true); // �e�[�u���̃J�������쐬 - String[] tableColumnTexts = {"Description", "Object ID", "Object Type", "Alias Type", "Resource", "Location", "Marker"}; - int[] tableColumnWidth = {140, 100, 100, 150, 100, 60, 100}; + String[] tableColumnTexts = {"Description", "Object ID", "Object Type", "Alias Type", "Source", "Line"}; + int[] tableColumnWidth = {120, 100, 80, 120, 100, 50}; TreeColumn[] tableColumns = new TreeColumn[tableColumnTexts.length]; for (int i = 0; i < tableColumns.length; i++) { tableColumns[i] = new TreeColumn(tree, SWT.NULL); @@ -88,12 +88,22 @@ IMarker marker = (IMarker)value; try { DebuggingController controller = DebuggingController.getInstance(); - controller.jumpToTheTracePoint(coordinatorPoint); + Object obj = marker.getAttribute("data"); + TracePoint jumpPoint = coordinatorPoint; + if (obj instanceof Alias) { + jumpPoint = ((Alias)obj).getOccurrencePoint(); + } else if (obj instanceof TracePoint) { + jumpPoint = (TracePoint)obj; + } + controller.jumpToTheTracePoint(jumpPoint); + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IDE.openEditor(page, marker); - highlightInCallStacks(marker); +// highlightInCallStack(marker); + highlightInCallStack(deltaMarkerManager.getCoordinatorDeltaMarker()); VariableView variableView = (VariableView)getOtherView(VariableView.ID); variableView.expandParticularNodes(deltaMarkerManager.getMarkers()); + setFocus(); } catch (CoreException e) { e.printStackTrace(); } @@ -163,14 +173,16 @@ this.coordinatorPoint = coordinatorPoint; } - private void highlightInCallStacks(IMarker marker) { + private void highlightInCallStack(IMarker marker) { CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID); - callStackView.updateByTracePoint(bottomPoint); +// callStackView.updateByTracePoint(bottomPoint); try { Object obj = marker.getAttribute("data"); String signature1 = ""; if (obj instanceof Alias) { signature1 = ((Alias)obj).getMethodSignature(); + } else if (obj instanceof TracePoint) { + signature1 = ((TracePoint)obj).getMethodExecution().getCallerSideSignature(); } else if (obj instanceof MethodExecution) { signature1 = ((MethodExecution)obj).getCallerSideSignature(); } diff --git a/src/org/ntlab/traceDebugger/VariableLabelProvider.java b/src/org/ntlab/traceDebugger/VariableLabelProvider.java index 6bee46d..5fcbf39 100644 --- a/src/org/ntlab/traceDebugger/VariableLabelProvider.java +++ b/src/org/ntlab/traceDebugger/VariableLabelProvider.java @@ -47,22 +47,21 @@ @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; + return new Color(Display.getDefault(), 255, 128, 0); } - if (variable.isDstSideRelatedDelta()) return Display.getDefault().getSystemColor(SWT.COLOR_CYAN); + if (variable.isDstSideRelatedDelta()) { + return Display.getDefault().getSystemColor(SWT.COLOR_CYAN); + } } } return null; diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/Alias.java b/src/org/ntlab/traceDebugger/analyzerProvider/Alias.java index f07924f..15b487c 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/Alias.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/Alias.java @@ -1,6 +1,11 @@ package org.ntlab.traceDebugger.analyzerProvider; +import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayAccess; +import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayCreate; +import org.ntlab.traceAnalysisPlatform.tracer.trace.BlockEnter; +import org.ntlab.traceAnalysisPlatform.tracer.trace.FieldAccess; import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution; +import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodInvocation; import org.ntlab.traceAnalysisPlatform.tracer.trace.Statement; import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint; @@ -69,4 +74,73 @@ public void setIndex(int index) { this.index = index; } + + public String getObjectType() { + TracePoint tmpTp; + Statement callerStatement; + Statement statement = occurrencePoint.getStatement(); + switch (aliasType) { + // ���\�b�h�ւ̓��� + case FORMAL_PARAMETER: + tmpTp = occurrencePoint.duplicate(); + tmpTp.stepBackOver(); + callerStatement = tmpTp.getStatement(); + if (callerStatement instanceof MethodInvocation) { + MethodExecution me = ((MethodInvocation)callerStatement).getCalledMethodExecution(); + return me.getArguments().get(index).getActualType(); + } + case THIS: + if (statement instanceof FieldAccess) { + return ((FieldAccess)statement).getContainerClassName(); + } + case METHOD_INVOCATION: + case CONSTRACTOR_INVOCATION: + if (statement instanceof MethodInvocation) { + MethodExecution me = ((MethodInvocation)statement).getCalledMethodExecution(); + return me.getReturnValue().getActualType(); + } + // �ǐՃI�u�W�F�N�g�̐؂�ւ� + case FIELD: + if (statement instanceof FieldAccess) { + return ((FieldAccess)statement).getValueClassName(); + } + case CONTAINER: + if (statement instanceof FieldAccess) { + return ((FieldAccess)statement).getContainerClassName(); + } + case ARRAY_ELEMENT: + if (statement instanceof ArrayAccess) { + return ((ArrayAccess)statement).getValueClassName(); + } + case ARRAY: + if (statement instanceof ArrayAccess) { + return ((ArrayAccess)statement).getArrayClassName(); + } + case ARRAY_CREATE: + if (statement instanceof ArrayCreate) { + return ((ArrayCreate)statement).getArrayClassName(); + } + + // ���\�b�h����̏o�� + case ACTUAL_ARGUMENT: + if (statement instanceof MethodInvocation) { + MethodExecution me = ((MethodInvocation)statement).getCalledMethodExecution(); + return me.getArguments().get(index).getActualType(); + } + case RECEIVER: + if (statement instanceof MethodInvocation) { + MethodExecution me = ((MethodInvocation)statement).getCalledMethodExecution(); + return me.getThisClassName(); + } + case RETURN_VALUE: + tmpTp = occurrencePoint.duplicate(); + tmpTp.stepOver(); + callerStatement = tmpTp.getStatement(); + if (callerStatement instanceof MethodInvocation) { + MethodExecution me = ((MethodInvocation)callerStatement).getCalledMethodExecution(); + return me.getReturnValue().getActualType(); + } + } + return ""; + } } \ No newline at end of file diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java index fd1db95..d779533 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java @@ -1,5 +1,6 @@ package org.ntlab.traceDebugger.analyzerProvider; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -50,12 +51,14 @@ DeltaRelatedAliasCollector aliasCollector = new DeltaRelatedAliasCollector(srcId, dstId); extractedStructure = deltaExtractor.extract(reference, before.duplicate(), aliasCollector); MethodExecution creationCallTree = extractedStructure.getCreationCallTree(); - List srcSideRelatedAliases = aliasCollector.getSrcSideRelatedAliases(); - List dstSideRelatedAliases = aliasCollector.getDstSideRelatedAliases(); +// List srcSideRelatedAliases = aliasCollector.getSrcSideRelatedAliases(); +// List dstSideRelatedAliases = aliasCollector.getDstSideRelatedAliases(); +// List relatedAliases = aliasCollector.getRelatedAliases(); 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) { @@ -70,7 +73,8 @@ // �f���^���o�̌��ʂ����Ƀ\�[�X�R�[�h�𔽓]�\������ DeltaMarkerManager mgr = deltaMarkerView.getDeltaMarkerManager(); - mark(mgr, bottomPoint, srcSideRelatedAliases, dstSideRelatedAliases, coordinator); +// mark(mgr, bottomPoint, relatedAliases, coordinator); + mark(mgr, coordinator, aliasCollector, bottomPoint); deltaMarkerView.update(); } @@ -89,22 +93,43 @@ return null; } - private void mark(DeltaMarkerManager mgr, TracePoint bottomPoint, List srcSideRelatedAliases, List dstSideRelatedAliases, MethodExecution coordinator) { - mgr.markAndOpenJavaFile(bottomPoint, "Bottom", DeltaMarkerManager.BOTTOM_DELTA_MARKER); + private void mark(DeltaMarkerManager mgr, MethodExecution coordinator, DeltaRelatedAliasCollector aliasCollector, TracePoint bottomPoint) { + int srcSideCnt = 1; + int dstSideCnt = 1; mgr.markAndOpenJavaFile(coordinator, -1 , "Coordinator", DeltaMarkerManager.COORDINATOR_DELTA_MARKER); - int cnt = 1; - for (Alias alias: srcSideRelatedAliases) { - String message = String.format("SrcSide%03d", cnt); - mgr.markAndOpenJavaFile(alias, message, DeltaMarkerManager.SRC_SIDE_DELTA_MARKER); - cnt++; + 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.markAndOpenJavaFile(alias, message, DeltaMarkerManager.SRC_SIDE_DELTA_MARKER); + srcSideCnt++; + } else if (side.contains(DeltaRelatedAliasCollector.DST_SIDE)) { + String message = String.format("DstSide%03d", dstSideCnt); + mgr.markAndOpenJavaFile(alias, message, DeltaMarkerManager.DST_SIDE_DELTA_MARKER); + dstSideCnt++; + } } - cnt = 1; - for (Alias alias : dstSideRelatedAliases) { - String message = String.format("DstSide%03d", cnt); - mgr.markAndOpenJavaFile(alias, message, DeltaMarkerManager.DST_SIDE_DELTA_MARKER); - cnt++; - } - } + mgr.markAndOpenJavaFile(bottomPoint, "Bottom", DeltaMarkerManager.BOTTOM_DELTA_MARKER); + } + +// private void mark(DeltaMarkerManager mgr, TracePoint bottomPoint, List srcSideRelatedAliases, List dstSideRelatedAliases, MethodExecution coordinator) { +// mgr.markAndOpenJavaFile(bottomPoint, "Bottom", DeltaMarkerManager.BOTTOM_DELTA_MARKER); +// mgr.markAndOpenJavaFile(coordinator, -1 , "Coordinator", DeltaMarkerManager.COORDINATOR_DELTA_MARKER); +// int cnt = 1; +// for (Alias alias: srcSideRelatedAliases) { +// String message = String.format("SrcSide%03d", cnt); +// mgr.markAndOpenJavaFile(alias, message, DeltaMarkerManager.SRC_SIDE_DELTA_MARKER); +// cnt++; +// } +// cnt = 1; +// for (Alias alias : dstSideRelatedAliases) { +// String message = String.format("DstSide%03d", cnt); +// mgr.markAndOpenJavaFile(alias, message, DeltaMarkerManager.DST_SIDE_DELTA_MARKER); +// cnt++; +// } +// } private void reset() { for (DeltaMarkerView deltaMarkerView : deltaMarkerViews.values()) { diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java index a4989b2..3c1427a 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java @@ -44,62 +44,91 @@ import org.ntlab.traceDebugger.JavaEditorOperator; public class DeltaMarkerManager { - private Map> markers = new HashMap<>(); + private Map> markerIdToMarkers = new HashMap<>(); + private List allMarkers = new ArrayList<>(); 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"; public static final String DST_SIDE_DELTA_MARKER = "org.ntlab.traceDebugger.dstSideDeltaMarker"; public Map> getMarkers() { - return markers; - } - - public List getMarkerList() { - List markerList = new ArrayList<>(); - List list; - list = markers.get(BOTTOM_DELTA_MARKER); - if (list != null) markerList.addAll(list); - list = markers.get(COORDINATOR_DELTA_MARKER); - if (list != null) markerList.addAll(list); - list = markers.get(SRC_SIDE_DELTA_MARKER); - if (list != null) markerList.addAll(list); - list = markers.get(DST_SIDE_DELTA_MARKER); - if (list != null) markerList.addAll(list); - return markerList; + return markerIdToMarkers; } public TreeNode[] getMarkerTreeNodes() { TreeNode[] roots = new TreeNode[] { - new TreeNode("Bottom"), new TreeNode("Coordinator"), - new TreeNode("SrcSide"), - new TreeNode("DstSide") + new TreeNode("Related Aliases"), + new TreeNode("Creation Point (Bottom)") }; - List srcSideTreeNodeList = new ArrayList<>(); - List dstSideTreeNodeList = new ArrayList<>(); - for (Map.Entry> entry : markers.entrySet()) { - String markerId = entry.getKey(); - for (IMarker marker : entry.getValue()) { + List treeNodeList = new ArrayList<>(); + for (IMarker marker : allMarkers) { + try { TreeNode node = new TreeNode(marker); - if (markerId.equals(BOTTOM_DELTA_MARKER)) { - node.setParent(roots[0]); - roots[0].setChildren(new TreeNode[] {node}); - } else if (markerId.equals(COORDINATOR_DELTA_MARKER)) { + String markerType = marker.getType(); + switch (markerType) { + case COORDINATOR_DELTA_MARKER: + roots[0] = node; + break; + case SRC_SIDE_DELTA_MARKER: + case DST_SIDE_DELTA_MARKER: node.setParent(roots[1]); - roots[1].setChildren(new TreeNode[] {node}); - } else if (markerId.equals(SRC_SIDE_DELTA_MARKER)) { - node.setParent(roots[2]); - srcSideTreeNodeList.add(node); - } else if (markerId.equals(DST_SIDE_DELTA_MARKER)) { - node.setParent(roots[3]); - dstSideTreeNodeList.add(node); + treeNodeList.add(node); + break; + case BOTTOM_DELTA_MARKER: + roots[2] = node; + break; } + } catch (CoreException e) { + e.printStackTrace(); } } - roots[2].setChildren(srcSideTreeNodeList.toArray(new TreeNode[srcSideTreeNodeList.size()])); - roots[3].setChildren(dstSideTreeNodeList.toArray(new TreeNode[dstSideTreeNodeList.size()])); + roots[1].setChildren(treeNodeList.toArray(new TreeNode[treeNodeList.size()])); return roots; } + +// public TreeNode[] getMarkerTreeNodes() { +// TreeNode[] roots = new TreeNode[] { +// new TreeNode("Bottom"), +// new TreeNode("Coordinator"), +// new TreeNode("SrcSide"), +// new TreeNode("DstSide") +// }; +// List srcSideTreeNodeList = new ArrayList<>(); +// List dstSideTreeNodeList = new ArrayList<>(); +// for (Map.Entry> entry : markers.entrySet()) { +// String markerId = entry.getKey(); +// for (IMarker marker : entry.getValue()) { +// TreeNode node = new TreeNode(marker); +// if (markerId.equals(BOTTOM_DELTA_MARKER)) { +// roots[0] = node; +// } else if (markerId.equals(COORDINATOR_DELTA_MARKER)) { +// roots[1] = node; +// } else if (markerId.equals(SRC_SIDE_DELTA_MARKER)) { +// node.setParent(roots[2]); +// srcSideTreeNodeList.add(node); +// } else if (markerId.equals(DST_SIDE_DELTA_MARKER)) { +// node.setParent(roots[3]); +// dstSideTreeNodeList.add(node); +// } +// } +// } +// roots[2].setChildren(srcSideTreeNodeList.toArray(new TreeNode[srcSideTreeNodeList.size()])); +// roots[3].setChildren(dstSideTreeNodeList.toArray(new TreeNode[dstSideTreeNodeList.size()])); +// return roots; +// } + + public IMarker getCoordinatorDeltaMarker() { + List markers = markerIdToMarkers.get(COORDINATOR_DELTA_MARKER); + if (markers == null || markers.isEmpty()) return null; + return markers.get(0); + } + + public IMarker getBottomDeltaMarker() { + List markers = markerIdToMarkers.get(BOTTOM_DELTA_MARKER); + if (markers == null || markers.isEmpty()) return null; + return markers.get(0); + } public void markAndOpenJavaFile(Alias alias, String message, String markerId) { IFile file = JavaEditorOperator.findIFile(alias.getMethodExecution()); @@ -110,7 +139,6 @@ public void markAndOpenJavaFile(TracePoint tracePoint, String message, String markerId) { MethodExecution me = tracePoint.getMethodExecution(); Statement statement = tracePoint.getStatement(); - int lineNo = statement.getLineNo(); String objectId = null; String objectType = null; if (statement instanceof FieldUpdate) { @@ -119,17 +147,19 @@ objectType = fu.getContainerClassName() + " -> " + fu.getValueClassName(); } IFile file = JavaEditorOperator.findIFile(me); - IMarker marker = addMarker(me, lineNo, file, message, objectId, objectType, markerId); + IMarker marker = addMarker(tracePoint, file, message, objectId, objectType, markerId); JavaEditorOperator.markAndOpenJavaFile(marker); } public void markAndOpenJavaFile(MethodExecution methodExecution, int lineNo, String message, String markerId) { IFile file = JavaEditorOperator.findIFile(methodExecution); - IMarker marker = addMarker(methodExecution, lineNo, file, message, null, null, markerId); + String objectId = methodExecution.getThisObjId(); + String objectType = methodExecution.getThisClassName(); + IMarker marker = addMarker(methodExecution, lineNo, file, message, objectId, objectType, markerId); JavaEditorOperator.markAndOpenJavaFile(marker); } - public IMarker addMarker(Alias alias, IFile file, String message, String markerId) { + private IMarker addMarker(Alias alias, IFile file, String message, String markerId) { try { IMarker marker = file.createMarker(markerId); Map attributes = new HashMap<>(); @@ -138,6 +168,7 @@ attributes.put(IMarker.TRANSIENT, true); attributes.put("data", alias); attributes.put("objectId", alias.getObjectId()); + attributes.put("objectType", alias.getObjectType()); attributes.put("aliasType", alias.getAliasType()); marker.setAttributes(attributes); addMarker(markerId, marker); @@ -148,7 +179,28 @@ return null; } - public IMarker addMarker(MethodExecution me, int lineNo, IFile file, String message, String objectId, String objectType, String markerId) { + private IMarker addMarker(TracePoint tp, IFile file, String message, String objectId, String objectType, String markerId) { + try { + MethodExecution me = tp.getMethodExecution(); + int lineNo = tp.getStatement().getLineNo(); + IMarker marker = file.createMarker(markerId); + Map attributes = new HashMap<>(); + setAttributesForMethodExecution(attributes, me, file, lineNo, markerId); + attributes.put(IMarker.MESSAGE, message); + attributes.put(IMarker.TRANSIENT, true); + attributes.put("data", tp); + attributes.put("objectId", objectId); + attributes.put("objectType", objectType); + marker.setAttributes(attributes); + addMarker(markerId, marker); + return marker; + } catch (CoreException e) { + e.printStackTrace(); + } + return null; + } + + private IMarker addMarker(MethodExecution me, int lineNo, IFile file, String message, String objectId, String objectType, String markerId) { try { IMarker marker = file.createMarker(markerId); Map attributes = new HashMap<>(); @@ -168,12 +220,13 @@ } private void addMarker(String markerId, IMarker marker) { - List markerList = markers.get(markerId); + List markerList = markerIdToMarkers.get(markerId); if (markerList == null) { markerList = new ArrayList(); - markers.put(markerId, markerList); + markerIdToMarkers.put(markerId, markerList); } markerList.add(marker); + allMarkers.add(marker); } private void setAttributesForAlias(final Map attributes, Alias alias, IFile file, String markerId) { @@ -743,9 +796,10 @@ } public void clearAllMarkers() { - for (List markerList: markers.values()) { + for (List markerList: markerIdToMarkers.values()) { deleteMarkers(markerList); } - markers.clear(); + markerIdToMarkers.clear(); + allMarkers.clear(); } } diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java index 5438190..da1bea1 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java @@ -8,6 +8,9 @@ private List dstSideRelatedAliases = new ArrayList<>(); private List srcSideIdList = new ArrayList<>(); private List dstSideIdList = new ArrayList<>(); + private List relatedAliases = new ArrayList<>(); + public static final String SRC_SIDE = "SrcSide"; + public static final String DST_SIDE = "DstSide"; public DeltaRelatedAliasCollector(String srcId, String dstId) { srcSideIdList.add(srcId); @@ -16,6 +19,7 @@ @Override public void addAlias(Alias alias) { + relatedAliases.add(alias); String objId = alias.getObjectId(); String srcOrDst = ""; if (srcSideIdList.contains(objId) && !(dstSideIdList.contains(objId))) { @@ -65,19 +69,32 @@ } } - public List getSrcSideRelatedAliases() { - return srcSideRelatedAliases; - } - - public List getDstSideRelatedAliases() { - return dstSideRelatedAliases; - } - - public void addSrcSideRelatedAlias(Alias alias) { - srcSideRelatedAliases.add(alias); +// public List getSrcSideRelatedAliases() { +// return srcSideRelatedAliases; +// } +// +// public List getDstSideRelatedAliases() { +// return dstSideRelatedAliases; +// } +// +// public void addSrcSideRelatedAlias(Alias alias) { +// srcSideRelatedAliases.add(alias); +// } +// +// public void addDstSideRelatedAlias(Alias alias) { +// dstSideRelatedAliases.add(alias); +// } + + public List getRelatedAliases() { + return relatedAliases; } - public void addDstSideRelatedAlias(Alias alias) { - dstSideRelatedAliases.add(alias); + public String resolveSideInTheDelta(Alias alias) { + int index; + index = srcSideRelatedAliases.indexOf(alias); + if (index != -1) return SRC_SIDE; + index = dstSideRelatedAliases.indexOf(alias); + if (index != -1) return DST_SIDE; + return ""; } }