diff --git a/src/org/ntlab/traceDebugger/CallTreeModels.java b/src/org/ntlab/traceDebugger/CallTreeModels.java index 248a8f9..b4b2271 100644 --- a/src/org/ntlab/traceDebugger/CallTreeModels.java +++ b/src/org/ntlab/traceDebugger/CallTreeModels.java @@ -28,74 +28,25 @@ callTreeModelsMemo.clear(); } -// public void update(MethodExecution from, MethodExecution to) { -// reset(); -// createCallTreeModels(roots, 0, from, to); -// } -// -// private boolean createCallTreeModels(TreeNode[] nodes, int index, MethodExecution me, final MethodExecution theLast) { -// CallTreeModel callTreeModel = new CallTreeModel(me); -// nodes[index] = new TreeNode(callTreeModel); -// callTreeModelList.add(callTreeModel); -// if (me.equals(theLast)) return true; -// List children = me.getChildren(); -// TreeNode[] childNodes = new TreeNode[children.size()]; -// nodes[index].setChildren(childNodes); -// for (int i = 0; i < children.size(); i++) { -// MethodExecution child = children.get(i); -// boolean isTheLast = createCallTreeModels(childNodes, i, child, theLast); -// childNodes[i].setParent(nodes[index]); -//// if (isTheLast) return true; -// if (isTheLast) { -// for (int j = i + 1; j < children.size(); j++) { -// childNodes[j] = new TreeNode(null); -// } -// return true; -// } -// } -// return false; -// } - public void update(DeltaMarkerManager deltaMarkerManager) { reset(); IMarker coordinatorMarker = deltaMarkerManager.getCoordinatorDeltaMarker(); - List srcSideMarkers = deltaMarkerManager.getMarkers().get(DeltaMarkerManager.SRC_SIDE_DELTA_MARKER); - List dstSideMarkers = deltaMarkerManager.getMarkers().get(DeltaMarkerManager.DST_SIDE_DELTA_MARKER); - IMarker bottomMarker = deltaMarkerManager.getBottomDeltaMarker(); - - MethodExecution coordinatorME = deltaMarkerManager.getMethodExecution(coordinatorMarker); - CallTreeModel coordinator = new CallTreeModel(coordinatorME); - callTreeModelsMemo.put(coordinatorME, coordinator); - if (srcSideMarkers != null) { - for (IMarker srcSideMarker : srcSideMarkers) { - MethodExecution me = deltaMarkerManager.getMethodExecution(srcSideMarker); - CallTreeModel callTreeModel = new CallTreeModel(me); - if (!(callTreeModelsMemo.containsKey(me))) { - callTreeModelsMemo.put(me, callTreeModel); - create(callTreeModel, coordinatorME); + MethodExecution coordinatorME = DeltaMarkerManager.getMethodExecution(coordinatorMarker); + List markersOrderByAdding = deltaMarkerManager.getMarkersByOrder(); + for (IMarker marker : markersOrderByAdding) { + MethodExecution me = DeltaMarkerManager.getMethodExecution(marker); + CallTreeModel callTreeModel = new CallTreeModel(me); + if (!(callTreeModelsMemo.containsKey(me))) { + callTreeModelsMemo.put(me, callTreeModel); + if (!(me.equals(coordinatorME))) { + linkTreeToCoordinator(callTreeModel, coordinatorME); } - } + } } - if (dstSideMarkers != null) { - for (IMarker dstSideMarker : dstSideMarkers) { - MethodExecution me = deltaMarkerManager.getMethodExecution(dstSideMarker); - CallTreeModel callTreeModel = new CallTreeModel(me); - if (!(callTreeModelsMemo.containsKey(me))) { - callTreeModelsMemo.put(me, callTreeModel); - create(callTreeModel, coordinatorME); - } - } - } - MethodExecution bottomME = deltaMarkerManager.getMethodExecution(bottomMarker); - CallTreeModel bottom = new CallTreeModel(bottomME); - if (!(callTreeModelsMemo.containsKey(bottomME))) { - callTreeModelsMemo.put(bottomME, bottom); - create(bottom, coordinatorME); - } - createCallTreeModels(coordinator); + createCallTreeModels(callTreeModelsMemo.get(coordinatorME)); } - private void create(CallTreeModel currentModel, final MethodExecution coordinatorME) { + private void linkTreeToCoordinator(CallTreeModel currentModel, final MethodExecution coordinatorME) { MethodExecution currentME = currentModel.getMethodExecution(); MethodExecution parentME = currentME.getParent(); if (parentME == null) return; @@ -108,17 +59,17 @@ currentModel.setParent(parentModel); parentModel.addChildren(currentModel); if (isNewParentModel && !(parentME.equals(coordinatorME))) { - create(parentModel, coordinatorME); + linkTreeToCoordinator(parentModel, coordinatorME); } } private void createCallTreeModels(CallTreeModel coordinator) { roots = new TreeNode[1]; callTreeModelList.clear(); - create(roots, 0, coordinator, null); + createCallTreeModels(roots, 0, coordinator, null); } - private void create(TreeNode[] nodes, int index, CallTreeModel callTreeModel, TreeNode parent) { + private void createCallTreeModels(TreeNode[] nodes, int index, CallTreeModel callTreeModel, TreeNode parent) { callTreeModelList.add(callTreeModel); nodes[index] = new TreeNode(callTreeModel); nodes[index].setParent(parent); @@ -127,7 +78,7 @@ nodes[index].setChildren(childNodes); for (int i = 0; i < childNodes.length; i++) { CallTreeModel child = children.get(i); - create(childNodes, i, child, nodes[index]); + createCallTreeModels(childNodes, i, child, nodes[index]); } } } diff --git a/src/org/ntlab/traceDebugger/CallTreeView.java b/src/org/ntlab/traceDebugger/CallTreeView.java index 8fdd670..b0381f2 100644 --- a/src/org/ntlab/traceDebugger/CallTreeView.java +++ b/src/org/ntlab/traceDebugger/CallTreeView.java @@ -104,12 +104,6 @@ this.subId = subId; } -// public void update(MethodExecution from, MethodExecution to) { -// callTreeModels.update(from, to); -// viewer.setInput(callTreeModels.getCallTreeModels()); -// viewer.expandAll(); -// } - public void update(DeltaMarkerManager deltaMarkerManager) { callTreeModels.update(deltaMarkerManager); viewer.setInput(callTreeModels.getCallTreeModels()); @@ -131,7 +125,6 @@ public void reset() { callTreeModels.reset(); -// callTreeModels.setInput(); viewer.setInput(callTreeModels.getCallTreeModelList()); viewer.refresh(); } diff --git a/src/org/ntlab/traceDebugger/DebuggingController.java b/src/org/ntlab/traceDebugger/DebuggingController.java index f8e1d24..5c9f800 100644 --- a/src/org/ntlab/traceDebugger/DebuggingController.java +++ b/src/org/ntlab/traceDebugger/DebuggingController.java @@ -62,7 +62,9 @@ } // InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void Company.pay(Money,Person)", null); // InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void worstCase.P.setM(worstCase.M)", null); - InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "public void org.jhotdraw.draw.DefaultDrawingView.addToSelection(org.jhotdraw.draw.Figure)", null); +// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "public void org.jhotdraw.draw.DefaultDrawingView.addToSelection(org.jhotdraw.draw.Figure)", null); +// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "protected void org.tigris.gef.base.SelectionManager.addFig(org.tigris.gef.presentation.Fig)", null); + InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "public static org.tigris.gef.base.Selection org.tigris.gef.base.SelectionManager.makeSelectionFor(org.tigris.gef.presentation.Fig)", null); // InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void E.setC(C)", null); // InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void _arraySample.D.setC(_arraySample.C)", null); if (inputDialog.open() != InputDialog.OK) return false; @@ -164,7 +166,7 @@ MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); return false; } - refresh(null, debuggingTp, true); + refresh(previousTp, debuggingTp, true); return true; } diff --git a/src/org/ntlab/traceDebugger/JavaEditorOperator.java b/src/org/ntlab/traceDebugger/JavaEditorOperator.java index 9dace41..5a2802c 100644 --- a/src/org/ntlab/traceDebugger/JavaEditorOperator.java +++ b/src/org/ntlab/traceDebugger/JavaEditorOperator.java @@ -35,8 +35,6 @@ import org.ntlab.traceAnalysisPlatform.tracer.trace.TraceJSON; public class JavaEditorOperator { -// private static List markers = new ArrayList<>(); - private static String previousJavaProjectPath = ""; /** * �����œn����meCaller���ɂ���methodExecution����`����Ă���N���X�̃\�[�X�R�[�h��Ώ�Eclipse�̃G�f�B�^�ŊJ������ @@ -77,7 +75,6 @@ IDocument document = provider.getDocument(editor.getEditorInput()); try { editor.selectAndReveal(document.getLineOffset(lineNo - 1), document.getLineLength(lineNo - 1)); -// tmp(); } catch (BadLocationException e) { e.printStackTrace(); } @@ -91,92 +88,16 @@ } catch (PartInitException e) { e.printStackTrace(); } - } - -// public static void markAndOpenJavaFile(Alias alias, int lineNo, String markerId) { -// try { -// IFile file = findIFile(alias.getMethodExecution()); -// DeltaMarkerManager mgr = DeltaMarkerManager.getInstance(); -// IMarker marker = mgr.addMarker(alias, file, lineNo, markerId); -// IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); -// IDE.openEditor(page, marker); -// } catch (PartInitException e) { -// e.printStackTrace(); -// } -// } + } -// public static void markAndOpenJavaFile(MethodExecution methodExecution, int lineNo, String findString, String message, String markerId) { -// IFile file = findIFile(methodExecution); -// try { -// FileEditorInput input = new FileEditorInput(file); -// FileDocumentProvider provider = new FileDocumentProvider(); -// provider.connect(input); -// IDocument document = provider.getDocument(input); -// FindReplaceDocumentAdapter findAdapter = new FindReplaceDocumentAdapter(document); -// IMarker marker = file.createMarker(markerId); -// Map attributes = new HashMap<>(); -// attributes.put(IMarker.MESSAGE, message); -// attributes.put(IMarker.TRANSIENT, true); -// if (lineNo > 1) { -// // ����s���̎w�肵�������񕔕����n�C���C�g (���݂��Ȃ��ꍇ�͓���s�S�̂��n�C���C�g) -// IRegion lineRegion = document.getLineInformation(lineNo - 1); -// IRegion findStringRegion = findAdapter.find(lineRegion.getOffset(), findString, true, true, true, false); -// if (findStringRegion != null) { -// attributes.put(IMarker.CHAR_START, findStringRegion.getOffset()); -// attributes.put(IMarker.CHAR_END, findStringRegion.getOffset() + findStringRegion.getLength()); -// } else { -// attributes.put(IMarker.CHAR_START, lineRegion.getOffset()); -// attributes.put(IMarker.CHAR_END, lineRegion.getOffset() + lineRegion.getLength()); -// } -// attributes.put(IMarker.LINE_NUMBER, lineNo); -// } else { -// // ���\�b�h�V�O�l�`�����n�C���C�g -// IType type = findIType(methodExecution); -// IMethod method = findIMethod(methodExecution, type); -// int start = method.getSourceRange().getOffset(); -// int end = start + method.getSource().indexOf(")") + 1; -// attributes.put(IMarker.CHAR_START, start); -// attributes.put(IMarker.CHAR_END, end); -// } -// -// marker.setAttributes(attributes); -// markers.add(marker); -// IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); -// IDE.openEditor(page, marker); -// } catch (CoreException | BadLocationException e) { -// e.printStackTrace(); -// } -// } - -// private static void tmp() { -// IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager(); -// IBreakpoint[] bps = mgr.getBreakpoints(); -// for (IBreakpoint bp : bps) { -// IMarker marker = bp.getMarker(); -// int lineNo = marker.getAttribute(IMarker.LINE_NUMBER, -1); -// String name = marker.getAttribute("org.eclipse.jdt.debug.core.typeName", ""); -//// TraceJSON trace = (TraceJSON)TraceDebuggerPlugin.getAnalyzer().getTrace(); -//// ClassInfo classInfo = trace.getClassInfo(name); -//// if (classInfo == null) continue; -// -// -//// name = mgr.getTypeName(bp); -// try { -// for (Map.Entry entry: marker.getAttributes().entrySet()) { -// System.out.println(entry.getKey() + ": " + entry.getValue()); -// } -// } catch (CoreException e) { -// e.printStackTrace(); -// } -// System.out.println("Name: " + name + ", lineNo: " + lineNo); -// } -// } - public static IFile findIFile(MethodExecution methodExecution) { TraceJSON trace = (TraceJSON)TraceDebuggerPlugin.getAnalyzer().getTrace(); String declaringClassName = methodExecution.getDeclaringClassName(); declaringClassName = declaringClassName.replace(".", ""); - String tmp = trace.getClassInfo(declaringClassName).getPath(); + ClassInfo info = trace.getClassInfo(declaringClassName); + if (info == null) return null; + + String tmp = info.getPath(); IWorkspace workspace = ResourcesPlugin.getWorkspace(); IProject[] projects = workspace.getRoot().getProjects(); String projectName = ""; @@ -184,7 +105,6 @@ boolean hasFoundSrcForderName = false; for (IProject project : projects) { projectName = project.getFullPath().toString(); -// if (tmp.contains(projectName + "/")) break; if (!(tmp.contains(projectName + "/"))) continue; IJavaProject javaProject = JavaCore.create(project); try { @@ -200,7 +120,8 @@ } if (hasFoundSrcForderName) break; } - tmp = tmp.replace(tmp.substring(0, tmp.lastIndexOf(projectName)), ""); +// tmp = tmp.replace(tmp.substring(0, tmp.lastIndexOf(projectName)), ""); + tmp = tmp.replace(tmp.substring(0, tmp.indexOf(projectName)), ""); tmp = tmp.replace("/bin", srcForderName.substring(srcForderName.lastIndexOf("/"))); tmp = tmp.replace(".class", ".java"); String filePath = tmp; @@ -208,21 +129,6 @@ return ResourcesPlugin.getWorkspace().getRoot().getFile(path); } -// public static void deleteMarkers(String markerId) { -// Iterator it = markers.iterator(); -// while (it.hasNext()) { -// IMarker marker = it.next(); -// try { -// if (marker.getType().equals(markerId)) { -// marker.delete(); -// it.remove(); -// } -// } catch (CoreException e) { -// e.printStackTrace(); -// } -// } -// } - public static IType findIType(MethodExecution methodExecution) { String declaringClassName = methodExecution.getDeclaringClassName(); declaringClassName = declaringClassName.replace(".", ""); @@ -231,45 +137,20 @@ public static IType findIType(MethodExecution methodExecution, String declaringClassName) { String projectPath = getLoaderPath(methodExecution, declaringClassName); - IType type = null; +// if (projectPath == null) projectPath = previousJavaProjectPath; if (projectPath != null) { IJavaProject javaProject = findJavaProject(projectPath); if (javaProject != null) { - previousJavaProjectPath = projectPath; +// previousJavaProjectPath = projectPath; try { - type = javaProject.findType(declaringClassName); + return javaProject.findType(declaringClassName); } catch (JavaModelException e) { e.printStackTrace(); } - } - } else { - IJavaProject javaProject = findJavaProject(previousJavaProjectPath); - if (javaProject != null) { - try { - type = javaProject.findType(declaringClassName); - } catch (JavaModelException e) { - e.printStackTrace(); - } - } + } } - return type; + return null; } - -// public static IType findIType(MethodExecution methodExecution, String declaringClassName) { -// String projectPath = getLoaderPath(methodExecution, declaringClassName); -// IType type = null; -// if (projectPath != null) { -// IJavaProject javaProject = findJavaProject(projectPath); -// if (javaProject != null) { -// try { -// type = javaProject.findType(declaringClassName); -// } catch (JavaModelException e) { -// e.printStackTrace(); -// } -// } -// } -// return type; -// } private static String getLoaderPath(MethodExecution methodExecution, String declaringClassName) { TraceJSON traceJSON = (TraceJSON)TraceDebuggerPlugin.getAnalyzer().getTrace(); diff --git a/src/org/ntlab/traceDebugger/TracePointsView.java b/src/org/ntlab/traceDebugger/TracePointsView.java index 1be0a49..516a327 100644 --- a/src/org/ntlab/traceDebugger/TracePointsView.java +++ b/src/org/ntlab/traceDebugger/TracePointsView.java @@ -202,8 +202,10 @@ variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkers); } IMarker coordinatorMarker = deltaMarkerManager.getCoordinatorDeltaMarker(); - MethodExecution coordinatorME = deltaMarkerManager.getMethodExecution(coordinatorMarker); - callStackView.highlight(coordinatorME); + if (coordinatorMarker != null) { + MethodExecution coordinatorME = DeltaMarkerManager.getMethodExecution(coordinatorMarker); + callStackView.highlight(coordinatorME); + } CallTreeView callTreeView = ((CallTreeView)getOtherView(CallTreeView.ID)); callTreeView.highlight(currentME); } diff --git a/src/org/ntlab/traceDebugger/VariableView.java b/src/org/ntlab/traceDebugger/VariableView.java index 6bdf355..9dbcd18 100644 --- a/src/org/ntlab/traceDebugger/VariableView.java +++ b/src/org/ntlab/traceDebugger/VariableView.java @@ -159,10 +159,12 @@ deltaActionForCollection = new Action() { @Override public void run() { - InputDialog inputContainerIdDialog = new InputDialog(null, "Extract Delta for Collection", "Input cotainer id", "87478208", null); +// InputDialog inputContainerIdDialog = new InputDialog(null, "Extract Delta for Collection", "Input cotainer id", "87478208", null); + InputDialog inputContainerIdDialog = new InputDialog(null, "Extract Delta for Collection", "Input cotainer id", "155140910", null); if (inputContainerIdDialog.open() != InputDialog.OK) return; String containerId = inputContainerIdDialog.getValue(); - InputDialog inputContainerTypeDialog = new InputDialog(null, "Extract Delta for Collection", "Input cotainer type", "java.util.LinkedHashSet", null); +// InputDialog inputContainerTypeDialog = new InputDialog(null, "Extract Delta for Collection", "Input cotainer type", "java.util.LinkedHashSet", null); + InputDialog inputContainerTypeDialog = new InputDialog(null, "Extract Delta for Collection", "Input cotainer type", "java.util.ArrayList", null); if (inputContainerTypeDialog.open() != InputDialog.OK) return; String containerType = inputContainerTypeDialog.getValue(); String valueId = selectedVariable.getId(); diff --git a/src/org/ntlab/traceDebugger/Variables.java b/src/org/ntlab/traceDebugger/Variables.java index a54b53b..82f0dda 100644 --- a/src/org/ntlab/traceDebugger/Variables.java +++ b/src/org/ntlab/traceDebugger/Variables.java @@ -66,12 +66,18 @@ updateRootThisState(me, to, isReturned); updateArgsState(me, to, isReturned); } - + private void updateReturnValue(TracePoint from, TracePoint to, boolean isReturned) { Statement statement = from.getStatement(); + ObjectReference ref = null; if (statement instanceof MethodInvocation) { MethodInvocation mi = (MethodInvocation)statement; - ObjectReference ref = mi.getCalledMethodExecution().getReturnValue(); + ref = mi.getCalledMethodExecution().getReturnValue(); + } else if (isReturned) { + MethodExecution me = from.getMethodExecution(); + ref = me.getReturnValue(); + } + if (ref != null) { String returnValueClassName = ref.getActualType(); if (returnValueClassName.equals("void")) return; String returnValueId = ref.getId(); @@ -79,10 +85,37 @@ String thisClassName = to.getMethodExecution().getThisClassName(); Variable variable = new Variable("Return", thisObjId, thisClassName, returnValueClassName, returnValueId, from, isReturned); roots.add(variable); - variable.createNextHierarchyState(); + 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 2b3b3e4..97be91e 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java @@ -65,23 +65,23 @@ 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(); - } + 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(); @@ -114,21 +114,6 @@ } return null; } - -// private TracePoint findTracePoint(Reference reference, MethodExecution methodExecution, long beforeTime) { -// List statements = methodExecution.getStatements(); -// for (int i = statements.size() - 1; i >= 0; i--) { -// Statement statement = statements.get(i); -// if (!(statement instanceof FieldUpdate)) continue; -// if (statement.getTimeStamp() > beforeTime) continue; -// FieldUpdate fu = (FieldUpdate)statement; -// if (fu.getContainerObjId().equals(reference.getSrcObjectId()) -// && fu.getValueObjId().equals(reference.getDstObjectId())) { -// return new TracePoint(methodExecution, i); -// } -// } -// return null; -// } private void mark(DeltaMarkerManager mgr, MethodExecution coordinator, DeltaRelatedAliasCollector aliasCollector, TracePoint bottomPoint, Reference creationReference) { int srcSideCnt = 1; diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java index b61e63f..aa7622d 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java @@ -262,7 +262,7 @@ } aliasCollector.addAlias(aliasList.get(removeId)); aliasCollector.changeTrackingObject(removeId, thisObjectId); - aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, aliasList.get(removeId).getOccurrencePoint())); + if (aliasList.get(removeId) != null) aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, aliasList.get(removeId).getOccurrencePoint())); } } } diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java index 9fde930..c4c91c1 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java @@ -40,7 +40,7 @@ public class DeltaMarkerManager { private Map> markerIdToMarkers = new HashMap<>(); - private List allMarkers = new ArrayList<>(); + private List markersByOrder = 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"; @@ -54,6 +54,10 @@ return markerIdToMarkers; } + public List getMarkersByOrder() { + return markersByOrder; + } + public TreeNode[] getMarkerTreeNodes() { TreeNode[] roots = new TreeNode[] { new TreeNode("Coordinator"), @@ -61,7 +65,7 @@ new TreeNode("Creation Point") }; List treeNodeList = new ArrayList<>(); - for (IMarker marker : allMarkers) { + for (IMarker marker : markersByOrder) { try { TreeNode node = new TreeNode(marker); String markerType = marker.getType(); @@ -97,8 +101,8 @@ if (markers == null || markers.isEmpty()) return null; return markers.get(0); } - - public MethodExecution getMethodExecution(IMarker deltaMarker) { + + public static MethodExecution getMethodExecution(IMarker deltaMarker) { try { Object data = deltaMarker.getAttribute(DELTA_MARKER_ATR_DATA); if (data instanceof MethodExecution) { @@ -118,8 +122,10 @@ public void markAndOpenJavaFileForAlias(Alias alias, String message, String markerId) { IFile file = JavaEditorOperator.findIFile(alias.getMethodExecution()); - IMarker marker = addMarker(alias, file, message, markerId); - JavaEditorOperator.markAndOpenJavaFile(marker); + if (file != null) { + IMarker marker = addMarkerForAlias(alias, file, message, markerId); + JavaEditorOperator.markAndOpenJavaFile(marker); + } } public void markAndOpenJavaFileForCreationPoint(TracePoint creationPoint, Reference reference, String message, String markerId) { @@ -127,23 +133,30 @@ String objectId = reference.getSrcObjectId() + " -> " + reference.getDstObjectId(); String objectType = reference.getSrcClassName() + " -> " + reference.getDstClassName(); IFile file = JavaEditorOperator.findIFile(me); - IMarker marker = addMarkerForCreationPoint(creationPoint, file, message, objectId, objectType, markerId); - JavaEditorOperator.markAndOpenJavaFile(marker); + if (file != null) { + IMarker marker = addMarkerForCreationPoint(creationPoint, file, message, objectId, objectType, markerId); + JavaEditorOperator.markAndOpenJavaFile(marker); + } } public void markAndOpenJavaFileForCoordinator(MethodExecution methodExecution, String message, String markerId) { IFile file = JavaEditorOperator.findIFile(methodExecution); - String objectId = methodExecution.getThisObjId(); - String objectType = methodExecution.getThisClassName(); - IMarker marker = addMarkerForCoordinator(methodExecution, file, message, objectId, objectType, markerId); - JavaEditorOperator.markAndOpenJavaFile(marker); + if (file != null) { + String objectId = methodExecution.getThisObjId(); + String objectType = methodExecution.getThisClassName(); + IMarker marker = addMarkerForCoordinator(methodExecution, file, message, objectId, objectType, markerId); + JavaEditorOperator.markAndOpenJavaFile(marker); + } } - private IMarker addMarker(Alias alias, IFile file, String message, String markerId) { + private IMarker addMarkerForAlias(Alias alias, IFile file, String message, String markerId) { try { IMarker marker = file.createMarker(markerId); Map attributes = new HashMap<>(); setAttributesForAlias(attributes, alias, file, markerId); + if (!(attributes.containsKey(IMarker.LINE_NUMBER))) { + attributes.put(IMarker.LINE_NUMBER, alias.getLineNo() + " (no marker)"); + } attributes.put(IMarker.MESSAGE, message); attributes.put(IMarker.TRANSIENT, true); attributes.put(DELTA_MARKER_ATR_DATA, alias); @@ -166,6 +179,7 @@ IMarker marker = file.createMarker(markerId); Map attributes = new HashMap<>(); setAttributesForCreationPoint(attributes, me, file, lineNo, markerId); + if (!(attributes.containsKey(IMarker.LINE_NUMBER))) attributes.put(IMarker.LINE_NUMBER, tp.getStatement().getLineNo()); attributes.put(IMarker.MESSAGE, message); attributes.put(IMarker.TRANSIENT, true); attributes.put(DELTA_MARKER_ATR_DATA, tp); @@ -206,7 +220,7 @@ markerIdToMarkers.put(markerId, markerList); } markerList.add(marker); - allMarkers.add(marker); + markersByOrder.add(marker); } private void setAttributesForAlias(final Map attributes, Alias alias, IFile file, String markerId) { @@ -246,6 +260,7 @@ src1 = src1.substring(0, src1.lastIndexOf("\n")); String src1Head = src1.substring(0, src1.indexOf(")") + 1); src1Head = src1Head.replaceAll(" |\t|\r|\n", ""); + src1Head = src1Head.substring(src1Head.indexOf("*/") + 2); // note: �擪�̃R�����g�����O�� String src2 = method.getSource().replaceAll(" |\t|\r|\n", ""); return src2.contains(src1Head); } catch (JavaModelException e) { @@ -361,7 +376,12 @@ @Override public boolean visit(org.eclipse.jdt.core.dom.ReturnStatement node) { int lineNo = cUnit.getLineNumber(node.getStartPosition()); - int start = node.getExpression().getStartPosition(); + if (lineNo != alias.getLineNo()) return true; + Expression expression = node.getExpression(); + int start = node.getStartPosition(); + if (expression != null) { + start = node.getExpression().getStartPosition(); + } int end = start; if (source.startsWith("this.", start)) { end = start + "this".length(); @@ -370,7 +390,19 @@ attributes.put(IMarker.CHAR_END, end); attributes.put(IMarker.LINE_NUMBER, lineNo); return false; - } + } +// @Override +// public boolean visit(org.eclipse.jdt.core.dom.VariableDeclarationStatement node) { +// int lineNo = cUnit.getLineNumber(node.getStartPosition()); +// int lineNo2 = fa.getLineNo(); +// String name1 = node.toString(); +// String name2 = fa.getFieldName(); +// System.out.println(ASTNode.nodeClassForType(node.getNodeType())); +// System.out.println("name1: " + name1 + ", name2: " + name2); +// System.out.println("line1: " + lineNo + ", line2: " + lineNo2); +// System.out.println(); +// return true; +// } }; } else if (statement instanceof MethodInvocation) { final MethodInvocation mi = (MethodInvocation)statement; @@ -403,7 +435,8 @@ String name1 = node.toString(); name1 = name1.substring("new ".length(), name1.indexOf("(") + 1); String name2 = calledMe.getCallerSideSignature(); - name2 = name2.substring(name2.lastIndexOf(".") + 1, name2.indexOf("(") + 1); + name2 = name2.substring(0, name2.indexOf("(") + 1); + name2 = name2.substring(name2.lastIndexOf(".") + 1); if (!(name1.equals(name2))) return true; int start = node.getStartPosition(); int end = start; // note: �R���X�g���N�^�Ăяo���ɑΉ�����this�̓R�[�h���ɂ͏o�Ă��Ȃ����ߒ���0�̃}�[�J�[�ɂ��� @@ -481,7 +514,8 @@ String name1 = node.toString(); name1 = name1.substring("new ".length(), name1.indexOf("(") + 1); String name2 = calledMe.getCallerSideSignature(); - name2 = name2.substring(name2.lastIndexOf(".") + 1, name2.indexOf("(") + 1); + name2 = name2.substring(0, name2.indexOf("(") + 1); + name2 = name2.substring(name2.lastIndexOf(".") + 1); if (!(name1.equals(name2))) return true; int start = node.getStartPosition(); int end = start + node.getLength(); @@ -572,14 +606,17 @@ attributes.put(IMarker.LINE_NUMBER, lineNo); return false; } - @Override public boolean visit(org.eclipse.jdt.core.dom.ReturnStatement node) { int lineNo = cUnit.getLineNumber(node.getStartPosition()); + if (lineNo != alias.getLineNo()) return true; Expression expression = node.getExpression(); String fieldName = fa.getFieldName(); fieldName = fieldName.substring(fieldName.lastIndexOf(".") + 1); - int start = expression.getStartPosition(); + int start = node.getStartPosition(); + if (expression != null) { + start = expression.getStartPosition(); + } int end = start + fieldName.length(); attributes.put(IMarker.CHAR_START, start); attributes.put(IMarker.CHAR_END, end); @@ -838,6 +875,6 @@ deleteMarkers(markerList); } markerIdToMarkers.clear(); - allMarkers.clear(); + markersByOrder.clear(); } }