Merge branch threads into development
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / launch / MachineDebugContextListener.java
index d8ea399..837da0a 100644 (file)
@@ -3,6 +3,7 @@ package net.mograsim.plugin.launch;
 import java.util.Optional;
 
 import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.model.IDebugElement;
 import org.eclipse.debug.core.model.IDebugTarget;
 import org.eclipse.debug.ui.contexts.DebugContextEvent;
 import org.eclipse.debug.ui.contexts.IDebugContextListener;
@@ -27,34 +28,32 @@ public abstract class MachineDebugContextListener implements IDebugContextListen
                        Object[] selectedElements = treeSelection.toArray();
                        for (Object selectedElement : selectedElements)
                        {
-                               MachineDebugTarget debugTarget;
-                               if (selectedElement instanceof MachineDebugTarget)
-                                       debugTarget = (MachineDebugTarget) selectedElement;
+                               IDebugTarget debugTarget;
+                               if (selectedElement instanceof IDebugElement)
+                                       debugTarget = ((IDebugElement) selectedElement).getDebugTarget();
                                else if (selectedElement instanceof ILaunch)
-                               {
-                                       ILaunch launch = (ILaunch) selectedElement;
-                                       IDebugTarget genericDebugTarget = launch.getDebugTarget();
-                                       if (genericDebugTarget instanceof MachineDebugTarget)
-                                               debugTarget = (MachineDebugTarget) genericDebugTarget;
-                                       else
-                                               continue;
-                               } else
+                                       debugTarget = ((ILaunch) selectedElement).getDebugTarget();
+                               else
+                                       continue;
+                               if (!(debugTarget instanceof MachineDebugTarget))
                                        continue;
                                if (debugTarget.isTerminated())
                                        continue;
                                // we found a selected MachineDebugTarget
                                if (this.debugTarget != debugTarget)
-                               {
-                                       MachineDebugTarget oldTarget = this.debugTarget;
-                                       this.debugTarget = debugTarget;
-                                       machineDebugContextChanged(Optional.ofNullable(oldTarget), Optional.of(debugTarget));
-                               }
+                                       updateContextAndCallContextChanged((MachineDebugTarget) debugTarget);
                                return;
                        }
-                       MachineDebugTarget oldTarget = debugTarget;
-                       debugTarget = null;
-                       machineDebugContextChanged(Optional.ofNullable(oldTarget), Optional.empty());
                }
+               // we didn't find a selected MachineDebugTarget
+               updateContextAndCallContextChanged(null);
+       }
+
+       private void updateContextAndCallContextChanged(MachineDebugTarget newTarget)
+       {
+               MachineDebugTarget oldTarget = this.debugTarget;
+               this.debugTarget = newTarget;
+               machineDebugContextChanged(Optional.ofNullable(oldTarget), Optional.ofNullable(newTarget));
        }
 
        public abstract void machineDebugContextChanged(Optional<MachineDebugTarget> oldTarget, Optional<MachineDebugTarget> newTarget);