Fixed register sorting
[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.List;
4 import java.util.Set;
5 import java.util.stream.Collectors;
6
7 import org.eclipse.core.runtime.PlatformObject;
8 import org.eclipse.debug.core.DebugException;
9 import org.eclipse.debug.core.ILaunch;
10 import org.eclipse.debug.core.model.IDebugTarget;
11 import org.eclipse.debug.core.model.IRegister;
12 import org.eclipse.debug.core.model.IRegisterGroup;
13
14 import net.mograsim.machine.Machine;
15 import net.mograsim.machine.Register;
16 import net.mograsim.plugin.MograsimActivator;
17 import net.mograsim.plugin.util.NumberRespectingStringComparator;
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                 this.registers = machineRegisters.stream()
29                                 .sorted((r1, r2) -> NumberRespectingStringComparator.CASE_SENSITIVE.compare(r1.id(), r2.id()))
30                                 .map(r -> new MachineRegister(this, r)).collect(Collectors.toUnmodifiableList());
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                 return registers.toArray(IRegister[]::new);
66         }
67
68         @Override
69         public boolean hasRegisters() throws DebugException
70         {
71                 return true;
72         }
73 }