081ec41f6661bebf2f60de747549ca7e56f211d1
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / launch / MachineRegisterGroup.java
1 package net.mograsim.plugin.launch;
2
3 import java.util.Collections;
4 import java.util.List;
5 import java.util.Set;
6 import java.util.stream.Collectors;
7
8 import org.eclipse.core.runtime.PlatformObject;
9 import org.eclipse.debug.core.DebugException;
10 import org.eclipse.debug.core.ILaunch;
11 import org.eclipse.debug.core.model.IDebugTarget;
12 import org.eclipse.debug.core.model.IRegister;
13 import org.eclipse.debug.core.model.IRegisterGroup;
14
15 import net.mograsim.machine.Machine;
16 import net.mograsim.machine.Register;
17 import net.mograsim.plugin.MograsimActivator;
18
19 public class MachineRegisterGroup extends PlatformObject implements IRegisterGroup
20 {
21         private final MachineStackFrame stackFrame;
22         private final List<MachineRegister> registers;
23
24         public MachineRegisterGroup(MachineStackFrame stackFrame)
25         {
26                 this.stackFrame = stackFrame;
27                 Set<Register> machineRegisters = getMachine().getDefinition().getRegisters();
28                 List<MachineRegister> registersModifiable = machineRegisters.stream().map(r -> new MachineRegister(this, r))
29                                 .collect(Collectors.toList());
30                 this.registers = Collections.unmodifiableList(registersModifiable);
31         }
32
33         @Override
34         public String getModelIdentifier()
35         {
36                 return MograsimActivator.PLUGIN_ID;
37         }
38
39         public Machine getMachine()
40         {
41                 return stackFrame.getMachine();
42         }
43
44         @Override
45         public IDebugTarget getDebugTarget()
46         {
47                 return stackFrame.getDebugTarget();
48         }
49
50         @Override
51         public ILaunch getLaunch()
52         {
53                 return stackFrame.getLaunch();
54         }
55
56         @Override
57         public String getName() throws DebugException
58         {
59                 return "pseudo register group";
60         }
61
62         @Override
63         public IRegister[] getRegisters() throws DebugException
64         {
65                 // TODO sort
66                 return registers.toArray(IRegister[]::new);
67         }
68
69         @Override
70         public boolean hasRegisters() throws DebugException
71         {
72                 return true;
73         }
74 }