diff --git a/icons/debug/debug_dlcl.png b/icons/debug/debug_dlcl.png new file mode 100644 index 0000000..9d50176 --- /dev/null +++ b/icons/debug/debug_dlcl.png Binary files differ diff --git a/icons/debug/debug_elcl.png b/icons/debug/debug_elcl.png new file mode 100644 index 0000000..6bd3c42 --- /dev/null +++ b/icons/debug/debug_elcl.png Binary files differ diff --git a/icons/debug/import_brkpts_dlcl.png b/icons/debug/import_brkpts_dlcl.png new file mode 100644 index 0000000..13e5061 --- /dev/null +++ b/icons/debug/import_brkpts_dlcl.png Binary files differ diff --git a/icons/debug/import_brkpts_elcl.png b/icons/debug/import_brkpts_elcl.png new file mode 100644 index 0000000..7c4ae88 --- /dev/null +++ b/icons/debug/import_brkpts_elcl.png Binary files differ diff --git a/icons/debug/stepnext_dlcl.png b/icons/debug/stepnext_dlcl.png new file mode 100644 index 0000000..0b376a8 --- /dev/null +++ b/icons/debug/stepnext_dlcl.png Binary files differ diff --git a/icons/debug/stepnext_elcl.png b/icons/debug/stepnext_elcl.png new file mode 100644 index 0000000..2cdbc6d --- /dev/null +++ b/icons/debug/stepnext_elcl.png Binary files differ diff --git a/icons/deltaMarker.png b/icons/deltaMarker.png index 4be3929..cc39fb3 100644 --- a/icons/deltaMarker.png +++ b/icons/deltaMarker.png Binary files differ diff --git a/icons/deltaMarker_tmp.png b/icons/deltaMarker_tmp.png new file mode 100644 index 0000000..4be3929 --- /dev/null +++ b/icons/deltaMarker_tmp.png Binary files differ diff --git a/icons/variable/fieldvariable.png b/icons/variable/fieldvariable.png new file mode 100644 index 0000000..224b570 --- /dev/null +++ b/icons/variable/fieldvariable.png Binary files differ diff --git a/icons/variable/localvariable.png b/icons/variable/localvariable.png new file mode 100644 index 0000000..a496c2b --- /dev/null +++ b/icons/variable/localvariable.png Binary files differ diff --git a/icons/variable/specialvariable.png b/icons/variable/specialvariable.png new file mode 100644 index 0000000..d2ea89a --- /dev/null +++ b/icons/variable/specialvariable.png Binary files differ diff --git a/icons/variable/thisvariable.png b/icons/variable/thisvariable.png new file mode 100644 index 0000000..af367fb --- /dev/null +++ b/icons/variable/thisvariable.png Binary files differ diff --git a/icons/view/breakpoint_view.png b/icons/view/breakpoint_view.png new file mode 100644 index 0000000..6b17442 --- /dev/null +++ b/icons/view/breakpoint_view.png Binary files differ diff --git a/icons/view/callstack_view.png b/icons/view/callstack_view.png new file mode 100644 index 0000000..97d5e2d --- /dev/null +++ b/icons/view/callstack_view.png Binary files differ diff --git a/icons/view/calltree_view.png b/icons/view/calltree_view.png new file mode 100644 index 0000000..ae6d660 --- /dev/null +++ b/icons/view/calltree_view.png Binary files differ diff --git a/icons/view/deltamarker_view.png b/icons/view/deltamarker_view.png new file mode 100644 index 0000000..cc39fb3 --- /dev/null +++ b/icons/view/deltamarker_view.png Binary files differ diff --git a/icons/view/tracepoints_view.png b/icons/view/tracepoints_view.png new file mode 100644 index 0000000..a22ec80 --- /dev/null +++ b/icons/view/tracepoints_view.png Binary files differ diff --git a/icons/view/variable_view.png b/icons/view/variable_view.png new file mode 100644 index 0000000..d4d5774 --- /dev/null +++ b/icons/view/variable_view.png Binary files differ diff --git a/plugin.xml b/plugin.xml index 2de2e99..7f5381a 100644 --- a/plugin.xml +++ b/plugin.xml @@ -10,22 +10,25 @@ @@ -82,12 +91,12 @@ + name="トレースデバッガ (順方向)"> + name="トレースデバッガ (逆方向)"> ()); viewer.refresh(); + updateImagesForDebug(false); + updateImagesForBreakPoint(false); } public void updateTraceBreakPoints(TraceBreakPoints traceBreakPoints) { this.traceBreakPoints = traceBreakPoints; viewer.setInput(traceBreakPoints.getAllTraceBreakPoints()); -// viewer.refresh(); - final Table table = viewer.getTable(); for (TableItem item : table.getItems()) { Object data = item.getData(); @@ -328,8 +343,26 @@ viewer.refresh(); } - public void updateImages(boolean isRunning) { + public void updateImagesForBreakPoint(boolean hasLoadedTraceFile) { + ImageRegistry registry = TraceDebuggerPlugin.getDefault().getImageRegistry(); + if (hasLoadedTraceFile) { + ImageDescriptor debugIcon = registry.getDescriptor(DEBUG_ELCL); + debugAction.setImageDescriptor(debugIcon); + ImageDescriptor importBreakpointIcon = registry.getDescriptor(IMPORT_BREAKPOINT_ELCL); + importBreakpointAction.setImageDescriptor(importBreakpointIcon); + } else { + ImageDescriptor debugIcon = registry.getDescriptor(DEBUG_DLCL); + debugAction.setImageDescriptor(debugIcon); + ImageDescriptor importBreakpointIcon = registry.getDescriptor(IMPORT_BREAKPOINT_DLCL); + importBreakpointAction.setImageDescriptor(importBreakpointIcon); + } + } + + public void updateImagesForDebug(boolean isRunning) { + ImageRegistry registry = TraceDebuggerPlugin.getDefault().getImageRegistry(); if (isRunning) { + ImageDescriptor debugIcon = registry.getDescriptor(DEBUG_DLCL); + debugAction.setImageDescriptor(debugIcon); ImageDescriptor terminateImage = DebugUITools.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_TERMINATE); terminateAction.setImageDescriptor(terminateImage); ImageDescriptor stepIntoImage = DebugUITools.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_STEP_INTO); @@ -338,9 +371,13 @@ stepOverAction.setImageDescriptor(stepOverImage); ImageDescriptor stepReturnImage = DebugUITools.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_STEP_RETURN); stepReturnAction.setImageDescriptor(stepReturnImage); + ImageDescriptor stepNextIcon = registry.getDescriptor(STEP_NEXT_ELCL); + stepNextAction.setImageDescriptor(stepNextIcon); ImageDescriptor image = DebugUITools.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_RESUME); resumeAction.setImageDescriptor(image); } else { + ImageDescriptor debugIcon = registry.getDescriptor(DEBUG_ELCL); + debugAction.setImageDescriptor(debugIcon); ImageDescriptor terminateImage = DebugUITools.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_TERMINATE); terminateAction.setImageDescriptor(terminateImage); ImageDescriptor stepIntoImage = DebugUITools.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_STEP_INTO); @@ -349,6 +386,8 @@ stepOverAction.setImageDescriptor(stepOverImage); ImageDescriptor stepReturnImage = DebugUITools.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_STEP_RETURN); stepReturnAction.setImageDescriptor(stepReturnImage); + ImageDescriptor stepNextIcon = registry.getDescriptor(STEP_NEXT_DLCL); + stepNextAction.setImageDescriptor(stepNextIcon); ImageDescriptor image = DebugUITools.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_RESUME); resumeAction.setImageDescriptor(image); } diff --git a/src/org/ntlab/traceDebugger/BreakPointViewRelatedDelta.java b/src/org/ntlab/traceDebugger/BreakPointViewRelatedDelta.java index 08f1f50..2ef6840 100644 --- a/src/org/ntlab/traceDebugger/BreakPointViewRelatedDelta.java +++ b/src/org/ntlab/traceDebugger/BreakPointViewRelatedDelta.java @@ -17,10 +17,10 @@ public static final String ID = "org.ntlab.traceDebugger.breakPointViewRelatedDelta"; public static final String STEP_BACK_INTO_ELCL = "StepBackInto_ELCL"; public static final String STEP_BACK_INTO_DLCL = "StepBackInto_DLCL"; - public static final String STEP_BACK_OVER_ELCL = "StepOverInto_ELCL"; - public static final String STEP_BACK_OVER_DLCL = "StepOverInto_DLCL"; - public static final String STEP_BACK_RETURN_ELCL = "StepReturnInto_ELCL"; - public static final String STEP_BACK_RETURN_DLCL = "StepReturnInto_DLCL"; + public static final String STEP_BACK_OVER_ELCL = "StepBackOver_ELCL"; + public static final String STEP_BACK_OVER_DLCL = "StepBackOver_DLCL"; + public static final String STEP_BACK_RETURN_ELCL = "StepBackReturn_ELCL"; + public static final String STEP_BACK_RETURN_DLCL = "StepBackReturn_DLCL"; public static final String BACK_RESUME_ELCL = "BackResume_ELCL"; public static final String BACK_RESUME_DLCL = "BackResume_DLCL"; @@ -47,15 +47,19 @@ @Override protected void createActions() { super.createActions(); - ImageRegistry registry = TraceDebuggerPlugin.getDefault().getImageRegistry(); + ImageRegistry registry = TraceDebuggerPlugin.getDefault().getImageRegistry(); + boolean isJapanese = TraceDebuggerPlugin.isJapanese(); + String msg; + backResumeAction = new Action() { @Override public void run() { debuggingController.backResumeAction(); } }; - backResumeAction.setText("Back Resume"); - backResumeAction.setToolTipText("Back Resume"); + msg = (isJapanese) ? "�t�����ɍĊJ" : "Back Resume"; + backResumeAction.setText(msg); + backResumeAction.setToolTipText(msg); ImageDescriptor backResumeIcon = registry.getDescriptor(BACK_RESUME_DLCL); backResumeAction.setImageDescriptor(backResumeIcon); @@ -65,8 +69,9 @@ debuggingController.stepBackIntoAction(); } }; - stepBackIntoAction.setText("Step Back Into"); - stepBackIntoAction.setToolTipText("Step Back Into"); + msg = (isJapanese) ? "�X�e�b�v�o�b�N�C��" : "Step Back Into"; + stepBackIntoAction.setText(msg); + stepBackIntoAction.setToolTipText(msg); ImageDescriptor stepBackIntoIcon = registry.getDescriptor(STEP_BACK_INTO_DLCL); stepBackIntoAction.setImageDescriptor(stepBackIntoIcon); @@ -76,8 +81,9 @@ debuggingController.stepBackOverAction(); } }; - stepBackOverAction.setText("Step Back Over"); - stepBackOverAction.setToolTipText("Step Back Over"); + msg = (isJapanese) ? "�X�e�b�v�o�b�N�I�[�o�[" : "Step Back Over"; + stepBackOverAction.setText(msg); + stepBackOverAction.setToolTipText(msg); ImageDescriptor stepBackOverIcon = registry.getDescriptor(STEP_BACK_OVER_DLCL); stepBackOverAction.setImageDescriptor(stepBackOverIcon); @@ -87,8 +93,9 @@ debuggingController.stepBackReturnAction(); } }; - stepBackReturnAction.setText("Step Back Return"); - stepBackReturnAction.setToolTipText("Step Back Return"); + msg = (isJapanese) ? "�X�e�b�v�o�b�N���^�[��" : "Step Back Return"; + stepBackReturnAction.setText(msg); + stepBackReturnAction.setToolTipText(msg); ImageDescriptor stepBackReturnIcon = registry.getDescriptor(STEP_BACK_RETURN_DLCL); stepBackReturnAction.setImageDescriptor(stepBackReturnIcon); } @@ -130,8 +137,8 @@ } @Override - public void updateImages(boolean isRunning) { - super.updateImages(isRunning); + public void updateImagesForDebug(boolean isRunning) { + super.updateImagesForDebug(isRunning); ImageRegistry registry = TraceDebuggerPlugin.getDefault().getImageRegistry(); if (isRunning) { ImageDescriptor stepBackIntoImage = registry.getDescriptor(STEP_BACK_INTO_ELCL); diff --git a/src/org/ntlab/traceDebugger/CallStackLabelProvider.java b/src/org/ntlab/traceDebugger/CallStackLabelProvider.java index c38fd4c..dc0f797 100644 --- a/src/org/ntlab/traceDebugger/CallStackLabelProvider.java +++ b/src/org/ntlab/traceDebugger/CallStackLabelProvider.java @@ -1,30 +1,31 @@ package org.ntlab.traceDebugger; +import org.eclipse.debug.ui.DebugUITools; +import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.viewers.IColorProvider; 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 CallStackLabelProvider extends LabelProvider implements IColorProvider { - + private Image threadSuspendImage = DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_THREAD_SUSPENDED); + private Image callStackModelImage = DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_STACKFRAME); + @Override public String getText(Object element) { if (element instanceof TreeNode) { Object value = ((TreeNode)element).getValue(); if (value instanceof String) { String threadId = (String)value; - return "ThreadID: " + threadId; + String msg = TraceDebuggerPlugin.isJapanese() ? "�X���b�hID: " : "Thread ID: "; + return msg + threadId; } if (value instanceof CallStackModel) { CallStackModel callStackModel = (CallStackModel)value; StringBuilder text = new StringBuilder(); text.append(callStackModel.getCallStackSignature()); - text.append(" line: "); + text.append(TraceDebuggerPlugin.isJapanese() ? " �s: " : " line: "); text.append(callStackModel.getCallLineNo()); return text.toString(); } @@ -35,7 +36,12 @@ @Override public Image getImage(Object element) { if (element instanceof TreeNode) { - return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); + Object value = ((TreeNode)element).getValue(); + if (value instanceof String) { + return threadSuspendImage; + } else if (value instanceof CallStackModel) { + return callStackModelImage; + } } return null; } diff --git a/src/org/ntlab/traceDebugger/CallStackView.java b/src/org/ntlab/traceDebugger/CallStackView.java index 6064419..84ffb23 100644 --- a/src/org/ntlab/traceDebugger/CallStackView.java +++ b/src/org/ntlab/traceDebugger/CallStackView.java @@ -3,7 +3,6 @@ import java.util.List; import java.util.Map; -import org.eclipse.core.resources.IMarker; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.viewers.ISelectionChangedListener; @@ -16,9 +15,6 @@ import org.eclipse.ui.part.ViewPart; import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution; 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 CallStackView extends ViewPart { protected TreeViewer viewer; @@ -64,6 +60,11 @@ createPopupMenu(); TraceDebuggerPlugin.setActiveView(ID, this); } + + @Override + public String getTitle() { + return TraceDebuggerPlugin.isJapanese() ? "�Ăяo���X�^�b�N" : "CallStack"; + } @Override public void setFocus() { diff --git a/src/org/ntlab/traceDebugger/CallStackViewRelatedDelta.java b/src/org/ntlab/traceDebugger/CallStackViewRelatedDelta.java index c97c4ff..677fe67 100644 --- a/src/org/ntlab/traceDebugger/CallStackViewRelatedDelta.java +++ b/src/org/ntlab/traceDebugger/CallStackViewRelatedDelta.java @@ -79,7 +79,8 @@ 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); + String msg = TraceDebuggerPlugin.isJapanese() ? "�I�u�W�F�N�g�̐ڋ߉ߒ����o" : "Extract Process to Relate"; + String text = String.format("%s (%s: %s �� %s: %s)", msg, callerId, callerClassName, calleeId, calleeClassName); deltaAction.setText(text); deltaAction.setToolTipText(text); manager.add(deltaAction); diff --git a/src/org/ntlab/traceDebugger/CallTreeLabelProvider.java b/src/org/ntlab/traceDebugger/CallTreeLabelProvider.java index 371e09e..d1c9e68 100644 --- a/src/org/ntlab/traceDebugger/CallTreeLabelProvider.java +++ b/src/org/ntlab/traceDebugger/CallTreeLabelProvider.java @@ -1,15 +1,18 @@ package org.ntlab.traceDebugger; +import org.eclipse.debug.ui.DebugUITools; +import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeNode; 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 CallTreeLabelProvider extends LabelProvider implements IColorProvider { + private Image callTreeModelImage = DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_STACKFRAME); + private Color currentColor = new Color(Display.getDefault(), 198, 219, 174); + @Override public String getText(Object element) { if (element instanceof TreeNode) { @@ -25,7 +28,10 @@ @Override public Image getImage(Object element) { if (element instanceof TreeNode) { - return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); + Object value = ((TreeNode)element).getValue(); + if (value instanceof CallTreeModel) { + return callTreeModelImage; + } } return null; } @@ -42,7 +48,7 @@ if (value instanceof CallTreeModel) { CallTreeModel callTreeModel = (CallTreeModel)value; if (callTreeModel.isHighlighting()) { - return new Color(Display.getDefault(), 198, 219, 174); + return currentColor; } } } diff --git a/src/org/ntlab/traceDebugger/CallTreeView.java b/src/org/ntlab/traceDebugger/CallTreeView.java index 73e8f94..d79a2a6 100644 --- a/src/org/ntlab/traceDebugger/CallTreeView.java +++ b/src/org/ntlab/traceDebugger/CallTreeView.java @@ -15,8 +15,6 @@ import org.eclipse.ui.part.ViewPart; import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution; 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 CallTreeView extends ViewPart { @@ -73,6 +71,11 @@ createMenuBar(); TraceDebuggerPlugin.setActiveView(ID, this); } + + @Override + public String getTitle() { + return TraceDebuggerPlugin.isJapanese() ? "���݂̎��s���_" : "CurrentExecutionPoint"; + } @Override public void setFocus() { diff --git a/src/org/ntlab/traceDebugger/DebuggingController.java b/src/org/ntlab/traceDebugger/DebuggingController.java index 19f6b6f..7b8c78a 100644 --- a/src/org/ntlab/traceDebugger/DebuggingController.java +++ b/src/org/ntlab/traceDebugger/DebuggingController.java @@ -37,7 +37,6 @@ private static final DebuggingController theInstance = new DebuggingController(); private TracePoint debuggingTp; private TraceBreakPoint selectedTraceBreakPoint; -// private TraceBreakPoints traceBreakPoints; private IMarker currentLineMarker; private LoadingTraceFileStatus loadingTraceFileStatus = LoadingTraceFileStatus.NOT_YET; private boolean isRunning = false; @@ -73,15 +72,23 @@ public boolean fileOpenAction(Shell shell) { if (loadingTraceFileStatus == LoadingTraceFileStatus.PROGRESS) { - MessageDialog.openInformation(null, "Loading", "This debugger is loading the trace."); + if (TraceDebuggerPlugin.isJapanese()) { + MessageDialog.openInformation(null, "�ǂݍ��ݒ�", "�g���[�X�t�@�C����ǂݍ��ݒ��ł�"); + } else { + MessageDialog.openInformation(null, "Loading", "This debugger is loading the trace."); + } return false; } if (isRunning) { - MessageDialog.openInformation(null, "Running", "This debugger is running on the trace."); + if (TraceDebuggerPlugin.isJapanese()) { + MessageDialog.openInformation(null, "���s��", "�g���[�X��Ŏ��s���ł�"); + } else { + MessageDialog.openInformation(null, "Running", "This debugger is running on the trace."); + } return false; } FileDialog fileDialog = new FileDialog(shell, SWT.OPEN); - fileDialog.setText("Open Trace File"); + fileDialog.setText(TraceDebuggerPlugin.isJapanese() ? "�g���[�X�t�@�C�����J��" : "Open Trace File"); fileDialog.setFilterExtensions(new String[]{"*.*"}); String path = fileDialog.open(); if (path == null) return false; @@ -97,10 +104,11 @@ } private void loadTraceFileOnOtherThread(final String filePath) { - Job job = new Job("Loading Trace File") { + final String msg = TraceDebuggerPlugin.isJapanese() ? "�g���[�X�t�@�C����ǂݍ��ݒ�" : "Loading Trace File"; + Job job = new Job(msg) { @Override - protected IStatus run(IProgressMonitor monitor) { - monitor.beginTask("Loading Trace File" + " (" + filePath + ")", IProgressMonitor.UNKNOWN); + protected IStatus run(IProgressMonitor monitor) { + monitor.beginTask(msg + " (" + filePath + ")", IProgressMonitor.UNKNOWN); loadingTraceFileStatus = LoadingTraceFileStatus.PROGRESS; TraceDebuggerPlugin.setAnalyzer(null); TraceJSON trace = new TraceJSON(filePath); @@ -115,6 +123,7 @@ @Override public void run() { breakpointView.updateTraceBreakPoints(traceBreakPoints); + breakpointView.updateImagesForBreakPoint(true); } }); monitor.done(); @@ -133,19 +142,29 @@ public boolean addTraceBreakPointAction() { if (loadingTraceFileStatus != LoadingTraceFileStatus.DONE) { - MessageDialog.openInformation(null, "Error", "Trace file was not found"); + if (TraceDebuggerPlugin.isJapanese()) { + MessageDialog.openInformation(null, "�G���[", "�g���[�X�����‚���܂���ł���"); + } else { + MessageDialog.openInformation(null, "Error", "Trace was not found"); + } return false; } - InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "", null); + InputDialog inputDialog = TraceDebuggerPlugin.isJapanese() ? new InputDialog(null, "���\�b�h�_�C�A���O", "���\�b�h�V�O�j�`�������", "", null) + : new InputDialog(null, "method signature dialog", "Input method signature", "", null); if (inputDialog.open() != InputDialog.OK) return false; String methodSignature = inputDialog.getValue(); - inputDialog = new InputDialog(null, "line No dialog", "Input line no", "", null); + inputDialog = TraceDebuggerPlugin.isJapanese() ? new InputDialog(null, "�s���_�C�A���O", "�s�������", "", null) + : new InputDialog(null, "line Number dialog", "Input line number", "", null); if (inputDialog.open() != InputDialog.OK) return false; int lineNo = Integer.parseInt(inputDialog.getValue()); TraceBreakPoints traceBreakPoints = ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).getTraceBreakPoints(); boolean isSuccess = traceBreakPoints.addTraceBreakPoint(methodSignature, lineNo); if (!isSuccess) { - MessageDialog.openInformation(null, "Error", "This trace point does not exist in the trace."); + if (TraceDebuggerPlugin.isJapanese()) { + MessageDialog.openInformation(null, "�G���[", "�g���[�X���ɓ��͂����|�C���g�����݂��܂���"); + } else { + MessageDialog.openInformation(null, "Error", "This point does not exist in the trace."); + } return false; } ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).updateTraceBreakPoints(traceBreakPoints); @@ -154,7 +173,11 @@ public boolean importBreakpointAction() { if (loadingTraceFileStatus != LoadingTraceFileStatus.DONE) { - MessageDialog.openInformation(null, "Error", "Trace file was not found"); + if (TraceDebuggerPlugin.isJapanese()) { + MessageDialog.openInformation(null, "�G���[", "�g���[�X�����‚���܂���"); + } else { + MessageDialog.openInformation(null, "Error", "Trace was not found"); + } return false; } TraceBreakPoints traceBreakPoints = ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).getTraceBreakPoints(); @@ -171,30 +194,35 @@ return true; } - public boolean changeAvailableAction() { - if (selectedTraceBreakPoint == null) return false; - selectedTraceBreakPoint.changeAvailable(); - TraceBreakPoints traceBreakPoints = ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).getTraceBreakPoints(); - ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).updateTraceBreakPoints(traceBreakPoints); - return true; - } - public boolean debugAction() { if (loadingTraceFileStatus != LoadingTraceFileStatus.DONE) { - MessageDialog.openInformation(null, "Error", "Trace file was not found"); + if (TraceDebuggerPlugin.isJapanese()) { + MessageDialog.openInformation(null, "�G���[", "�g���[�X�����‚���܂���"); + } else { + MessageDialog.openInformation(null, "Error", "Trace was not found"); + } return false; } if (isRunning) { + if (TraceDebuggerPlugin.isJapanese()) { + MessageDialog.openInformation(null, "�G���[", "�g���[�X��Ŏ��s���ł�"); + } else { + MessageDialog.openInformation(null, "Error", "This Debugger is running on the trace."); + } return false; } TraceBreakPoints traceBreakPoints = ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).getTraceBreakPoints(); debuggingTp = traceBreakPoints.getFirstTracePoint(); if (debuggingTp == null) { - MessageDialog.openInformation(null, "Error", "An available breakpoint was not found"); + if (TraceDebuggerPlugin.isJapanese()) { + MessageDialog.openInformation(null, "�G���[", "���p�”\�ȃu���[�N�|�C���g�����‚���܂���"); + } else { + MessageDialog.openInformation(null, "Error", "An available breakpoint was not found"); + } return false; } refresh(null, debuggingTp, false); - ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).updateImages(true); + ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).updateImagesForDebug(true); isRunning = true; return true; } @@ -210,7 +238,7 @@ } ((CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID)).reset(); ((VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID)).reset(); - ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).updateImages(false); + ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).updateImagesForDebug(false); isRunning = false; } @@ -224,11 +252,7 @@ TracePoint previousTp = debuggingTp; debuggingTp = debuggingTp.duplicate(); debuggingTp.stepFull(); - if (!debuggingTp.isValid()) { - terminateAction(); - MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); - return false; - } + if (debugExecutionIsTerminated(debuggingTp)) return false; refresh(null, debuggingTp, false); return true; } @@ -264,13 +288,10 @@ } while (debuggingTp.stepFull()); } else { debuggingTp = goalTp; + while (!debuggingTp.stepOver()); // �Ăяo�����ł̎��̃X�e�[�g�����g�܂Ői�߂� } - if (!debuggingTp.isValid()) { - terminateAction(); - MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); - return false; - } + if (debugExecutionIsTerminated(debuggingTp)) return false; refresh(previousTp, debuggingTp, isReturned, true); return true; } @@ -284,12 +305,14 @@ } TracePoint previousTp = debuggingTp; debuggingTp = debuggingTp.duplicate(); - while (debuggingTp.stepOver()); - if (!debuggingTp.isValid()) { - terminateAction(); - MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); - return false; + + // note: �Ăяo�����ɖ߂�܂Ői�ݑ����� + while (debuggingTp.stepOver()) { + previousTp = debuggingTp.duplicate(); } + while (!debuggingTp.stepOver()); // �Ăяo�����ł̎��̃X�e�[�g�����g�܂Ői�߂� + + if (debugExecutionIsTerminated(debuggingTp)) return false; refresh(previousTp, debuggingTp, true); return true; } @@ -318,14 +341,10 @@ } while (debuggingTp.stepFull()); } else { debuggingTp = startTp; - startTp.stepOver(); + while (!debuggingTp.stepOver()); // �Ăяo�����ł̎��̃X�e�[�g�����g�܂Ői�߂� } - if (!debuggingTp.isValid()) { - terminateAction(); - MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); - return false; - } + if (debugExecutionIsTerminated(debuggingTp)) return false; refresh(previousTp, debuggingTp, isReturned, true); return true; } @@ -337,11 +356,7 @@ TracePoint previousTp = debuggingTp; TraceBreakPoints traceBreakPoints = ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).getTraceBreakPoints(); debuggingTp = traceBreakPoints.getNextTracePoint(currentTime); - if (debuggingTp == null) { - terminateAction(); - MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); - return false; - } + if (debugExecutionIsTerminated(debuggingTp)) return false; refresh(null, debuggingTp, false); return true; } @@ -356,11 +371,7 @@ TracePoint previousTp = debuggingTp; debuggingTp = debuggingTp.duplicate(); debuggingTp.stepBackFull(); - if (!debuggingTp.isValid()) { - terminateAction(); - MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); - return false; - } + if (debugExecutionIsTerminated(debuggingTp)) return false; refresh(null, debuggingTp, true); return true; } @@ -379,11 +390,7 @@ while (!(isReturned = !debuggingTp.stepBackOver())) { if (currentLineNo != debuggingTp.getStatement().getLineNo()) break; } - if (!debuggingTp.isValid()) { - terminateAction(); - MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); - return false; - } + if (debugExecutionIsTerminated(debuggingTp)) return false; refresh(null, debuggingTp, !isReturned); return true; } @@ -398,11 +405,7 @@ TracePoint previousTp = debuggingTp; debuggingTp = debuggingTp.duplicate(); while (debuggingTp.stepBackOver()); - if (!debuggingTp.isValid()) { - terminateAction(); - MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); - return false; - } + if (debugExecutionIsTerminated(debuggingTp)) return false; refresh(null, debuggingTp, false); return true; } @@ -414,14 +417,23 @@ long currentTime = debuggingTp.getStatement().getTimeStamp(); TraceBreakPoints traceBreakPoints = ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).getTraceBreakPoints(); debuggingTp = traceBreakPoints.getPreviousTracePoint(currentTime); - if (debuggingTp == null) { - terminateAction(); - MessageDialog.openInformation(null, "Terminate", "This trace is terminated"); - return false; - } + if (debugExecutionIsTerminated(debuggingTp)) return false; refresh(null, debuggingTp, false); return true; } + + private boolean debugExecutionIsTerminated(TracePoint tp) { + if (tp == null || !(tp.isValid())) { + terminateAction(); + if (TraceDebuggerPlugin.isJapanese()) { + MessageDialog.openInformation(null, "�I��", "�g���[�X��ł̎��s�͏I�����܂���"); + } else { + MessageDialog.openInformation(null, "Terminate", "This execution is terminated"); + } + return true; + } + return false; + } /** * ���݂̃f�o�b�O�ʒu���w�肵���g���[�X�|�C���g�ɍ��킹�� diff --git a/src/org/ntlab/traceDebugger/DeltaMarkerLabelProvider.java b/src/org/ntlab/traceDebugger/DeltaMarkerLabelProvider.java index ce8d510..95f68bd 100644 --- a/src/org/ntlab/traceDebugger/DeltaMarkerLabelProvider.java +++ b/src/org/ntlab/traceDebugger/DeltaMarkerLabelProvider.java @@ -9,6 +9,7 @@ import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; +import org.ntlab.traceDebugger.analyzerProvider.Alias.AliasType; import org.ntlab.traceDebugger.analyzerProvider.DeltaMarkerManager; public class DeltaMarkerLabelProvider extends LabelProvider implements ITableLabelProvider, ITableColorProvider { @@ -44,24 +45,9 @@ return simpleObjectTypeName.toString(); case 3: Object obj = marker.getAttribute(DeltaMarkerManager.DELTA_MARKER_ATR_ALIAS_TYPE); - 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; + if (!(obj instanceof AliasType)) return null; + AliasType aliasType = (AliasType)obj; + return getAliasTypeName(aliasType); case 4: String resource = marker.getResource().toString(); return resource.substring(resource.lastIndexOf("/") + 1); @@ -76,14 +62,57 @@ return "�e�X�g�p�e�L�X�g"; } + private String getAliasTypeName(AliasType aliasType) { + String msg = aliasType.toString(); + switch (aliasType) { + case METHOD_INVOCATION: + case CONSTRACTOR_INVOCATION: + return TraceDebuggerPlugin.isJapanese() ? "�Ăяo����" : "Invocation"; + case RECEIVER: + return TraceDebuggerPlugin.isJapanese() ? "���V�[�o" : convertFromSnakeToPascal(msg); + case ACTUAL_ARGUMENT: + return TraceDebuggerPlugin.isJapanese() ? "������" : convertFromSnakeToPascal(msg); + case FORMAL_PARAMETER: + return TraceDebuggerPlugin.isJapanese() ? "������" : convertFromSnakeToPascal(msg); + case RETURN_VALUE: + return TraceDebuggerPlugin.isJapanese() ? "�߂�l" : convertFromSnakeToPascal(msg); + case THIS: + return TraceDebuggerPlugin.isJapanese() ? "this�̎Q��" : convertFromSnakeToPascal(msg); + case CONTAINER: + return TraceDebuggerPlugin.isJapanese() ? "�R���e�i�̎Q��" : convertFromSnakeToPascal(msg); + case FIELD: + return TraceDebuggerPlugin.isJapanese() ? "�t�B�[���h�Q��" : convertFromSnakeToPascal(msg); + case ARRAY: + return TraceDebuggerPlugin.isJapanese() ? "�z��Q��" : convertFromSnakeToPascal(msg); + case ARRAY_ELEMENT: + return TraceDebuggerPlugin.isJapanese() ? "�z��v�f�Q��" : convertFromSnakeToPascal(msg); + case ARRAY_CREATE: + return TraceDebuggerPlugin.isJapanese() ? "�z�񐶐���" : convertFromSnakeToPascal(msg); + default: + return ""; + } + } + + private String convertFromSnakeToPascal(String str) { + // note: �X�l�[�N�P�[�X���p�X�J���P�[�X(�������P��Ԃ��󔒂ŋ�؂�)�ɕς��� + String base = str.toLowerCase().replace("_", " "); + StringBuilder sb = new StringBuilder(); + for (int index = -1;;) { + sb.append(base.substring(index + 1, index + 2).toUpperCase()); + int nextIndex = base.indexOf(" ", index + 1); + if (nextIndex == -1) { + sb.append(base.substring(index + 2)); + break; + } else { + sb.append(base.substring(index + 2, nextIndex + 1)); + index = nextIndex; + } + } + return sb.toString(); + } + @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); -// } -// } return null; } diff --git a/src/org/ntlab/traceDebugger/DeltaMarkerView.java b/src/org/ntlab/traceDebugger/DeltaMarkerView.java index 55311ce..04cd525 100644 --- a/src/org/ntlab/traceDebugger/DeltaMarkerView.java +++ b/src/org/ntlab/traceDebugger/DeltaMarkerView.java @@ -46,7 +46,8 @@ tree.setLinesVisible(true); // �e�[�u���̃J�������쐬 - String[] tableColumnTexts = {"Description", "Object ID", "Type", "Alias", "Source", "Line"}; + String[] tableColumnTexts = TraceDebuggerPlugin.isJapanese() ? new String[]{"���s���_", "id", "�^", "�o���`��", "�\�[�X", "�s"} + : new String[]{"ExecutionPoint", "id", "Type", "Occurrence", "Source", "Line"}; int[] tableColumnWidth = {120, 100, 120, 120, 100, 80}; TreeColumn[] tableColumns = new TreeColumn[tableColumnTexts.length]; for (int i = 0; i < tableColumns.length; i++) { @@ -79,6 +80,11 @@ TraceDebuggerPlugin.setActiveView(ID, this); } + @Override + public String getTitle() { + return TraceDebuggerPlugin.isJapanese() ? "�I�u�W�F�N�g�̐ڋ߉ߒ�" : "Process to Relate"; + } + private void createActions() { // TODO Auto-generated method stub } @@ -102,7 +108,6 @@ if (!doNotUpdateCallTreeView) { CallTreeView callTreeView = (CallTreeView)TraceDebuggerPlugin.getActiveView(CallTreeView.ID); callTreeView.update(deltaMarkerManager); -// updateOtherViewsByMarker(selectionMarker); } doNotUpdateCallTreeView = false; viewer.getControl().setFocus(); @@ -201,35 +206,5 @@ 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/JavaElementFinder.java b/src/org/ntlab/traceDebugger/JavaElementFinder.java index ad01b55..5f087c4 100644 --- a/src/org/ntlab/traceDebugger/JavaElementFinder.java +++ b/src/org/ntlab/traceDebugger/JavaElementFinder.java @@ -178,6 +178,7 @@ private static boolean checkMethodSignature(IType type, IMethod method, String methodSignature) { String fqcn = type.getFullyQualifiedName(); + fqcn = fqcn.replace("$", "."); try { StringBuilder jdtMethodSignature = new StringBuilder(); jdtMethodSignature.append((method.isConstructor()) ? (fqcn + "(") : (fqcn + "." + method.getElementName() + "(")); diff --git a/src/org/ntlab/traceDebugger/TraceBreakPoints.java b/src/org/ntlab/traceDebugger/TraceBreakPoints.java index 6ce271a..0981f6f 100644 --- a/src/org/ntlab/traceDebugger/TraceBreakPoints.java +++ b/src/org/ntlab/traceDebugger/TraceBreakPoints.java @@ -104,6 +104,8 @@ } else { signature = type + "." + methodName; } + signature = signature.replace("$", "."); // �����N���X�� $ �̓��\�b�h�V�O�j�`����ł̓h�b�g�ɂȂ� + signature = signature.replaceAll("<.*>", ""); // �e�����̃W�F�l���N�X�̏��̓g���[�X��ɋL�^����Ă��Ȃ��̂ň�v�����邽�߂ɏ��� addTraceBreakPoint(signature, lineNo, available); } catch (CoreException e) { e.printStackTrace(); diff --git a/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java b/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java index d14f836..4c1399c 100644 --- a/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java +++ b/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java @@ -34,6 +34,8 @@ // The shared instance private static TraceDebuggerPlugin plugin; + private static boolean isJapanese = true; + /** * The constructor */ @@ -113,6 +115,13 @@ @Override protected void initializeImageRegistry(ImageRegistry reg) { + // note: �u���[�N�|�C���g�r���[�Ɋւ���A�C�R�� + reg.put(BreakPointView.DEBUG_ELCL, getImageDescriptor("/icons/debug/debug_elcl.png")); + reg.put(BreakPointView.DEBUG_DLCL, getImageDescriptor("/icons/debug/debug_dlcl.png")); + reg.put(BreakPointView.IMPORT_BREAKPOINT_ELCL, getImageDescriptor("/icons/debug/import_brkpts_elcl.png")); + reg.put(BreakPointView.IMPORT_BREAKPOINT_DLCL, getImageDescriptor("/icons/debug/import_brkpts_dlcl.png")); + reg.put(BreakPointViewRelatedDelta.STEP_NEXT_ELCL, getImageDescriptor("/icons/debug/stepnext_elcl.png")); + reg.put(BreakPointViewRelatedDelta.STEP_NEXT_DLCL, getImageDescriptor("/icons/debug/stepnext_dlcl.png")); reg.put(BreakPointViewRelatedDelta.STEP_BACK_INTO_ELCL, getImageDescriptor("/icons/debug/stepbackinto_elcl.png")); reg.put(BreakPointViewRelatedDelta.STEP_BACK_INTO_DLCL, getImageDescriptor("/icons/debug/stepbackinto_dlcl.png")); reg.put(BreakPointViewRelatedDelta.STEP_BACK_OVER_ELCL, getImageDescriptor("/icons/debug/stepbackover_elcl.png")); @@ -120,10 +129,20 @@ reg.put(BreakPointViewRelatedDelta.STEP_BACK_RETURN_ELCL, getImageDescriptor("/icons/debug/stepbackreturn_elcl.png")); reg.put(BreakPointViewRelatedDelta.STEP_BACK_RETURN_DLCL, getImageDescriptor("/icons/debug/stepbackreturn_dlcl.png")); reg.put(BreakPointViewRelatedDelta.BACK_RESUME_ELCL, getImageDescriptor("/icons/debug/backresume_elcl.png")); - reg.put(BreakPointViewRelatedDelta.BACK_RESUME_DLCL, getImageDescriptor("/icons/debug/backresume_dlcl.png")); + reg.put(BreakPointViewRelatedDelta.BACK_RESUME_DLCL, getImageDescriptor("/icons/debug/backresume_dlcl.png")); + + // note: �ϐ��r���[�Ɋւ���A�C�R�� + reg.put(VariableLabelProvider.SPECIAL_VARIABLE, getImageDescriptor("/icons/variable/specialvariable.png")); + reg.put(VariableLabelProvider.THIS_VARIABLE, getImageDescriptor("/icons/variable/thisvariable.png")); + reg.put(VariableLabelProvider.FIELD_VARIABLE, getImageDescriptor("/icons/variable/fieldvariable.png")); + reg.put(VariableLabelProvider.ARG_VARIABLE, getImageDescriptor("/icons/variable/localvariable.png")); } public static ImageDescriptor getImageDescriptor(String path) { return imageDescriptorFromPlugin(PLUGIN_ID, path); } + + public static boolean isJapanese() { + return isJapanese; + } } diff --git a/src/org/ntlab/traceDebugger/TracePointsLabelProvider.java b/src/org/ntlab/traceDebugger/TracePointsLabelProvider.java index 17d420a..278b1fb 100644 --- a/src/org/ntlab/traceDebugger/TracePointsLabelProvider.java +++ b/src/org/ntlab/traceDebugger/TracePointsLabelProvider.java @@ -27,13 +27,14 @@ @Override public Image getColumnImage(Object element, int columnIndex) { - return getImage(element); +// return getImage(element); + return null; } - @Override - public Image getImage(Object element) { - return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); - } +// @Override +// public Image getImage(Object element) { +// return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); +// } private String getReadableSignature(MethodExecution methodExecution) { String signature = methodExecution.getSignature(); diff --git a/src/org/ntlab/traceDebugger/TracePointsView.java b/src/org/ntlab/traceDebugger/TracePointsView.java index 0bb3b5c..63f43d8 100644 --- a/src/org/ntlab/traceDebugger/TracePointsView.java +++ b/src/org/ntlab/traceDebugger/TracePointsView.java @@ -1,8 +1,5 @@ package org.ntlab.traceDebugger; -import java.util.List; -import java.util.Map; - import org.eclipse.core.resources.IMarker; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; @@ -26,9 +23,6 @@ import org.eclipse.ui.part.ViewPart; import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution; 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 TracePointsView extends ViewPart { private TableViewer viewer; @@ -50,13 +44,14 @@ // TODO Auto-generated method stub System.out.println("TracePointsView#createPartControl(Composite)���Ă΂ꂽ��!"); shell = parent.getShell(); - viewer = new TableViewer(parent, SWT.FULL_SELECTION); + viewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION); Table table = viewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); // �e�[�u���̃J�������쐬 - String[] tableColumnTexts = {"Line", "Signature"}; + String[] tableColumnTexts = TraceDebuggerPlugin.isJapanese() ? new String[]{"�s", "���\�b�h"} + : new String[]{"Line", "Signature"}; int[] tableColumnWidth = {80, 1000}; TableColumn[] tableColumns = new TableColumn[tableColumnTexts.length]; for (int i = 0; i < tableColumns.length; i++) { @@ -99,6 +94,11 @@ createPopupMenu(); TraceDebuggerPlugin.setActiveView(ID, this); } + + @Override + public String getTitle() { + return TraceDebuggerPlugin.isJapanese() ? "���s���_�̓o�^" : "MarkedExecutionPoints"; + } @Override public void setFocus() { @@ -107,7 +107,10 @@ viewer.getControl().setFocus(); } - private void createActions() { + private void createActions() { + boolean isJapanese = TraceDebuggerPlugin.isJapanese(); + String msg; + addAction = new Action() { @Override public void run() { @@ -116,8 +119,9 @@ addTracePoint(currentTp); } }; - addAction.setText("Add"); - addAction.setToolTipText("Add"); + msg = (isJapanese) ? "�lj�" : "Add"; + addAction.setText(msg); + addAction.setToolTipText(msg); removeAction = new Action() { @Override @@ -128,8 +132,9 @@ } } }; - removeAction.setText("Remove"); - removeAction.setToolTipText("Remove"); + msg = (isJapanese) ? "�폜" : "Remove"; + removeAction.setText(msg); + removeAction.setToolTipText(msg); jumpAction = new Action() { @Override @@ -139,8 +144,9 @@ } } }; - jumpAction.setText("Jump"); - jumpAction.setToolTipText("Jump"); + msg = (isJapanese) ? "�W�����v" : "Jump"; + jumpAction.setText(msg); + jumpAction.setToolTipText(msg); } private void createToolBar() { diff --git a/src/org/ntlab/traceDebugger/Variable.java b/src/org/ntlab/traceDebugger/Variable.java index 515a915..995cc31 100644 --- a/src/org/ntlab/traceDebugger/Variable.java +++ b/src/org/ntlab/traceDebugger/Variable.java @@ -36,16 +36,16 @@ private boolean alreadyCreatedGrandChildHierarchy = false; private Map additionalAttributes = new HashMap<>(); public static final String NULL_VALUE = "null"; - public static final String RETURN_VARIABLE_NAME = "return"; - public static final String ARG_VARIABLE_NAME = "arg"; - public static final String RECEIVER_VARIABLE_NAME = "receiver"; - public static final String VALUE_VARIABLE_NAME = "value"; - public static final String CONTAINER_VARIABLE_NAME = "container"; + public static final String RETURN_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "�߂�l" : "return"; + public static final String ARG_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "����" : "arg"; + public static final String RECEIVER_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "���V�[�o" : "receiver"; + public static final String VALUE_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "�R���|�[�l���g" : "value"; + public static final String CONTAINER_VARIABLE_NAME = TraceDebuggerPlugin.isJapanese() ? "�R���e�i" : "container"; public enum VariableType { USE_VALUE, USE_CONTAINER, USE_RECEIVER, USE_RETURN, DEF_VALUE, DEF_CONTAINER, DEF_RECEIVER, DEF_ARG, - PARAMETER; + THIS, PARAMETER; public boolean isContainerSide() { return this.equals(USE_CONTAINER) || this.equals(DEF_CONTAINER) || this.equals(USE_RECEIVER) || this.equals(DEF_RECEIVER); @@ -86,12 +86,12 @@ this.lastUpdatePoint = lastUpdatePoint; this.before = before; this.isReturned = isReturned; + this.variableType = variableType; this.deepHierarchy = checkDeepHierarchy(); this.alreadyCreatedChildHierarchy = false; this.alreadyCreatedGrandChildHierarchy = false; this.children.clear(); this.additionalAttributes.clear(); - this.variableType = variableType; } public void update(String valueClassName, String valueId, TracePoint lastUpdatePoint, boolean isReturned) { @@ -152,6 +152,36 @@ return variableName + ": " + valueClassName + "(" + "id = " + valueId + ")"; } +// /** +// * ���̃t�B�[���h���Q�ƌ^�I�u�W�F�N�g���z�񂩂𔻒肵�Ĕ��茋�ʂ�Ԃ�.
+// * (�ϐ��r���[�ɕ\��������f�[�^���ċA�I�ɋ��߂邽�߂�, �Ăяo�����Ŏ��ɂǂ̃��\�b�h���ĂԂ��𔻒f����̂ɗ��p) +// * +// * @param objData +// * @return FIELD: �Q�ƌ^�I�u�W�F�N�g�̏ꍇ, ARRAY: �z��̏ꍇ, NONE: ����ȊO�̏ꍇ +// */ +// private DeepHierarchy checkDeepHierarchy() { +// // note: �t�B�[���h��ID��Type���Ȃ��ꍇ��AType(=ActualType)��"---"�̏ꍇ�͉������Ȃ� +// if (this.getValueId() == null || this.getValueId().isEmpty() +// || this.getValueClassName() == null || this.getValueClassName().isEmpty()) { +// return DeepHierarchy.NONE; +// } +// final String NULL_ACTUAL_TYPE = "---"; // �t�B�[���h�ɑ΂��Ė����I��null����ꂽ�ꍇ��ActualType�̎擾������ +// if (this.getValueClassName().equals(NULL_ACTUAL_TYPE)) return DeepHierarchy.NONE; +// +// final String ARRAY_SIGNATURE_HEAD = "["; // �z��̃V�O�l�`���̐擪�́A�z��̎��������� [ ���A�Ȃ� +// if (this.getValueClassName().startsWith(ARRAY_SIGNATURE_HEAD)) { +// // note: �t�B�[���h��Type���z��^(�@[ �Ŏn�܂�@)�ꍇ (���̔z�񂪎��Še�v�f�ɂ‚��Ă���Ȃ�f�[�^�擾�������Ăяo��) +// return DeepHierarchy.ARRAY; +// } else { +// String[] primitives = {"byte", "short", "int", "long", "float", "double", "char", "boolean"}; +// if (!Arrays.asList(primitives).contains(this.getValueClassName())) { +// // note: �t�B�[���h��Type���Q�ƌ^(=�I�u�W�F�N�g)�̏ꍇ (���̃I�u�W�F�N�g�������Ă���t�B�[���h�ɂ‚��Ă���Ȃ�f�[�^�擾�������Ăяo��) +// return DeepHierarchy.FIELD; +// } +// } +// return DeepHierarchy.NONE; +// } + /** * ���̃t�B�[���h���Q�ƌ^�I�u�W�F�N�g���z�񂩂𔻒肵�Ĕ��茋�ʂ�Ԃ�.
* (�ϐ��r���[�ɕ\��������f�[�^���ċA�I�ɋ��߂邽�߂�, �Ăяo�����Ŏ��ɂǂ̃��\�b�h���ĂԂ��𔻒f����̂ɗ��p) @@ -160,22 +190,24 @@ * @return FIELD: �Q�ƌ^�I�u�W�F�N�g�̏ꍇ, ARRAY: �z��̏ꍇ, NONE: ����ȊO�̏ꍇ */ private DeepHierarchy checkDeepHierarchy() { - // �t�B�[���h��ID��Type���Ȃ��ꍇ��AType(=ActualType)��"---"�̏ꍇ�͉������Ȃ� - if (this.getValueId() == null || this.getValueId().isEmpty() - || this.getValueClassName() == null || this.getValueClassName().isEmpty()) { + // note: �t�B�[���h��ID��Type���Ȃ��ꍇ��AType(=ActualType)��"---"�̏ꍇ�͉������Ȃ� + String id = (variableType.isContainerSide()) ? containerId : valueId; + String className = (variableType.isContainerSide()) ? containerClassName : valueClassName; + if (id == null || id.isEmpty() || className == null || className.isEmpty()) { return DeepHierarchy.NONE; - } + } + final String NULL_ACTUAL_TYPE = "---"; // �t�B�[���h�ɑ΂��Ė����I��null����ꂽ�ꍇ��ActualType�̎擾������ if (this.getValueClassName().equals(NULL_ACTUAL_TYPE)) return DeepHierarchy.NONE; final String ARRAY_SIGNATURE_HEAD = "["; // �z��̃V�O�l�`���̐擪�́A�z��̎��������� [ ���A�Ȃ� if (this.getValueClassName().startsWith(ARRAY_SIGNATURE_HEAD)) { - // �t�B�[���h��Type���z��^(�@[ �Ŏn�܂�@)�ꍇ (���̔z�񂪎��Še�v�f�ɂ‚��Ă���Ȃ�f�[�^�擾�������Ăяo��) + // note: �t�B�[���h��Type���z��^(�@[ �Ŏn�܂�@)�ꍇ (���̔z�񂪎��Še�v�f�ɂ‚��Ă���Ȃ�f�[�^�擾�������Ăяo��) return DeepHierarchy.ARRAY; } else { String[] primitives = {"byte", "short", "int", "long", "float", "double", "char", "boolean"}; if (!Arrays.asList(primitives).contains(this.getValueClassName())) { - // �t�B�[���h��Type���Q�ƌ^(=�I�u�W�F�N�g)�̏ꍇ (���̃I�u�W�F�N�g�������Ă���t�B�[���h�ɂ‚��Ă���Ȃ�f�[�^�擾�������Ăяo��) + // note: �t�B�[���h��Type���Q�ƌ^(=�I�u�W�F�N�g)�̏ꍇ (���̃I�u�W�F�N�g�������Ă���t�B�[���h�ɂ‚��Ă���Ȃ�f�[�^�擾�������Ăяo��) return DeepHierarchy.FIELD; } } @@ -270,15 +302,19 @@ // FieldUpdate fieldUpdate = trace.getFieldUpdate(id, fullyQualifiedFieldName, before, isReturned); // TracePoint updateTracePoint = trace.getFieldUpdateTracePoint(valueId, fullyQualifiedFieldName, before, isReturned); - TracePoint updateTracePoint = VariableUpdatePointFinder.getInstance().getPoint(valueId, fullyQualifiedFieldName, before); + String nextContainerId = (variableType.isContainerSide()) ? containerId : valueId; + String nextClassName = (variableType.isContainerSide()) ? containerClassName : valueClassName; +// TracePoint updateTracePoint = VariableUpdatePointFinder.getInstance().getPoint(valueId, fullyQualifiedFieldName, before); + TracePoint updateTracePoint = VariableUpdatePointFinder.getInstance().getPoint(nextContainerId, fullyQualifiedFieldName, before); // if (updateTracePoint == null) continue; if (updateTracePoint != null) { FieldUpdate fieldUpdate = (FieldUpdate)updateTracePoint.getStatement(); // �t�B�[���h��ID��Type���擾(String) - String fieldObjId = (fieldUpdate != null) ? fieldUpdate.getValueObjId() : "---"; - String fieldType = (fieldUpdate != null) ? fieldUpdate.getValueClassName() : NULL_VALUE; - Variable fieldData = new Variable(fieldName, fullyQualifiedFieldName, valueClassName, valueId, fieldType, fieldObjId, updateTracePoint, before, isReturned, VariableType.USE_VALUE); + String nextValueId = (fieldUpdate != null) ? fieldUpdate.getValueObjId() : "---"; + String nextValueClassName = (fieldUpdate != null) ? fieldUpdate.getValueClassName() : NULL_VALUE; +// Variable fieldData = new Variable(fieldName, fullyQualifiedFieldName, valueClassName, valueId, fieldType, fieldObjId, updateTracePoint, before, isReturned, VariableType.USE_VALUE); + Variable fieldData = new Variable(fieldName, fullyQualifiedFieldName, nextClassName, nextContainerId, nextValueClassName, nextValueId, updateTracePoint, before, isReturned, VariableType.USE_VALUE); this.addChild(fieldData); } else { Variable fieldData = new Variable(fieldName, fullyQualifiedFieldName, valueClassName, valueId, NULL_VALUE, "---", updateTracePoint, before, isReturned, VariableType.USE_VALUE); diff --git a/src/org/ntlab/traceDebugger/VariableLabelProvider.java b/src/org/ntlab/traceDebugger/VariableLabelProvider.java index 058d92b..e9aecfd 100644 --- a/src/org/ntlab/traceDebugger/VariableLabelProvider.java +++ b/src/org/ntlab/traceDebugger/VariableLabelProvider.java @@ -1,32 +1,46 @@ package org.ntlab.traceDebugger; +import org.eclipse.jface.resource.ImageRegistry; 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.graphics.Color; import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; +import org.ntlab.traceDebugger.Variable.VariableType; import org.ntlab.traceDebugger.analyzerProvider.DeltaMarkerManager; public class VariableLabelProvider extends LabelProvider implements ITableLabelProvider, ITableColorProvider { + public static final String SPECIAL_VARIABLE = "SpecialVariable"; + public static final String THIS_VARIABLE = "ThisVariable"; + public static final String FIELD_VARIABLE = "FieldVariable"; + public static final String ARG_VARIABLE = "ArgVariable"; + private Image specialVariableImage = TraceDebuggerPlugin.getDefault().getImageRegistry().getDescriptor(SPECIAL_VARIABLE).createImage(); + private Image thisVariableImage = TraceDebuggerPlugin.getDefault().getImageRegistry().getDescriptor(THIS_VARIABLE).createImage(); + private Image fieldVariableImage = TraceDebuggerPlugin.getDefault().getImageRegistry().getDescriptor(FIELD_VARIABLE).createImage(); + private Image argVariableImage = TraceDebuggerPlugin.getDefault().getImageRegistry().getDescriptor(ARG_VARIABLE).createImage(); + @Override public String getColumnText(Object element, int columnIndex) { if (element instanceof TreeNode) { Object value = ((TreeNode)element).getValue(); if (value instanceof String) { String name = (String)value; + String constructorMsg = TraceDebuggerPlugin.isJapanese() ? "�R���X�g���N�^" : "Constructor"; switch (columnIndex) { - case 0: - if (name.contains("Constructor")) { - return name.substring(0, name.indexOf("Constructor")); + case 0: { + if (name.contains(constructorMsg)) { + return name.substring(0, name.indexOf(constructorMsg)); } return name.substring(0, name.indexOf(":")); + } case 1: String valueName = name.substring(name.indexOf(":") + 1); valueName = valueName.substring(valueName.lastIndexOf(" ") + 1); - boolean isConstructor = name.contains("Constructor"); + boolean isConstructor = name.contains(constructorMsg); return getReadableName(valueName, isConstructor); } } @@ -65,12 +79,27 @@ @Override public Image getColumnImage(Object element, int columnIndex) { - return getImage(element); - } - - @Override - public Image getImage(Object element) { - return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); + if (columnIndex == 0) { + if (element instanceof TreeNode) { + Object value = ((TreeNode)element).getValue(); + if (value instanceof String) { + return specialVariableImage; + } else if (value instanceof Variable) { + Variable variable = (Variable)value; + VariableType variableType = variable.getVariableType(); + if (variableType == VariableType.THIS) { + return thisVariableImage; + } else if (variableType == VariableType.PARAMETER){ + return argVariableImage; + } else if (variableType.isContainerSide()) { + return thisVariableImage; + } else { + return fieldVariableImage; + } + } + } + } + return null; } @Override diff --git a/src/org/ntlab/traceDebugger/VariableView.java b/src/org/ntlab/traceDebugger/VariableView.java index 946d429..7b2404c 100644 --- a/src/org/ntlab/traceDebugger/VariableView.java +++ b/src/org/ntlab/traceDebugger/VariableView.java @@ -38,14 +38,14 @@ tree.setHeaderVisible(true); tree.setLinesVisible(true); - String[] treeColumnTexts = {"Name", "Value"}; - int[] treeColumnWidth = {100, 200}; + String[] treeColumnTexts = (TraceDebuggerPlugin.isJapanese()) ? new String[]{"���O", "�l"} : new String[]{"Name", "Value"}; + int[] treeColumnWidth = {200, 300}; TreeColumn[] treeColumns = new TreeColumn[treeColumnTexts.length]; for (int i = 0; i < treeColumns.length; i++) { treeColumns[i] = new TreeColumn(tree, SWT.NULL); treeColumns[i].setText(treeColumnTexts[i]); treeColumns[i].setWidth(treeColumnWidth[i]); - } + } viewer.setContentProvider(new MyTreeNodeContentProvider()); viewer.setLabelProvider(new VariableLabelProvider()); viewer.addSelectionChangedListener(new ISelectionChangedListener() { @@ -99,6 +99,11 @@ } @Override + public String getTitle() { + return TraceDebuggerPlugin.isJapanese() ? "�ϐ�" : "Variables"; + } + + @Override public void setFocus() { // TODO Auto-generated method stub TraceDebuggerPlugin.setActiveView(ID, this); diff --git a/src/org/ntlab/traceDebugger/VariableViewRelatedDelta.java b/src/org/ntlab/traceDebugger/VariableViewRelatedDelta.java index 7a92308..4303f63 100644 --- a/src/org/ntlab/traceDebugger/VariableViewRelatedDelta.java +++ b/src/org/ntlab/traceDebugger/VariableViewRelatedDelta.java @@ -59,34 +59,13 @@ super.createActions(); jumpAction = new Action() { public void run() { - TracePoint tp = null; TracePoint before = DebuggingController.getInstance().getCurrentTp(); - VariableType variableType = selectedVariable.getVariableType(); - if (variableType.equals(VariableType.USE_VALUE)) { - String containerId = selectedVariable.getContainerId(); - String fieldName = selectedVariable.getFullyQualifiedVariableName(); - tp = VariableUpdatePointFinder.getInstance().getPoint(containerId, fieldName, before); - } else if (variableType.equals(VariableType.USE_RETURN)) { - String receiverId = selectedVariable.getContainerId(); - String valueId = selectedVariable.getValueId(); - String receiverClassName = selectedVariable.getContainerClassName(); - VariableUpdatePointFinder finder = VariableUpdatePointFinder.getInstance(); - if (receiverClassName.contains("Iterator") || receiverClassName.contains("Itr") - || receiverClassName.contains("Collections$UnmodifiableCollection$1")) { - tp = finder.getIteratorPoint(receiverId); - if (tp == null) return; - MethodInvocation mi = ((MethodInvocation)tp.getStatement()); - receiverId = mi.getCalledMethodExecution().getThisObjId(); - } - tp = finder.getDefinitionInvocationPoint(receiverId, valueId, before); - } - if (tp == null) return; + TracePoint jumpPoint = findJumpPoint(selectedVariable, before); + if (jumpPoint == null) return; DebuggingController controller = DebuggingController.getInstance(); - controller.jumpToTheTracePoint(tp, false); + controller.jumpToTheTracePoint(jumpPoint, false); } }; - jumpAction.setText("Jump to Definition"); - jumpAction.setToolTipText("Jump to Definition"); deltaActionForContainerToComponent = new Action() { @Override @@ -95,8 +74,6 @@ newDeltaMarkerView.extractDeltaForContainerToComponent(selectedVariable); } }; - deltaActionForContainerToComponent.setText("Extract Delta"); - deltaActionForContainerToComponent.setToolTipText("Extract Delta"); deltaActionForThisToAnother = new Action() { @Override @@ -117,10 +94,56 @@ newDeltaMarkerView.extractDeltaForThisToAnother(thisId, thisClassName, anotherId, anotherClassName, before); } }; - deltaActionForThisToAnother.setText("Extract Delta"); - deltaActionForThisToAnother.setToolTipText("Extract Delta"); } + private TracePoint findJumpPoint(Variable variable, TracePoint before) { + VariableType variableType = selectedVariable.getVariableType(); + if (variableType.equals(VariableType.USE_VALUE)) { + String containerId = selectedVariable.getContainerId(); + String fieldName = selectedVariable.getFullyQualifiedVariableName(); + return VariableUpdatePointFinder.getInstance().getPoint(containerId, fieldName, before); + } else if (variableType.equals(VariableType.USE_RETURN)) { + return findJumpPointWithReturnValue(variable, before); + } + return null; + } + + private TracePoint findJumpPointWithReturnValue(Variable variable, TracePoint before) { + TracePoint tp = null; + String receiverId = selectedVariable.getContainerId(); + String valueId = selectedVariable.getValueId(); + String receiverClassName = selectedVariable.getContainerClassName(); + VariableUpdatePointFinder finder = VariableUpdatePointFinder.getInstance(); + + // note: �C�e���[�^�̏ꍇ�͂��̃C�e���[�^�̎擾���̃R���N�V������ID�����ɂ��� + if (receiverClassName.contains("Iterator") || receiverClassName.contains("Itr") + || receiverClassName.contains("Collections$UnmodifiableCollection$1")) { + tp = finder.getIteratorPoint(receiverId); // �C�e���[�^�擾���̃|�C���g���擾 + if (tp == null) return null; + MethodInvocation mi = ((MethodInvocation)tp.getStatement()); + receiverId = mi.getCalledMethodExecution().getThisObjId(); // �C�e���[�^�̎擾���̃R���N�V������ID + receiverClassName = mi.getCalledMethodExecution().getThisClassName(); // �C�e���[�^�̎擾���̃R���N�V�����̃N���X�� + } + + // note: �W�����v��ƂȂ� �I�u�W�F�N�g�̑���|�C���g�������̓R���N�V�����ւ̒lj��|�C���g���擾 + tp = finder.getDefinitionInvocationPoint(receiverId, valueId, before); + + // note: �W�����v��̃|�C���g�����‚���Ȃ������ꍇ�ŁA���ƒR���N�V�����ւ̒lj��|�C���g��T���Ă���ꍇ�̓R���N�V�����̏悹�������Œlj����Ă��Ȃ�����T���ɍs�� + if (tp == null && receiverClassName.startsWith("java.util.")) { + String afterCollectionId = receiverId; + while (true) { + tp = finder.getTransferCollectionPoint(afterCollectionId, before); + if (tp == null) break; // �R���N�V�����̏悹������������ȏ�Ȃ��ꍇ + MethodInvocation mi = ((MethodInvocation)tp.getStatement()); + String fromCollectionId = mi.getCalledMethodExecution().getArguments().get(0).getId(); + tp = finder.getDefinitionInvocationPoint(fromCollectionId, valueId, before); + if (tp != null) break; // �R���N�V�����̏悹�������ŃI�u�W�F�N�g�̒lj������‚������ꍇ + afterCollectionId = fromCollectionId; + } + } + return tp; + } + @Override protected void createPopupMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); @@ -132,15 +155,17 @@ VariableType variableType = selectedVariable.getVariableType(); if (variableType.equals(VariableType.USE_VALUE)) { manager.add(jumpAction); - jumpAction.setText("Jump to Definition"); - jumpAction.setToolTipText("Jump to Definition"); + String msg = TraceDebuggerPlugin.isJapanese() ? "�l�̑�����_�ɔ��" : "Back to Value Stored Moment"; + jumpAction.setText(msg); + jumpAction.setToolTipText(msg); } else if (variableType.equals(VariableType.USE_RETURN)) { manager.add(jumpAction); if (updateDeltaActionForThisToAnotherTexts(selectedVariable)) { manager.add(deltaActionForThisToAnother); } - jumpAction.setText("Jump to Addition"); - jumpAction.setToolTipText("Jump to Addition"); + String msg = TraceDebuggerPlugin.isJapanese() ? "�I�u�W�F�N�g�̒lj����_�ɔ��" : "Back to Object Added Moment"; + jumpAction.setText(msg); + jumpAction.setToolTipText(msg); } else if (variableType.isDef()) { if (updateDeltaActionForContainerToComponentTexts(selectedVariable)) { manager.add(deltaActionForContainerToComponent); @@ -174,7 +199,8 @@ String containerClassName = selectedVariable.getContainerClassName(); if (containerId != null && containerClassName != null) { containerClassName = containerClassName.substring(containerClassName.lastIndexOf(".") + 1); - String textForContainerToComponent = String.format("Extract Delta [ %s (id = %s) -> %s (id = %s) ]", containerClassName, containerId, valueClassName, valueId); + String msg = TraceDebuggerPlugin.isJapanese() ? "�I�u�W�F�N�g�̐ڋ߉ߒ����o" : "Extract Process to Relate"; + String textForContainerToComponent = String.format("%s [ %s (id = %s) -> %s (id = %s) ]", msg, containerClassName, containerId, valueClassName, valueId); deltaActionForContainerToComponent.setText(textForContainerToComponent); deltaActionForContainerToComponent.setToolTipText(textForContainerToComponent); return true; @@ -183,20 +209,6 @@ deltaActionForContainerToComponent.setText(""); deltaActionForContainerToComponent.setToolTipText(""); return false; - -// String containerId = selectedVariable.getContainerId(); -// String containerClassName = selectedVariable.getContainerClassName(); -// if (containerId != null && containerClassName != null) { -// containerClassName = containerClassName.substring(containerClassName.lastIndexOf(".") + 1); -// String textForContainerToComponent = String.format("Extract Delta [ %s (id = %s) -> %s (id = %s) ]", containerClassName, containerId, valueClassName, valueId); -// deltaActionForContainerToComponent.setText(textForContainerToComponent); -// deltaActionForContainerToComponent.setToolTipText(textForContainerToComponent); -// return true; -// } else { -// deltaActionForContainerToComponent.setText(""); -// deltaActionForContainerToComponent.setToolTipText(""); -// return false; -// } } private boolean updateDeltaActionForThisToAnotherTexts(Variable variable) { @@ -215,8 +227,9 @@ 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 (id = %s) -> %s (id = %s) ]", thisClassName, thisId, anotherClassName, anotherId); + thisClassName = thisClassName.substring(thisClassName.lastIndexOf(".") + 1); + String msg = TraceDebuggerPlugin.isJapanese() ? "�I�u�W�F�N�g�̐ڋ߉ߒ����o" : "Extract Process to Relate"; + String textForThisToAnother = String.format("%s [ %s (id = %s) -> %s (id = %s) ]", msg, thisClassName, thisId, anotherClassName, anotherId); deltaActionForThisToAnother.setText(textForThisToAnother); deltaActionForThisToAnother.setToolTipText(textForThisToAnother); return true; diff --git a/src/org/ntlab/traceDebugger/Variables.java b/src/org/ntlab/traceDebugger/Variables.java index e9ae236..13cd031 100644 --- a/src/org/ntlab/traceDebugger/Variables.java +++ b/src/org/ntlab/traceDebugger/Variables.java @@ -75,7 +75,7 @@ String thisObjId = methodExecution.getThisObjId(); String thisClassName = methodExecution.getThisClassName(); if (before == null) before = tp; - Variable variable = new Variable("this", null, null, thisClassName, thisObjId, before, isReturned); + Variable variable = new Variable("this", null, null, thisClassName, thisObjId, before, isReturned, VariableType.THIS); roots.add(variable); variable.createNextHierarchyState(); } @@ -225,7 +225,8 @@ Variable value = new Variable(Variable.VALUE_VARIABLE_NAME, containerClassName, containerObjId, valueClassName, valueObjId, from, isReturned, VariableType.USE_VALUE); specialVariablesOfUseSide.add(container); specialVariablesOfUseSide.add(value); - parentNodeNameOfUseSide = "after field get of:" + fa.getFieldName(); + parentNodeNameOfUseSide = TraceDebuggerPlugin.isJapanese() ? "�t�B�[���h�Q�ƌ�:" : "after field get of:"; + parentNodeNameOfUseSide += fa.getFieldName(); } else if (fromStatement instanceof MethodInvocation) { MethodInvocation mi = (MethodInvocation)fromStatement; MethodExecution calledME = mi.getCalledMethodExecution(); @@ -240,9 +241,11 @@ specialVariablesOfUseSide.add(receiver); specialVariablesOfUseSide.add(returned); if (calledME.isConstructor()) { - parentNodeNameOfUseSide = "after invocation of Constructor:" + calledME.getSignature(); + parentNodeNameOfUseSide = TraceDebuggerPlugin.isJapanese() ? "�Ăяo���� �R���X�g���N�^:" : "after invocation of Constructor:"; + parentNodeNameOfUseSide += calledME.getSignature(); } else { - parentNodeNameOfUseSide = "after invocation of:" + calledME.getSignature(); + parentNodeNameOfUseSide = TraceDebuggerPlugin.isJapanese() ? "�Ăяo����:" : "after invocation of:"; + parentNodeNameOfUseSide += calledME.getSignature(); } } } @@ -261,7 +264,8 @@ Variable value = new Variable(Variable.VALUE_VARIABLE_NAME, containerClassName, containerObjId, valueClassName, valueObjId, to, isReturned, VariableType.DEF_VALUE); specialVariablesDefSide.add(container); specialVariablesDefSide.add(value); - parentNodeNameOfDefSide = "before field set of:" + fu.getFieldName(); + parentNodeNameOfDefSide = TraceDebuggerPlugin.isJapanese() ? "�t�B�[���h����O:" : "before field set of:"; + parentNodeNameOfDefSide += fu.getFieldName(); } else if (toStatement instanceof MethodInvocation) { MethodInvocation mi = (MethodInvocation)toStatement; MethodExecution calledME = mi.getCalledMethodExecution(); @@ -283,9 +287,11 @@ specialVariablesDefSide.add(arg); } if (calledME.isConstructor()) { - parentNodeNameOfDefSide = "before invocation of Constructor:" + calledME.getSignature(); + parentNodeNameOfDefSide = TraceDebuggerPlugin.isJapanese() ? "�Ăяo���O �R���X�g���N�^:" : "before invocation of Constructor:"; + parentNodeNameOfDefSide += calledME.getSignature(); } else { - parentNodeNameOfDefSide = "before invocation of:" + calledME.getSignature(); + parentNodeNameOfDefSide = TraceDebuggerPlugin.isJapanese() ? "�Ăяo���O:" : "before invocation of:"; + parentNodeNameOfDefSide += calledME.getSignature(); } } } diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java index 532ee52..0e593ad 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java @@ -38,6 +38,7 @@ import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint; import org.ntlab.traceDebugger.JavaEditorOperator; import org.ntlab.traceDebugger.JavaElementFinder; +import org.ntlab.traceDebugger.TraceDebuggerPlugin; public class DeltaMarkerManager { private Map> markerIdToMarkers = new HashMap<>(); @@ -73,7 +74,7 @@ public TreeNode[] getMarkerTreeNodes() { TreeNode[] roots = new TreeNode[] { new TreeNode(""), - new TreeNode("Related Aliases"), + new TreeNode(TraceDebuggerPlugin.isJapanese() ? "�ڋ߉ߒ�" : "Approach"), new TreeNode("") }; List markers; @@ -147,13 +148,15 @@ } public void createMarkerAndOpenJavaFileForAll() { - markAndOpenJavaFileForCoordinator(coordinator, "Coordinator", DeltaMarkerManager.COORDINATOR_DELTA_MARKER); + String msg = TraceDebuggerPlugin.isJapanese() ? "�J�n���_" : "InitialPoint"; + markAndOpenJavaFileForCoordinator(coordinator, msg, DeltaMarkerManager.COORDINATOR_DELTA_MARKER); List dstSideAliases = new ArrayList<>(aliasCollector.getDstSideRelatedAliases()); List srcSideAliases = new ArrayList<>(aliasCollector.getSrcSideRelatedAliases()); List> relatedAliasesList = new ArrayList<>(); relatedAliasesList.add(dstSideAliases); relatedAliasesList.add(srcSideAliases); - String[] messagesTemplates = {"GetterSide%03d", "SetterSide%03d"}; + String[] messagesTemplates = TraceDebuggerPlugin.isJapanese() ? new String[]{"�Q�Ɛ摤%03d", "�Q�ƌ���%03d"} + : new String[]{"ReferredSide%03d", "ReferringSide%03d"}; String[] markerIDList = {DST_SIDE_DELTA_MARKER, SRC_SIDE_DELTA_MARKER}; for (int i = 0; i < relatedAliasesList.size(); i++) { List relatedAliases = relatedAliasesList.get(i); @@ -164,7 +167,8 @@ markAndOpenJavaFileForAlias(alias, message, markerIDList[i]); } } - markAndOpenJavaFileForCreationPoint(relatedPoint, relatedPointReference, "RelatedPoint", DeltaMarkerManager.BOTTOM_DELTA_MARKER); + msg = TraceDebuggerPlugin.isJapanese() ? "�Q�Ǝ��_" : "RelatedPoint"; + markAndOpenJavaFileForCreationPoint(relatedPoint, relatedPointReference, msg, DeltaMarkerManager.BOTTOM_DELTA_MARKER); } private void markAndOpenJavaFileForAlias(Alias alias, String message, String markerId) { @@ -382,7 +386,7 @@ } @Override public boolean visit(org.eclipse.jdt.core.dom.SimpleName node) { - // note: ���\�b�h�Ăяo���̃��V�[�o���t�B�[���h�̏ꍇ�̓t�B�[���h�A�N�Z�X�̃m�[�h���Ɨ��Ȃ�������ɂ���Œʂ� + // note: ���\�b�h�Ăяo���̃��V�[�o��this�̏ꍇ int lineNo = cUnit.getLineNumber(node.getStartPosition()); if (lineNo != alias.getLineNo()) return true; if (!(node.getParent() instanceof org.eclipse.jdt.core.dom.MethodInvocation)) return true; @@ -392,7 +396,9 @@ if (!(name1.equals(name2))) return true; int start = node.getStartPosition(); int end = start; - if (source.startsWith("this.", start)) { + int index = node.toString().indexOf("this."); + if (index != -1) { + start += index; end = start + "this".length(); } attributes.put(IMarker.CHAR_START, start); @@ -407,12 +413,15 @@ if (lineNo != alias.getLineNo()) return true; String name1 = node.toString(); name1 = name1.substring(name1.indexOf("(")); + name1 = name1.replaceAll("<.*>", ""); String name2 = fa.getFieldName(); name2 = name2.substring(name2.lastIndexOf(".") + 1); if (!(name1.contains(name2))) return true; int start = node.getStartPosition(); int end = start; - if (source.startsWith("this.", start)) { + int index = node.toString().indexOf("this"); + if (index != -1) { + start += index; end = start + "this".length(); } attributes.put(IMarker.CHAR_START, start); @@ -424,13 +433,11 @@ 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(); int start = node.getStartPosition(); - if (expression != null) { - start = node.getExpression().getStartPosition(); - } int end = start; - if (source.startsWith("this.", start)) { + int index = node.toString().indexOf("this"); + if (index != -1) { + start += index; end = start + "this".length(); } attributes.put(IMarker.CHAR_START, start); @@ -492,6 +499,7 @@ if (lineNo != alias.getLineNo()) return true; String name1 = node.toString(); name1 = name1.substring("new ".length(), name1.indexOf("(") + 1); + name1 = name1.replaceAll("<.*>", ""); String name2 = calledMe.getCallerSideSignature(); name2 = name2.substring(0, name2.indexOf("(") + 1); name2 = name2.substring(name2.lastIndexOf(".") + 1); @@ -546,6 +554,7 @@ if (lineNo != alias.getLineNo()) return true; String name1 = node.toString(); name1 = name1.substring("new ".length(), name1.indexOf("(") + 1); + name1 = name1.replaceAll("<.*>", ""); String name2 = calledMe.getCallerSideSignature(); name2 = name2.substring(name2.lastIndexOf(".") + 1, name2.indexOf("(") + 1); if (!(name1.equals(name2))) return true; @@ -571,6 +580,7 @@ if (lineNo != alias.getLineNo()) return true; String name1 = node.toString(); name1 = name1.substring("new ".length(), name1.indexOf("(") + 1); + name1 = name1.replaceAll("<.*>", ""); String name2 = calledMe.getCallerSideSignature(); name2 = name2.substring(0, name2.indexOf("(") + 1); name2 = name2.substring(name2.lastIndexOf(".") + 1); @@ -653,6 +663,7 @@ if (lineNo != alias.getLineNo()) return true; String name1 = node.toString(); name1 = name1.substring(name1.indexOf("(")); + name1 = name1.replaceAll("<.*>", ""); String name2 = fa.getFieldName(); name2 = name2.substring(name2.lastIndexOf(".") + 1); if (!(name1.contains(name2))) return true; @@ -668,13 +679,10 @@ 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 = node.getStartPosition(); - if (expression != null) { - start = expression.getStartPosition(); - } + start += node.toString().indexOf(fieldName); int end = start + fieldName.length(); attributes.put(IMarker.CHAR_START, start); attributes.put(IMarker.CHAR_END, end); diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/VariableUpdatePointFinder.java b/src/org/ntlab/traceDebugger/analyzerProvider/VariableUpdatePointFinder.java index d431199..614676f 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/VariableUpdatePointFinder.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/VariableUpdatePointFinder.java @@ -22,6 +22,7 @@ private Map>> updatePoints = new HashMap<>(); // �R���e�iID�ƃt�B�[���h�����L�[�ɂ����ϐ��X�V�|�C���g private Map>> definitionInvocationPoints = new HashMap<>(); // ���V�[�oID�ƈ���ID���L�[�ɂ����R���N�V�����ւ̒lj��|�C���g private Map gettingIteratorPoints = new HashMap<>(); // �C�e���[�^��ID���L�[�ɂ�����擾�����|�C���g + private Map> changeOtherCollectionPoints = new HashMap<>(); // �悹������̃R���N�V����ID���L�[�ɂ�����悹�������n�_�̃|�C���g public void setTrace(Trace trace) { this.trace = trace; @@ -33,6 +34,7 @@ } private void init() { + reset(); registerUpdatePoints(); System.out.println(updatePoints); System.out.println(definitionInvocationPoints); @@ -54,12 +56,22 @@ } else if (statement instanceof MethodInvocation) { MethodInvocation mi = (MethodInvocation)statement; MethodExecution calledME = mi.getCalledMethodExecution(); - String methodName = calledME.getSignature(); + String methodName = calledME.getSignature(); + List args = calledME.getArguments(); if (methodName.contains(".add(") || methodName.contains(".addElement(")) { registerdefinitionInvocationPoint(start, calledME); } else if (methodName.contains(".iterator(") || methodName.contains("Iterator(")) { registerIteratorPoint(start, calledME); - } + } else if (args.size() == 1 && args.get(0).getActualType().startsWith("java.util.")) { + ObjectReference returnValue = calledME.getReturnValue(); + if (calledME.getThisClassName().startsWith("java.util.") && !(calledME.getThisObjId().equals("0"))) { + String toCollectionId = calledME.getThisObjId(); + registerChangeOtherCollectionPoint(start, toCollectionId); + } else if (returnValue != null && returnValue.getActualType().startsWith("java.util.")) { + String toCollectionId = returnValue.getId(); + registerChangeOtherCollectionPoint(start, toCollectionId); + } + } } } } @@ -71,19 +83,6 @@ String fieldName = fu.getFieldName(); register(updatePoints, objectId, fieldName, tp); } - -// private void registerdefinitionInvocationPoints(TracePoint tp, MethodInvocation mi) { -// MethodExecution calledME = mi.getCalledMethodExecution(); -// String methodName = calledME.getSignature(); -// List args = calledME.getArguments(); -// if (methodName.contains(".add(") || methodName.contains(".addElement(")) { -// if (args.size() == 1) { -// String receiverId = calledME.getThisObjId(); -// String argId = args.get(0).getId(); -// register(definitionInvocationPoints, receiverId, argId, tp); -// } -// } -// } private void registerdefinitionInvocationPoint(TracePoint tp, MethodExecution calledME) { List args = calledME.getArguments(); @@ -100,6 +99,15 @@ gettingIteratorPoints.put(iteratorId, tp.duplicate()); } + private void registerChangeOtherCollectionPoint(TracePoint tp, String toCollectionId) { + List tracePoints = changeOtherCollectionPoints.get(toCollectionId); + if (tracePoints == null) { + tracePoints = new ArrayList(); + changeOtherCollectionPoints.put(toCollectionId, tracePoints); + } + tracePoints.add(tp.duplicate()); + } + private void register(Map>> map, String key1, String key2, TracePoint tp) { Map> innerMap = map.get(key1); if (innerMap == null) { @@ -141,6 +149,18 @@ return gettingIteratorPoints.get(iteratorId); } + public TracePoint getTransferCollectionPoint(String toCollectionId, TracePoint before) { + List tracePoints = changeOtherCollectionPoints.get(toCollectionId); + long beforeTime = before.getStatement().getTimeStamp(); + TracePoint tmp = null; + for (TracePoint tp : tracePoints) { + long time = tp.getStatement().getTimeStamp(); + if (time >= beforeTime) return tmp; + tmp = tp; + } + return tmp; + } + private TracePoint getPoint(Map>> map, String key1, String key2, TracePoint before) { Map> innerMap = map.get(key1); if (innerMap == null) return null; @@ -154,5 +174,12 @@ tmp = tp; } return tmp; - } + } + + private void reset() { + updatePoints.clear(); + definitionInvocationPoints.clear(); + gettingIteratorPoints.clear(); + changeOtherCollectionPoints.clear(); + } }