diff --git a/org.ntlab.reverseDebugger/plugin.xml b/org.ntlab.reverseDebugger/plugin.xml index 265e6ed..5011c18 100644 --- a/org.ntlab.reverseDebugger/plugin.xml +++ b/org.ntlab.reverseDebugger/plugin.xml @@ -23,9 +23,16 @@ + + diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/DebuggingControlAction.java b/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/DebuggingControlAction.java index 46c7e28..d46ed53 100644 --- a/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/DebuggingControlAction.java +++ b/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/DebuggingControlAction.java @@ -32,6 +32,7 @@ import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; import org.eclipse.ui.PartInitException; +import org.ntlab.reversedebugger.ObjectFlowAliases; import com.sun.jdi.AbsentInformationException; import com.sun.jdi.BooleanValue; @@ -218,36 +219,44 @@ int aliasNo = scanner.nextInt(); methodName = "get"; Value startAlias = callInstanceMethod(vm, thread, methodName, (ObjectReference)startAliasList, vm.mirrorOf(aliasNo)); - methodName = "toString"; - Value str = callInstanceMethod(vm, thread, methodName, (ObjectReference)startAlias); - printValue("", "", str, true); - methodName = "getObjectFlow"; - Value aliasLists = callStaticMethod(vm, thread, packageName, className, methodName, startAlias); - System.out.println(); - // �擾�������X�g�̒��g�����[�v�ʼn񂵂Ȃ���m�F��, �‚��łɓ��Y�\�[�X�t�@�C����Ώ�Eclipse�ŊJ�����Ă݂� - methodName = "size"; - int aliasListsSize = ((IntegerValue)callInstanceMethod(vm, thread, methodName, (ObjectReference)aliasLists)).value(); - for (int i = 0; i < aliasListsSize; i++) { - ArrayList aliasViewList = new ArrayList<>(); - System.out.println("---------------------------------------------"); - System.out.println("���X�g" + i); - methodName = "get"; - Value aliasList = callInstanceMethod(vm, thread, methodName,(ObjectReference)aliasLists, vm.mirrorOf(i)); - methodName = "size"; - int aliasListSize = ((IntegerValue)callInstanceMethod(vm, thread, methodName, (ObjectReference)aliasList)).value(); - for (int j = 0; j < aliasListSize; j++) { - methodName = "get"; - Value alias = callInstanceMethod(vm, thread, methodName, (ObjectReference)aliasList, vm.mirrorOf(j)); - methodName = "toString"; - Value str2 = callInstanceMethod(vm, thread, methodName, (ObjectReference)alias); - printValue("", "", str2, true); - methodName = "getMethodExecution"; - Value aliasMethodExecution = callInstanceMethod(vm ,thread, methodName, (ObjectReference)alias); - openSrcFileOfMethodExecution(vm, thread, aliasMethodExecution); - aliasViewList.add(new MethodCaller(vm, thread, (ObjectReference)alias)); - } - } + // DebuggingControl������GUI�֘A�̃N���X�̕��ɖ�����V�[�h�G�C���A�X��n���ăI�u�W�F�N�g�t���[�����s���Ă݂� + // �ꎞ�I�Ȃ��̂�, �ŏI�I�ɂ͂����ł�鏈���ł͂Ȃ��Ȃ�̂ŕs�v�ɂȂ�͂� + ObjectFlowAliases.getInstance().getObjectFlow(new MethodCaller(vm, thread, (ObjectReference)startAlias)); + + // �ȉ��͈ꎞ�I�ɃR�����g�A�E�g���Ă��� +// methodName = "toString"; +// Value str = callInstanceMethod(vm, thread, methodName, (ObjectReference)startAlias); +// printValue("", "", str, true); +// methodName = "getObjectFlow"; +// Value aliasLists = callStaticMethod(vm, thread, packageName, className, methodName, startAlias); +// System.out.println(); +// +// // �擾�������X�g�̒��g�����[�v�ʼn񂵂Ȃ���m�F��, �‚��łɓ��Y�\�[�X�t�@�C����Ώ�Eclipse�ŊJ�����Ă݂� +// methodName = "size"; +// int aliasListsSize = ((IntegerValue)callInstanceMethod(vm, thread, methodName, (ObjectReference)aliasLists)).value(); +// List> objectFlowAliasLists = new ArrayList<>(); +// for (int i = 0; i < aliasListsSize; i++) { +// List objectFlowAliasList = new ArrayList<>(); +// objectFlowAliasLists.add(objectFlowAliasList); +// System.out.println("---------------------------------------------"); +// System.out.println("���X�g" + i); +// methodName = "get"; +// Value aliasList = callInstanceMethod(vm, thread, methodName,(ObjectReference)aliasLists, vm.mirrorOf(i)); +// methodName = "size"; +// int aliasListSize = ((IntegerValue)callInstanceMethod(vm, thread, methodName, (ObjectReference)aliasList)).value(); +// for (int j = 0; j < aliasListSize; j++) { +// methodName = "get"; +// Value alias = callInstanceMethod(vm, thread, methodName, (ObjectReference)aliasList, vm.mirrorOf(j)); +// methodName = "toString"; +// Value str2 = callInstanceMethod(vm, thread, methodName, (ObjectReference)alias); +// printValue("", "", str2, true); +// methodName = "getMethodExecution"; +// Value aliasMethodExecution = callInstanceMethod(vm ,thread, methodName, (ObjectReference)alias); +// openSrcFileOfMethodExecution(vm, thread, aliasMethodExecution); +// objectFlowAliasList.add(new MethodCaller(vm, thread, (ObjectReference)alias)); +// } +// } } /** diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/MethodCaller.java b/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/MethodCaller.java index 6174e1a..eacfc7c 100644 --- a/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/MethodCaller.java +++ b/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/MethodCaller.java @@ -30,6 +30,14 @@ this.obj = obj; } + public VirtualMachine getVm() { + return vm; + } + + public ThreadReference getThread() { + return thread; + } + public ObjectReference getObj() { return obj; } diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/AliasLabelProvider.java b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/AliasLabelProvider.java deleted file mode 100644 index cf4b4eb..0000000 --- a/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/AliasLabelProvider.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.ntlab.reversedebugger; - -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.swt.graphics.Image; -import org.eclipse.ui.ISharedImages; -import org.eclipse.ui.PlatformUI; -import org.ntlab.debuggingControl.MethodCaller; - -import com.sun.jdi.ClassNotLoadedException; -import com.sun.jdi.IncompatibleThreadStateException; -import com.sun.jdi.IntegerValue; -import com.sun.jdi.InvalidTypeException; -import com.sun.jdi.InvocationException; -import com.sun.jdi.ObjectReference; -import com.sun.jdi.StringReference; -import com.sun.jdi.Value; - -public class AliasLabelProvider extends LabelProvider implements ITableLabelProvider { - - @Override - public String getColumnText(Object element, int columnIndex) { - if (element instanceof MethodCaller) { - MethodCaller mc = (MethodCaller)element; - try { - switch (columnIndex) { - case 0: - return ((StringReference)mc.callInstanceMethod("getObjectId")).value(); - case 1: - return String.valueOf(((IntegerValue)mc.callInstanceMethod("getLineNo")).value()); - case 2: - return ((StringReference)mc.callInstanceMethod("getStatementType")).value(); - case 3: - return ((StringReference)mc.callInstanceMethod("getStatementSignature")).value(); - case 4: - return String.format("%3d", (((IntegerValue)mc.callInstanceMethod("getOccurrenceExp")).value())); - case 5: - return ((StringReference)mc.callInstanceMethod("getClassName")).value(); - } - } catch (InvalidTypeException | ClassNotLoadedException | InvocationException | IncompatibleThreadStateException e) { - e.printStackTrace(); - } - } - return "�e�X�g�p�e�L�X�g" + columnIndex; - } - - @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); - } -} diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/AliasView.java b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/AliasView.java deleted file mode 100644 index 0911408..0000000 --- a/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/AliasView.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.ntlab.reversedebugger; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.ISharedImages; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.internal.dialogs.ViewLabelProvider; -import org.eclipse.ui.part.ViewPart; -import org.ntlab.debuggingControl.DebuggingControlAction; -import org.ntlab.debuggingControl.MethodCaller; - -public class AliasView extends ViewPart { - private TableViewer viewer; - private IAction updateAction; - private SeedAliases seedAliases = new SeedAliases(); - - public AliasView() { - // TODO Auto-generated constructor stub - System.out.println("AliasView�N���X���������ꂽ��!"); - } - - @Override - public void createPartControl(Composite parent) { - // TODO Auto-generated method stub - System.out.println("AliasView#createPartControl(Composite)���Ă΂ꂽ��!"); - viewer = new TableViewer(parent); - Table table = viewer.getTable(); - table.setHeaderVisible(true); - table.setLinesVisible(true); - - // �e�[�u���̃J�������쐬 - String[] tableColumnTexts = {"objectID", "lineNo", "statementType", "statementSignature", "exp", "class"}; - int[] tableColumnWidth = {150, 80, 180, 400, 80, 400}; - TableColumn[] tableColumns = new TableColumn[tableColumnTexts.length]; - for (int i = 0; i < tableColumns.length; i++) { - tableColumns[i] = new TableColumn(table, SWT.NULL); - tableColumns[i].setText(tableColumnTexts[i]); - tableColumns[i].setWidth(tableColumnWidth[i]); - } - - viewer.setContentProvider(new ArrayContentProvider()); - viewer.setLabelProvider(new AliasLabelProvider()); - viewer.setInput(seedAliases.getSeedAliases()); - createActions(); - createToolBar(); - createMenuBar(); - } - - @Override - public void setFocus() { - // TODO Auto-generated method stub - viewer.getControl().setFocus(); - } - - private void createActions() { - updateAction = new Action() { - @Override - public void run() { - seedAliases.reset(); - viewer.setInput(seedAliases.getSeedAliases()); - } - }; - updateAction.setText("�e�L�X�g"); - updateAction.setToolTipText("�c�[���`�b�v�e�L�X�g"); - updateAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); - } - - private void createToolBar() { - IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); - mgr.add(updateAction); - } - - private void createMenuBar() { - IMenuManager mgr = getViewSite().getActionBars().getMenuManager(); - mgr.add(updateAction); - } -} diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/ObjectFlowAliasLabelProvider.java b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/ObjectFlowAliasLabelProvider.java new file mode 100644 index 0000000..ca98b23 --- /dev/null +++ b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/ObjectFlowAliasLabelProvider.java @@ -0,0 +1,57 @@ +package org.ntlab.reversedebugger; + +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.swt.graphics.Image; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.PlatformUI; +import org.ntlab.debuggingControl.MethodCaller; + +import com.sun.jdi.ClassNotLoadedException; +import com.sun.jdi.IncompatibleThreadStateException; +import com.sun.jdi.IntegerValue; +import com.sun.jdi.InvalidTypeException; +import com.sun.jdi.InvocationException; +import com.sun.jdi.StringReference; + +public class ObjectFlowAliasLabelProvider extends LabelProvider implements ITableLabelProvider { + + @Override + public String getColumnText(Object element, int columnIndex) { + if (element instanceof MethodCaller) { + MethodCaller mc = (MethodCaller)element; + if (mc.getObj() == null) { + return ""; + } + try { + switch (columnIndex) { + case 0: + return ((StringReference)mc.callInstanceMethod("getObjectId")).value(); + case 1: + return String.valueOf(((IntegerValue)mc.callInstanceMethod("getLineNo")).value()); + case 2: + return ((StringReference)mc.callInstanceMethod("getStatementType")).value(); + case 3: + return ((StringReference)mc.callInstanceMethod("getStatementSignature")).value(); + case 4: + return String.format("%3d", (((IntegerValue)mc.callInstanceMethod("getOccurrenceExp")).value())); + case 5: + return ((StringReference)mc.callInstanceMethod("getClassName")).value(); + } + } catch (InvalidTypeException | ClassNotLoadedException | InvocationException | IncompatibleThreadStateException e) { + e.printStackTrace(); + } + } + return "�e�X�g�p�e�L�X�g" + columnIndex; + } + + @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); + } +} diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/ObjectFlowAliasView.java b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/ObjectFlowAliasView.java new file mode 100644 index 0000000..54c0759 --- /dev/null +++ b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/ObjectFlowAliasView.java @@ -0,0 +1,81 @@ +package org.ntlab.reversedebugger; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.part.ViewPart; + +public class ObjectFlowAliasView extends ViewPart { + private TableViewer viewer; + private IAction updateAction; + private ObjectFlowAliases objectFlowAliases = ObjectFlowAliases.getInstance(); + + public ObjectFlowAliasView() { + // TODO Auto-generated constructor stub + System.out.println("ObjectFlowView�N���X���������ꂽ��!"); + } + + @Override + public void createPartControl(Composite parent) { + // TODO Auto-generated method stub + System.out.println("ObjectFlowView#createPartControl(Composite)���Ă΂ꂽ��!"); + viewer = new TableViewer(parent, SWT.FULL_SELECTION); + Table table = viewer.getTable(); + table.setHeaderVisible(true); + table.setLinesVisible(true); + + // �e�[�u���̃J�������쐬 + String[] tableColumnTexts = {"objectID", "lineNo", "statementType", "statementSignature", "exp", "class"}; + int[] tableColumnWidth = {150, 80, 180, 400, 80, 400}; + TableColumn[] tableColumns = new TableColumn[tableColumnTexts.length]; + for (int i = 0; i < tableColumns.length; i++) { + tableColumns[i] = new TableColumn(table, SWT.NULL); + tableColumns[i].setText(tableColumnTexts[i]); + tableColumns[i].setWidth(tableColumnWidth[i]); + } + + viewer.setContentProvider(new ArrayContentProvider()); + viewer.setLabelProvider(new ObjectFlowAliasLabelProvider()); + viewer.setInput(objectFlowAliases.getObjectFlowSingleList(true)); + createActions(); + createToolBar(); + createMenuBar(); + } + + @Override + public void setFocus() { + // TODO Auto-generated method stub + viewer.getControl().setFocus(); + } + + private void createActions() { + updateAction = new Action() { + @Override + public void run() { + viewer.setInput(objectFlowAliases.getObjectFlowSingleList(true)); + } + }; + updateAction.setText("�e�L�X�g"); + updateAction.setToolTipText("�c�[���`�b�v�e�L�X�g"); + updateAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); + } + + private void createToolBar() { + IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); + mgr.add(updateAction); + } + + private void createMenuBar() { + IMenuManager mgr = getViewSite().getActionBars().getMenuManager(); + mgr.add(updateAction); + } +} diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/ObjectFlowAliases.java b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/ObjectFlowAliases.java new file mode 100644 index 0000000..dd821d8 --- /dev/null +++ b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/ObjectFlowAliases.java @@ -0,0 +1,84 @@ +package org.ntlab.reversedebugger; + +import java.util.ArrayList; +import java.util.List; + +import org.ntlab.debuggingControl.MethodCaller; + +import com.sun.jdi.ClassNotLoadedException; +import com.sun.jdi.IncompatibleThreadStateException; +import com.sun.jdi.IntegerValue; +import com.sun.jdi.InvalidTypeException; +import com.sun.jdi.InvocationException; +import com.sun.jdi.ObjectReference; +import com.sun.jdi.Value; +import com.sun.jdi.VirtualMachine; + +public class ObjectFlowAliases { + private static ObjectFlowAliases theInstance = null; + private List> objectFlowAliases = new ArrayList<>(); + private static final String TRACE = "org.ntlab.traceCollector.tracer.trace"; + + private ObjectFlowAliases() { + + } + + public static ObjectFlowAliases getInstance() { + if (theInstance == null) { + theInstance = new ObjectFlowAliases(); + } + return theInstance; + } + + public List> getObjectFlow() { + return objectFlowAliases; + } + + public List> getObjectFlow(MethodCaller alias) { + createObjectFlow(alias); + return objectFlowAliases; + } + + public List getObjectFlowSingleList(boolean hasBound) { + List list = new ArrayList<>(); + for (int i = 0; i < objectFlowAliases.size(); i++) { + for (int j = 0; j < objectFlowAliases.get(i).size(); j++) { + list.add(objectFlowAliases.get(i).get(j)); + } + if (hasBound) { + list.add(new MethodCaller(null, null)); // ���E�p�̃_�~�[�C���X�^���X�𐶐����Ēlj� + } + } + return list; + } + + public List getObjectFlowSingleList(MethodCaller alias, boolean hasBound) { + createObjectFlow(alias); + return getObjectFlowSingleList(hasBound); + } + + public void createObjectFlow(MethodCaller alias) { + System.out.println("ObjectFlowAliases#createObjectFlow(MethodCaller)���Ă΂ꂽ��!"); + MethodCaller mc = new MethodCaller(alias.getVm(), alias.getThread()); + objectFlowAliases.clear(); + try { + // �I�������G�C���A�X���N�_�ɃI�u�W�F�N�g�t���[���Ăяo���Č��ʂ����X�g�Ŏ󂯎�� + ObjectReference aliasListsReference = (ObjectReference)alias.callStaticMethod(TRACE, "TraceJSON", "getObjectFlow", alias.getObj()); + + // �擾�������X�g�̒��g�����[�v�ʼn񂵂Ȃ�����o��, �Ǘ��p�̃��X�g�ɋl�ߒ��� + int aliasListsSize = ((IntegerValue)mc.setObj(aliasListsReference).callInstanceMethod("size")).value(); + for (int i = 0; i < aliasListsSize; i++) { + List list = new ArrayList<>(); + objectFlowAliases.add(list); + ObjectReference aliasListReference = (ObjectReference)mc.setObj(aliasListsReference).callInstanceMethod("get", mc.getVm().mirrorOf(i)); + int aliasListSize = ((IntegerValue)mc.setObj(aliasListReference).callInstanceMethod("size")).value(); + for (int j = 0; j < aliasListSize; j++) { + ObjectReference aliasReference = (ObjectReference)mc.setObj(aliasListReference).callInstanceMethod("get", mc.getVm().mirrorOf(j)); + list.add(new MethodCaller(alias.getVm(), alias.getThread(), aliasReference)); + } + } + } catch (InvalidTypeException | ClassNotLoadedException | InvocationException | IncompatibleThreadStateException e) { + e.printStackTrace(); + } + } +} diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/SeedAliasLabelProvider.java b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/SeedAliasLabelProvider.java new file mode 100644 index 0000000..acb9538 --- /dev/null +++ b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/SeedAliasLabelProvider.java @@ -0,0 +1,56 @@ +package org.ntlab.reversedebugger; + +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.swt.graphics.Image; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.PlatformUI; +import org.ntlab.debuggingControl.MethodCaller; + +import com.sun.jdi.ClassNotLoadedException; +import com.sun.jdi.IncompatibleThreadStateException; +import com.sun.jdi.IntegerValue; +import com.sun.jdi.InvalidTypeException; +import com.sun.jdi.InvocationException; +import com.sun.jdi.ObjectReference; +import com.sun.jdi.StringReference; +import com.sun.jdi.Value; + +public class SeedAliasLabelProvider extends LabelProvider implements ITableLabelProvider { + + @Override + public String getColumnText(Object element, int columnIndex) { + if (element instanceof MethodCaller) { + MethodCaller mc = (MethodCaller)element; + try { + switch (columnIndex) { + case 0: + return ((StringReference)mc.callInstanceMethod("getObjectId")).value(); + case 1: + return String.valueOf(((IntegerValue)mc.callInstanceMethod("getLineNo")).value()); + case 2: + return ((StringReference)mc.callInstanceMethod("getStatementType")).value(); + case 3: + return ((StringReference)mc.callInstanceMethod("getStatementSignature")).value(); + case 4: + return String.format("%3d", (((IntegerValue)mc.callInstanceMethod("getOccurrenceExp")).value())); + case 5: + return ((StringReference)mc.callInstanceMethod("getClassName")).value(); + } + } catch (InvalidTypeException | ClassNotLoadedException | InvocationException | IncompatibleThreadStateException e) { + e.printStackTrace(); + } + } + return "�e�X�g�p�e�L�X�g" + columnIndex; + } + + @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); + } +} diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/SeedAliasView.java b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/SeedAliasView.java new file mode 100644 index 0000000..c7c2571 --- /dev/null +++ b/org.ntlab.reverseDebugger/src/org/ntlab/reversedebugger/SeedAliasView.java @@ -0,0 +1,90 @@ +package org.ntlab.reversedebugger; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.dialogs.ViewLabelProvider; +import org.eclipse.ui.part.ViewPart; +import org.ntlab.debuggingControl.DebuggingControlAction; +import org.ntlab.debuggingControl.MethodCaller; + +public class SeedAliasView extends ViewPart { + private TableViewer viewer; + private IAction updateAction; + private SeedAliases seedAliases = new SeedAliases(); + + public SeedAliasView() { + // TODO Auto-generated constructor stub + System.out.println("AliasView�N���X���������ꂽ��!"); + } + + @Override + public void createPartControl(Composite parent) { + // TODO Auto-generated method stub + System.out.println("AliasView#createPartControl(Composite)���Ă΂ꂽ��!"); + viewer = new TableViewer(parent, SWT.FULL_SELECTION); + Table table = viewer.getTable(); + table.setHeaderVisible(true); + table.setLinesVisible(true); + + // �e�[�u���̃J�������쐬 + String[] tableColumnTexts = {"objectID", "lineNo", "statementType", "statementSignature", "exp", "class"}; + int[] tableColumnWidth = {150, 80, 180, 400, 80, 400}; + TableColumn[] tableColumns = new TableColumn[tableColumnTexts.length]; + for (int i = 0; i < tableColumns.length; i++) { + tableColumns[i] = new TableColumn(table, SWT.NULL); + tableColumns[i].setText(tableColumnTexts[i]); + tableColumns[i].setWidth(tableColumnWidth[i]); + } + + viewer.setContentProvider(new ArrayContentProvider()); + viewer.setLabelProvider(new SeedAliasLabelProvider()); + viewer.setInput(seedAliases.getSeedAliases()); + createActions(); + createToolBar(); + createMenuBar(); + } + + @Override + public void setFocus() { + // TODO Auto-generated method stub + viewer.getControl().setFocus(); + } + + private void createActions() { + updateAction = new Action() { + @Override + public void run() { + seedAliases.reset(); + viewer.setInput(seedAliases.getSeedAliases()); + } + }; + updateAction.setText("�e�L�X�g"); + updateAction.setToolTipText("�c�[���`�b�v�e�L�X�g"); + updateAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); + } + + private void createToolBar() { + IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); + mgr.add(updateAction); + } + + private void createMenuBar() { + IMenuManager mgr = getViewSite().getActionBars().getMenuManager(); + mgr.add(updateAction); + } +}