From 06f0d1af10fcadd00afb196197568d3a576b4df1 Mon Sep 17 00:00:00 2001 From: Marc Dumais Date: Thu, 20 Jun 2013 09:34:59 -0400 Subject: [PATCH] Bug 409006 - [visualizer] NPE when closing visualizer with nothing selected in debug view Change-Id: If1c7fdbdd08822175e83eebc9fcd51b6bd859aae Reviewed-on: https://git.eclipse.org/r/13950 Reviewed-by: William Swanson IP-Clean: William Swanson Tested-by: William Swanson --- .../internal/ui/view/MulticoreVisualizer.java | 68 ++++++++++--------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java index aab49363d3b..c5cc327be93 100755 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java @@ -12,6 +12,7 @@ * Marc Dumais (Ericsson) - Add CPU/core load information to the multicore visualizer (Bug 396268) * Marc Dumais (Ericsson) - Bug 399419 * Marc Dumais (Ericsson) - Bug 405390 + * Marc Dumais (Ericsson) - Bug 409006 *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.view; @@ -817,45 +818,46 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer List items = SelectionUtils.getSelectedObjects(workbenchSelection); - // Use the current canvas model to match Debug View items - // with corresponding threads, if any. - VisualizerModel model = m_canvas.getModel(); - if (model != null) { - - Set selected = new HashSet(); + if (m_canvas != null) { + // Use the current canvas model to match Debug View items + // with corresponding threads, if any. + VisualizerModel model = m_canvas.getModel(); + if (model != null) { - for (Object item : items) { - - // Currently, we ignore selections other than DSF context objects. - // TODO: any other cases where we could map selections to canvas? - if (item instanceof IDMVMContext) - { - IDMContext context = ((IDMVMContext) item).getDMContext(); - - IMIProcessDMContext processContext = - DMContexts.getAncestorOfType(context, IMIProcessDMContext.class); - int pid = Integer.parseInt(processContext.getProcId()); - - IMIExecutionDMContext execContext = - DMContexts.getAncestorOfType(context, IMIExecutionDMContext.class); - int tid = (execContext == null) ? 0 : execContext.getThreadId(); - - if (tid == 0) { // process - List threads = model.getThreadsForProcess(pid); - if (threads != null) { - selected.addAll(threads); + Set selected = new HashSet(); + + for (Object item : items) { + + // Currently, we ignore selections other than DSF context objects. + // TODO: any other cases where we could map selections to canvas? + if (item instanceof IDMVMContext) + { + IDMContext context = ((IDMVMContext) item).getDMContext(); + + IMIProcessDMContext processContext = + DMContexts.getAncestorOfType(context, IMIProcessDMContext.class); + int pid = Integer.parseInt(processContext.getProcId()); + + IMIExecutionDMContext execContext = + DMContexts.getAncestorOfType(context, IMIExecutionDMContext.class); + int tid = (execContext == null) ? 0 : execContext.getThreadId(); + + if (tid == 0) { // process + List threads = model.getThreadsForProcess(pid); + if (threads != null) { + selected.addAll(threads); + } } - } - else { // thread - VisualizerThread thread = model.getThread(tid); - if (thread != null) { - selected.add(thread); + else { // thread + VisualizerThread thread = model.getThread(tid); + if (thread != null) { + selected.add(thread); + } } } } + visualizerSelection = SelectionUtils.toSelection(selected); } - - visualizerSelection = SelectionUtils.toSelection(selected); } return visualizerSelection;