package org.python.pydev.debug.newconsole; import org.eclipse.core.runtime.Assert; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.ui.console.IConsole; import org.python.pydev.debug.model.AbstractDebugTarget; import org.python.pydev.debug.model.PyStackFrame; /** * Only returns stacks which match the current console (and keeps the last one). * * A selection always changes it (so, always linked to debug context). */ public class CurrentPyStackFrameForConsole extends AnyPyStackFrameSelected { private IConsole console; public CurrentPyStackFrameForConsole(IConsole console) { super(); Assert.isNotNull(console); this.console = console; isLinkedWithDebug = true; } @Override protected boolean acceptsSelection(PyStackFrame stackFrame) { if (super.acceptsSelection(stackFrame)) { AbstractDebugTarget target = (AbstractDebugTarget) stackFrame.getAdapter(IDebugTarget.class); IProcess process = target.getProcess(); if (DebugUITools.getConsole(process) == console) { return true; } } return false; } @Override public void linkWithDebugSelection(boolean isLinkedWithDebug) { // Overridden to do nothing because this one is always linked. } }