diff --git a/src/org/ntlab/traceDebugger/CallStackView.java b/src/org/ntlab/traceDebugger/CallStackView.java index 544119d..1576496 100644 --- a/src/org/ntlab/traceDebugger/CallStackView.java +++ b/src/org/ntlab/traceDebugger/CallStackView.java @@ -116,16 +116,17 @@ deltaAction = new Action() { @Override public void run() { - if (selectionCallStackModel == null) return; - MethodExecution callee = selectionCallStackModel.getMethodExecution(); - MethodExecution caller = callee.getParent(); - String callerClassName = caller.getThisClassName(); - String callerId = caller.getThisObjId(); - String calleeClassName = callee.getThisClassName(); - String calleeId = callee.getThisObjId(); - TracePoint before = callee.getCallerTracePoint(); - Variable variable = new Variable("tmp", callerClassName, callerId, calleeClassName, calleeId, before, false); - delta(variable, false); + if (selectionCallStackModel != null) { + MethodExecution callee = selectionCallStackModel.getMethodExecution(); + MethodExecution caller = callee.getParent(); + String callerClassName = caller.getThisClassName(); + String callerId = caller.getThisObjId(); + String calleeClassName = callee.getThisClassName(); + String calleeId = callee.getThisObjId(); + TracePoint before = callee.getCallerTracePoint(); + Variable variable = new Variable("tmp", callerClassName, callerId, calleeClassName, calleeId, before, false); + delta(variable); + } } }; deltaAction.setText("Extract Delta"); @@ -148,8 +149,21 @@ menuMgr.addMenuListener(new IMenuListener() { @Override public void menuAboutToShow(IMenuManager manager) { - manager.add(deltaAction); - manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + if (selectionCallStackModel != null) { + MethodExecution callee = selectionCallStackModel.getMethodExecution(); + MethodExecution caller = callee.getParent(); + String callerId = caller.getThisObjId(); + String callerClassName = caller.getThisClassName(); + callerClassName = callerClassName.substring(callerClassName.lastIndexOf(".") + 1); + String calleeId = callee.getThisObjId(); + String calleeClassName = callee.getThisClassName(); + calleeClassName = calleeClassName.substring(calleeClassName.lastIndexOf(".") + 1); + String text = String.format("Extract Delta (%s: %s �� %s: %s)", callerId, callerClassName, calleeId, calleeClassName); + deltaAction.setText(text); + deltaAction.setToolTipText(text); + manager.add(deltaAction); + manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + } } }); Menu menu = menuMgr.createContextMenu(viewer.getControl()); @@ -187,7 +201,7 @@ viewer.refresh(); } - private void delta(Variable variable, boolean isCollection) { + private void delta(Variable variable) { AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); if (analyzer instanceof DeltaExtractionAnalyzer) { DeltaExtractionAnalyzer deltaAnalyzer = (DeltaExtractionAnalyzer)analyzer; @@ -197,7 +211,7 @@ // note: ����r���[�𕡐��J���e�X�g String subIdWithNewView = deltaAnalyzer.getNextDeltaMarkerSubId(); DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)workbenchPage.showView(DeltaMarkerView.ID, subIdWithNewView, IWorkbenchPage.VIEW_ACTIVATE); - deltaAnalyzer.extractDeltaForThisToAnother(variable, isCollection, newDeltaMarkerView, subIdWithNewView); + deltaAnalyzer.extractDeltaForThisToAnother(variable, newDeltaMarkerView, subIdWithNewView); TracePoint coordinatorPoint = newDeltaMarkerView.getCoordinatorPoint(); TracePoint creationPoint = newDeltaMarkerView.getCreationPoint(); DebuggingController controller = DebuggingController.getInstance(); diff --git a/src/org/ntlab/traceDebugger/VariableView.java b/src/org/ntlab/traceDebugger/VariableView.java index 7b21c82..792fef0 100644 --- a/src/org/ntlab/traceDebugger/VariableView.java +++ b/src/org/ntlab/traceDebugger/VariableView.java @@ -49,6 +49,8 @@ private IAction jumpAction; private IAction deltaAction; private IAction deltaActionForCollection; + private IAction deltaActionForContainerToComponent; + private IAction deltaActionForThisToAnother; private Variable selectedVariable; private Variables variables = Variables.getInstance(); public static final String ID = "org.ntlab.traceDebugger.variableView"; @@ -86,7 +88,7 @@ Object value = ((TreeNode)element).getValue(); if (value instanceof Variable) { selectedVariable = (Variable)value; - } + } } } }); @@ -142,26 +144,38 @@ controller.stepOverAction(); } }; - jumpAction.setText("Jump to Creation Point"); - jumpAction.setToolTipText("Jump to Creation Point"); - + jumpAction.setText("Jump to Related Point"); + jumpAction.setToolTipText("Jump to Related Point"); + deltaAction = new Action() { @Override public void run() { - if (selectedVariable.getVariableName().equals(Variables.RETURN_VARIABLE_NAME)) { - String[] texts = {"Container to Component", "This to Another"}; - RadioButtonDialog dialog = new RadioButtonDialog(null, "Which patterns?", texts); - if (dialog.open() != InputDialog.OK) return; - String selectionType = dialog.getValue(); - delta(selectedVariable, true, selectionType.startsWith("This")); - } else { - delta(selectedVariable, true, false); - } + String containerClassName = selectedVariable.getContainerClassName(); + delta(selectedVariable, containerClassName.startsWith("java.util."), false); } }; deltaAction.setText("Extract Delta"); deltaAction.setToolTipText("Extract Delta"); + deltaActionForContainerToComponent = new Action() { + @Override + public void run() { + String containerClassName = selectedVariable.getContainerClassName(); + delta(selectedVariable, containerClassName.startsWith("java.util."), false); + } + }; + deltaActionForContainerToComponent.setText("Extract Delta"); + deltaActionForContainerToComponent.setToolTipText("Extract Delta"); + + deltaActionForThisToAnother = new Action() { + @Override + public void run() { + delta(selectedVariable, false, true); + } + }; + deltaActionForThisToAnother.setText("Extract Delta"); + deltaActionForThisToAnother.setToolTipText("Extract Delta"); + deltaActionForCollection = new Action() { @Override public void run() { @@ -198,9 +212,16 @@ menuMgr.addMenuListener(new IMenuListener() { @Override public void menuAboutToShow(IMenuManager manager) { + // �E�N���b�N����x�ɌĂяo����� manager.add(jumpAction); - manager.add(deltaAction); - manager.add(deltaActionForCollection); + updateDeltaActionsTexts(selectedVariable); + if (selectedVariable.getVariableName().equals(Variables.RETURN_VARIABLE_NAME)) { + manager.add(deltaActionForContainerToComponent); + manager.add(deltaActionForThisToAnother); + } else { + manager.add(deltaAction); + } +// manager.add(deltaActionForCollection); manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } }); @@ -215,6 +236,29 @@ viewer.refresh(); } + private void updateDeltaActionsTexts(Variable variable) { + String valueId = selectedVariable.getValueId(); + String valueClassName = selectedVariable.getValueClassName(); + valueClassName = valueClassName.substring(valueClassName.lastIndexOf(".") + 1); + + String containerId = selectedVariable.getContainerId(); + String containerClassName = selectedVariable.getContainerClassName(); + containerClassName = containerClassName.substring(containerClassName.lastIndexOf(".") + 1); + String textForContainerToComponent = String.format("Extract Delta (%s: %s �� %s: %s)", containerId, containerClassName, valueId, valueClassName); + deltaActionForContainerToComponent.setText(textForContainerToComponent); + deltaActionForContainerToComponent.setToolTipText(textForContainerToComponent); + deltaAction.setText(textForContainerToComponent); + deltaAction.setToolTipText(textForContainerToComponent); + + TracePoint before = selectedVariable.getBeforeTracePoint(); + String thisId = before.getMethodExecution().getThisObjId(); + String thisClassName = before.getMethodExecution().getThisClassName(); + 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); + } + private void delta(Variable variable, boolean isCollection, boolean isForThisToAnother) { AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); if (analyzer instanceof DeltaExtractionAnalyzer) { @@ -226,7 +270,7 @@ String subIdWithNewView = deltaAnalyzer.getNextDeltaMarkerSubId(); DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)workbenchPage.showView(DeltaMarkerView.ID, subIdWithNewView, IWorkbenchPage.VIEW_ACTIVATE); if (isForThisToAnother) { - deltaAnalyzer.extractDeltaForThisToAnother(variable, isCollection, newDeltaMarkerView, subIdWithNewView); + deltaAnalyzer.extractDeltaForThisToAnother(variable, newDeltaMarkerView, subIdWithNewView); } else { deltaAnalyzer.extractDelta(variable, isCollection, newDeltaMarkerView, subIdWithNewView); } @@ -336,6 +380,6 @@ return workbenchPage.showView(viewId); } catch (PartInitException e) { throw new RuntimeException(e); - } - } + } + } } diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java index 581a1ea..5aa8b06 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java @@ -70,7 +70,7 @@ deltaMarkerView.update(); } - public void extractDeltaForThisToAnother(Variable variable, boolean isCollection, DeltaMarkerView deltaMarkerView, String deltaMarkerViewSubId) { + public void extractDeltaForThisToAnother(Variable variable, DeltaMarkerView deltaMarkerView, String deltaMarkerViewSubId) { addDeltaMarkerView(deltaMarkerViewSubId, deltaMarkerView); TracePoint before = variable.getBeforeTracePoint(); String srcId = before.getMethodExecution().getThisObjId();