/** * */ package org.keplerproject.ldt.debug.ui.breakpoints; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.debug.core.model.IBreakpoint; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.ISuspendResume; import org.eclipse.debug.ui.actions.IRunToLineTarget; import org.eclipse.debug.ui.actions.RunToLineHandler; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.texteditor.ITextEditor; import org.keplerproject.ldt.debug.core.LuaDebuggerPlugin; import org.keplerproject.ldt.debug.core.breakpoints.LuaRunToLineBreakpoint; /** * @author jasonsantos */ public class LuaRunToLineTargetAdapter implements IRunToLineTarget { /* * (non-Javadoc) * * @see org.eclipse.debug.ui.actions.IRunToLineTarget#canRunToLine(org.eclipse.ui.IWorkbenchPart, * org.eclipse.jface.viewers.ISelection, * org.eclipse.debug.core.model.ISuspendResume) */ public boolean canRunToLine(IWorkbenchPart part, ISelection selection, ISuspendResume target) { return target instanceof IDebugElement && ((IDebugElement) target).getModelIdentifier().equals( LuaDebuggerPlugin.ID_LUA_DEBUG_MODEL); } /* * (non-Javadoc) * * @see org.eclipse.debug.ui.actions.IRunToLineTarget#runToLine(org.eclipse.ui.IWorkbenchPart, * org.eclipse.jface.viewers.ISelection, * org.eclipse.debug.core.model.ISuspendResume) */ public void runToLine(IWorkbenchPart part, ISelection selection, ISuspendResume target) throws CoreException { IEditorPart editorPart = (IEditorPart) part; ITextEditor textEditor = (ITextEditor) editorPart; ITextSelection textSelection = (ITextSelection) selection; int lineNumber = textSelection.getStartLine() + 1; if (lineNumber > 0) { if (target instanceof IAdaptable) { IDebugTarget debugTarget = (IDebugTarget) ((IAdaptable) target) .getAdapter(IDebugTarget.class); if (debugTarget != null) { IFile resource = (IFile) textEditor.getEditorInput() .getAdapter(IResource.class); IBreakpoint breakpoint = new LuaRunToLineBreakpoint( resource, lineNumber); RunToLineHandler handler = new RunToLineHandler( debugTarget, target, breakpoint); handler.run(new NullProgressMonitor()); } } } } }