diff --git a/src/org/ntlab/traceDebugger/CallStackViewRelatedDelta.java b/src/org/ntlab/traceDebugger/CallStackViewRelatedDelta.java index ffa8c34..9aa0b9f 100644 --- a/src/org/ntlab/traceDebugger/CallStackViewRelatedDelta.java +++ b/src/org/ntlab/traceDebugger/CallStackViewRelatedDelta.java @@ -55,9 +55,10 @@ String calleeClassName = callee.getThisClassName(); String calleeId = callee.getThisObjId(); TracePoint before = callee.getCallerTracePoint(); - Variable variable = new Variable("tmp", callerClassName, callerId, calleeClassName, calleeId, before, false); +// Variable variable = new Variable("tmp", callerClassName, callerId, calleeClassName, calleeId, before, false); DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.createNewView(DeltaMarkerView.ID, IWorkbenchPage.VIEW_ACTIVATE); - newDeltaMarkerView.extractDelta(variable, false); +// newDeltaMarkerView.extractDelta(variable, false); + newDeltaMarkerView.extractDeltaForThisToAnother(callerId, callerClassName, calleeId, calleeClassName, before); } } }; diff --git a/src/org/ntlab/traceDebugger/DeltaMarkerView.java b/src/org/ntlab/traceDebugger/DeltaMarkerView.java index ecc1bb7..55311ce 100644 --- a/src/org/ntlab/traceDebugger/DeltaMarkerView.java +++ b/src/org/ntlab/traceDebugger/DeltaMarkerView.java @@ -108,12 +108,6 @@ viewer.getControl().setFocus(); } - public void update() { - viewer.setInput(deltaMarkerManager.getMarkerTreeNodes()); - viewer.expandAll(); - viewer.refresh(); - } - public DeltaMarkerManager getDeltaMarkerManager() { return deltaMarkerManager; } @@ -144,26 +138,20 @@ try { Object obj = marker.getAttribute(DeltaMarkerManager.DELTA_MARKER_ATR_DATA); TracePoint jumpPoint; - MethodExecution selectionME; boolean isReturned = false; if (obj instanceof Alias) { Alias alias = (Alias)obj; jumpPoint = alias.getOccurrencePoint(); - selectionME = jumpPoint.getMethodExecution(); Alias.AliasType type = alias.getAliasType(); isReturned = type.equals(AliasType.METHOD_INVOCATION) || type.equals(AliasType.CONSTRACTOR_INVOCATION); } else if (obj instanceof TracePoint) { jumpPoint = (TracePoint)obj; - selectionME = jumpPoint.getMethodExecution(); } else { jumpPoint = coordinatorPoint; - selectionME = coordinatorPoint.getMethodExecution(); } controller.jumpToTheTracePoint(jumpPoint, isReturned); IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IDE.openEditor(page, marker); -// CallTreeView callTreeView = ((CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID)); -// callTreeView.highlight(selectionME); CallStackView callStackView = (CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID); callStackView.highlight(coordinatorPoint.getMethodExecution()); VariableViewRelatedDelta variableView = (VariableViewRelatedDelta)TraceDebuggerPlugin.getActiveView(VariableViewRelatedDelta.ID); @@ -173,34 +161,75 @@ } } } - - public void extractDelta(Variable variable, boolean isContainerToComponent) { + + public void extractDeltaForContainerToComponent(Variable variable) { AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); if (analyzer instanceof DeltaExtractionAnalyzer) { DeltaExtractionAnalyzer deltaAnalyzer = (DeltaExtractionAnalyzer)analyzer; - if (isContainerToComponent) { - deltaMarkerManager = deltaAnalyzer.extractDeltaForContainerToComponent(variable); - } else { - deltaMarkerManager = deltaAnalyzer.extractDeltaForThisToAnother(variable); - } + deltaMarkerManager = deltaAnalyzer.extractDeltaForContainerToComponent(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); - VariableViewRelatedDelta variableView = (VariableViewRelatedDelta)(TraceDebuggerPlugin.getActiveView(VariableViewRelatedDelta.ID)); - variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); - CallStackView callStackView = (CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID); - callStackView.highlight(coordinatorME); - CallTreeView callTreeView = (CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID); - callTreeView.update(deltaMarkerManager); - callTreeView.highlight(bottomME); - TracePointsView tracePointsView = (TracePointsView)TraceDebuggerPlugin.getActiveView(TracePointsView.ID); - tracePointsView.addTracePoint(creationPoint); + updateAfterExtractingDelta(); } } + + public void extractDeltaForThisToAnother(String thisId, String thisClassName, String anotherId, String anotherClassName, TracePoint before) { + AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); + if (analyzer instanceof DeltaExtractionAnalyzer) { + DeltaExtractionAnalyzer deltaAnalyzer = (DeltaExtractionAnalyzer)analyzer; + deltaMarkerManager = deltaAnalyzer.extractDeltaForThisToAnother(thisId, thisClassName, anotherId, anotherClassName, before); + deltaMarkerManager.createMarkerAndOpenJavaFileForAll(); // �f���^���o�̌��ʂ����Ƀ\�[�X�R�[�h�𔽓]�\������ + updateAfterExtractingDelta(); + } + } + + private void updateAfterExtractingDelta() { + viewer.setInput(deltaMarkerManager.getMarkerTreeNodes()); + viewer.expandAll(); + viewer.refresh(); + TracePoint coordinatorPoint = getCoordinatorPoint(); + TracePoint creationPoint = getCreationPoint(); + MethodExecution coordinatorME = coordinatorPoint.getMethodExecution(); + MethodExecution bottomME = creationPoint.getMethodExecution(); + DebuggingController controller = DebuggingController.getInstance(); + controller.jumpToTheTracePoint(creationPoint, false); + VariableViewRelatedDelta variableView = (VariableViewRelatedDelta)(TraceDebuggerPlugin.getActiveView(VariableViewRelatedDelta.ID)); + variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); + CallStackView callStackView = (CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID); + callStackView.highlight(coordinatorME); + CallTreeView callTreeView = (CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID); + callTreeView.update(deltaMarkerManager); + callTreeView.highlight(bottomME); + TracePointsView tracePointsView = (TracePointsView)TraceDebuggerPlugin.getActiveView(TracePointsView.ID); + tracePointsView.addTracePoint(creationPoint); + } + +// 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); +// VariableViewRelatedDelta variableView = (VariableViewRelatedDelta)(TraceDebuggerPlugin.getActiveView(VariableViewRelatedDelta.ID)); +// variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); +// CallStackView callStackView = (CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID); +// callStackView.highlight(coordinatorME); +// CallTreeView callTreeView = (CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID); +// callTreeView.update(deltaMarkerManager); +// callTreeView.highlight(bottomME); +// TracePointsView tracePointsView = (TracePointsView)TraceDebuggerPlugin.getActiveView(TracePointsView.ID); +// tracePointsView.addTracePoint(creationPoint); +// } +// } } diff --git a/src/org/ntlab/traceDebugger/VariableViewRelatedDelta.java b/src/org/ntlab/traceDebugger/VariableViewRelatedDelta.java index 27d7739..f9b9546 100644 --- a/src/org/ntlab/traceDebugger/VariableViewRelatedDelta.java +++ b/src/org/ntlab/traceDebugger/VariableViewRelatedDelta.java @@ -92,7 +92,8 @@ @Override public void run() { DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.createNewView(DeltaMarkerView.ID, IWorkbenchPage.VIEW_ACTIVATE); - newDeltaMarkerView.extractDelta(selectedVariable, true); +// newDeltaMarkerView.extractDelta(selectedVariable, true); + newDeltaMarkerView.extractDeltaForContainerToComponent(selectedVariable); } }; deltaActionForContainerToComponent.setText("Extract Delta"); @@ -101,8 +102,21 @@ deltaActionForThisToAnother = new Action() { @Override public void run() { + TracePoint before = selectedVariable.getBeforeTracePoint(); + String thisId = before.getMethodExecution().getThisObjId(); + String thisClassName = before.getMethodExecution().getThisClassName(); + String anotherId; + String anotherClassName; + if (selectedVariable.getVariableType().isContainerSide()) { + anotherId = selectedVariable.getContainerId(); + anotherClassName = selectedVariable.getContainerClassName(); + } else { + anotherId = selectedVariable.getValueId(); + anotherClassName = selectedVariable.getValueClassName(); + } DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)TraceDebuggerPlugin.createNewView(DeltaMarkerView.ID, IWorkbenchPage.VIEW_ACTIVATE); - newDeltaMarkerView.extractDelta(selectedVariable, false); +// newDeltaMarkerView.extractDelta(selectedVariable, false); + newDeltaMarkerView.extractDeltaForThisToAnother(thisId, thisClassName, anotherId, anotherClassName, before); } }; deltaActionForThisToAnother.setText("Extract Delta"); @@ -161,7 +175,8 @@ String containerClassName = selectedVariable.getContainerClassName(); if (containerId != null && containerClassName != null) { containerClassName = containerClassName.substring(containerClassName.lastIndexOf(".") + 1); - String textForContainerToComponent = String.format("Extract Delta (%s: %s �� %s: %s)", containerId, containerClassName, valueId, valueClassName); +// String textForContainerToComponent = String.format("Extract Delta (%s: %s �� %s: %s)", containerId, containerClassName, valueId, valueClassName); + String textForContainerToComponent = String.format("Extract Delta [ %s (id = %s) -> %s (id = %s) ]", containerClassName, containerId, valueClassName, valueId); deltaActionForContainerToComponent.setText(textForContainerToComponent); deltaActionForContainerToComponent.setToolTipText(textForContainerToComponent); return true; @@ -171,17 +186,26 @@ return false; } } - + private boolean updateDeltaActionForThisToAnotherTexts(Variable variable) { - String valueId = selectedVariable.getValueId(); - String valueClassName = selectedVariable.getValueClassName(); - valueClassName = valueClassName.substring(valueClassName.lastIndexOf(".") + 1); + VariableType variableType = variable.getVariableType(); + String anotherId; + String anotherClassName; + if (variableType.isContainerSide()) { + anotherId = selectedVariable.getContainerId(); + anotherClassName = selectedVariable.getContainerClassName(); + } else { + anotherId = selectedVariable.getValueId(); + anotherClassName = selectedVariable.getValueClassName(); + } + anotherClassName = anotherClassName.substring(anotherClassName.lastIndexOf(".") + 1); TracePoint before = selectedVariable.getBeforeTracePoint(); String thisId = before.getMethodExecution().getThisObjId(); String thisClassName = before.getMethodExecution().getThisClassName(); if (thisId != null && thisClassName != null) { - thisClassName = thisClassName.substring(thisClassName.lastIndexOf(".") + 1); - String textForThisToAnother = String.format("Extract Delta (%s: %s �� %s: %s)", thisId, thisClassName, valueId, valueClassName); + thisClassName = thisClassName.substring(thisClassName.lastIndexOf(".") + 1); +// String textForThisToAnother = String.format("Extract Delta (%s: %s �� %s: %s)", thisId, thisClassName, anotherId, anotherClassName); + String textForThisToAnother = String.format("Extract Delta [ %s (id = %s) -> %s (id = %s) ]", thisClassName, thisId, anotherClassName, anotherId); deltaActionForThisToAnother.setText(textForThisToAnother); deltaActionForThisToAnother.setToolTipText(textForThisToAnother); return true; @@ -191,6 +215,26 @@ return false; } } + +// private boolean updateDeltaActionForThisToAnotherTexts(Variable variable) { +// String valueId = selectedVariable.getValueId(); +// String valueClassName = selectedVariable.getValueClassName(); +// valueClassName = valueClassName.substring(valueClassName.lastIndexOf(".") + 1); +// TracePoint before = selectedVariable.getBeforeTracePoint(); +// String thisId = before.getMethodExecution().getThisObjId(); +// String thisClassName = before.getMethodExecution().getThisClassName(); +// if (thisId != null && thisClassName != null) { +// thisClassName = thisClassName.substring(thisClassName.lastIndexOf(".") + 1); +// String textForThisToAnother = String.format("Extract Delta (%s: %s �� %s: %s)", thisId, thisClassName, valueId, valueClassName); +// deltaActionForThisToAnother.setText(textForThisToAnother); +// deltaActionForThisToAnother.setToolTipText(textForThisToAnother); +// return true; +// } else { +// deltaActionForThisToAnother.setText(""); +// deltaActionForThisToAnother.setToolTipText(""); +// return false; +// } +// } public void markAndExpandVariablesByDeltaMarkers(Map> markers) { List srcSideDeltaMarkers = markers.get(DeltaMarkerManager.SRC_SIDE_DELTA_MARKER); diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java index 231abcb..5c15180 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java @@ -58,20 +58,20 @@ TracePoint bottomPoint = findTracePoint(reference, creationCallTree, before.getStatement().getTimeStamp()); return new DeltaMarkerManager(coordinator, bottomPoint, reference, aliasCollector); } - - public DeltaMarkerManager extractDeltaForThisToAnother(Variable variable) { - TracePoint before = variable.getBeforeTracePoint(); - String srcId = before.getMethodExecution().getThisObjId(); - String srcClassName = before.getMethodExecution().getThisClassName(); - String dstId = variable.getValueId(); - String dstClassName = variable.getValueClassName(); + + public DeltaMarkerManager extractDeltaForThisToAnother(String thisId, String thisClassName, String anotherId, String anotherClassName, TracePoint before) { +// TracePoint before = variable.getBeforeTracePoint(); +// String srcId = before.getMethodExecution().getThisObjId(); +// String srcClassName = before.getMethodExecution().getThisClassName(); +// String dstId = variable.getValueId(); +// String dstClassName = variable.getValueClassName(); MethodExecution me = before.getMethodExecution(); - Map references = me.getObjectReferences(dstClassName); + Map references = me.getObjectReferences(anotherClassName); ObjectReference objectReference = null; TracePoint tp = null; for (Map.Entry entry : references.entrySet()) { ObjectReference key = entry.getKey(); - if (key.getId().equals(dstId)) { + if (key.getId().equals(anotherId)) { objectReference = key; tp = entry.getValue(); break; @@ -80,12 +80,40 @@ // �f���^���o TracePoint bottomPoint = tp.duplicate(); - DeltaRelatedAliasCollector aliasCollector = new DeltaRelatedAliasCollector(srcId, dstId); + DeltaRelatedAliasCollector aliasCollector = new DeltaRelatedAliasCollector(thisId, anotherId); extractedStructure = deltaExtractor.extract(tp, objectReference, aliasCollector); MethodExecution coordinator = extractedStructure.getCoordinator(); - Reference reference = new Reference(srcId, dstId, srcClassName, dstClassName); + Reference reference = new Reference(thisId, anotherId, thisClassName, anotherClassName); return new DeltaMarkerManager(coordinator, bottomPoint, reference, aliasCollector); } + +// public DeltaMarkerManager extractDeltaForThisToAnother(Variable variable) { +// TracePoint before = variable.getBeforeTracePoint(); +// String srcId = before.getMethodExecution().getThisObjId(); +// String srcClassName = before.getMethodExecution().getThisClassName(); +// String dstId = variable.getValueId(); +// String dstClassName = variable.getValueClassName(); +// MethodExecution me = before.getMethodExecution(); +// Map references = me.getObjectReferences(dstClassName); +// ObjectReference objectReference = null; +// TracePoint tp = null; +// for (Map.Entry entry : references.entrySet()) { +// ObjectReference key = entry.getKey(); +// if (key.getId().equals(dstId)) { +// objectReference = key; +// tp = entry.getValue(); +// break; +// } +// } +// +// // �f���^���o +// TracePoint bottomPoint = tp.duplicate(); +// DeltaRelatedAliasCollector aliasCollector = new DeltaRelatedAliasCollector(srcId, dstId); +// extractedStructure = deltaExtractor.extract(tp, objectReference, aliasCollector); +// MethodExecution coordinator = extractedStructure.getCoordinator(); +// Reference reference = new Reference(srcId, dstId, srcClassName, dstClassName); +// return new DeltaMarkerManager(coordinator, bottomPoint, reference, aliasCollector); +// } private TracePoint findTracePoint(Reference reference, MethodExecution methodExecution, long beforeTime) { List statements = methodExecution.getStatements();