[Pydev-cvs] org.python.pydev.debug/src/org/python/pydev/debug/model PyDebugModelPresentation.java,NO
Brought to you by:
fabioz
From: Aleksandar T. <at...@us...> - 2004-05-07 02:03:46
|
Update of /cvsroot/pydev/org.python.pydev.debug/src/org/python/pydev/debug/model In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13484/src/org/python/pydev/debug/model Modified Files: PyDebugTarget.java Added Files: PyDebugModelPresentation.java PyBreakpoint.java Log Message: Breakpoints, first cut --- NEW FILE: PyBreakpoint.java --- /* * Author: atotic * Created on Apr 28, 2004 * License: Common Public License v1.0 */ package org.python.pydev.debug.model; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.model.LineBreakpoint; /** * Represents python breakpoint. * */ public class PyBreakpoint extends LineBreakpoint { static public final String PY_BREAK_MARKER = "org.python.pydev.debug.pyStopBreakpointMarker"; static public final String FUNCTION_NAME_PROP = "pydev.function_name"; public PyBreakpoint() { } public String getModelIdentifier() { return PyDebugModelPresentation.PY_DEBUG_MODEL_ID; } public String getFile() { IResource r = getMarker().getResource(); return r.getLocation().toOSString(); } public Object getLine() { try { return getMarker().getAttribute(IMarker.LINE_NUMBER); } catch (CoreException e) { return ""; } } } --- NEW FILE: PyDebugModelPresentation.java --- /* * Author: atotic * Created on May 6, 2004 * License: Common Public License v1.0 */ package org.python.pydev.debug.model; import java.util.Map; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.debug.core.model.IValue; import org.eclipse.debug.ui.IDebugModelPresentation; import org.eclipse.debug.ui.IValueDetailListener; import org.eclipse.jface.util.ListenerList; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.IEditorInput; import org.python.pydev.debug.core.PydevDebugPlugin; /** * Provides decoration for model elements in the debugger interface. */ public class PyDebugModelPresentation implements IDebugModelPresentation { static public String PY_DEBUG_MODEL_ID = "org.python.pydev.debug"; protected ListenerList fListeners= new ListenerList(); public Image getImage(Object element) { if (element instanceof PyBreakpoint) { try { if (((PyBreakpoint)element).isEnabled()) return PydevDebugPlugin.getImageCache().get("icons/breakmarker.gif"); else return PydevDebugPlugin.getImageCache().get("icons/breakmarker_gray.gif"); } catch (CoreException e) { PydevDebugPlugin.log(IStatus.ERROR, "getImage error", e); } } else if (element instanceof PyDebugTarget || element instanceof PyThread || element instanceof PyStackFrame) return null; return null; } public String getText(Object element) { if (element instanceof PyBreakpoint) { IMarker marker = ((PyBreakpoint)element).getMarker(); try { Map attrs = marker.getAttributes(); // Set set = attrs.keySet(); // for (Iterator i = set.iterator(); i.hasNext();) // System.out.println(i.next().toString()); IResource resource = marker.getResource(); String file = resource.getFullPath().lastSegment(); Object lineNumber = attrs.get(IMarker.LINE_NUMBER); String functionName = (String)attrs.get(PyBreakpoint.FUNCTION_NAME_PROP); if (file == null) file = "unknown"; if (lineNumber == null) lineNumber = "unknown"; String location = file + ":" + lineNumber.toString(); if (functionName == null) return location; else return functionName + " [" + location + "]"; } catch (CoreException e) { PydevDebugPlugin.log(IStatus.ERROR, "error retreiving marker attributes", e); return "error"; } } else if (element instanceof PyDebugTarget || element instanceof PyStackFrame || element instanceof PyThread) { return null; } PydevDebugPlugin.log(IStatus.ERROR, "unknown debug type", null); return null; } /** * override * TODO comment this method */ public void computeDetail(IValue value, IValueDetailListener listener) { // TODO Auto-generated method stub System.out.println("in detail"); } /** * override * TODO comment this method */ public IEditorInput getEditorInput(Object element) { // TODO Auto-generated method stub return null; } /** * override * TODO comment this method */ public String getEditorId(IEditorInput input, Object element) { // TODO Auto-generated method stub return null; } public void setAttribute(String attribute, Object value) { // TODO Auto-generated method stub System.out.println("setattribute"); } public void addListener(ILabelProviderListener listener) { fListeners.add(listener); } public void removeListener(ILabelProviderListener listener) { fListeners.remove(listener); } public void dispose() { } public boolean isLabelProperty(Object element, String property) { // Not really sure what this does. see IBaseLabelProvider:isLabelProperty return false; } } Index: PyDebugTarget.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.debug/src/org/python/pydev/debug/model/PyDebugTarget.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** PyDebugTarget.java 5 May 2004 02:02:00 -0000 1.4 --- PyDebugTarget.java 7 May 2004 02:03:07 -0000 1.5 *************** *** 20,23 **** --- 20,24 ---- import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugPlugin; + import org.eclipse.debug.core.IBreakpointManager; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchListener; *************** *** 34,41 **** /** ! * ! * TODO Comment this class ! * Make sure we fire the right org.eclipse.debug.core.DebugEvents ! * What happens with debug events? see LaunchViewEventHandler */ public class PyDebugTarget extends PlatformObject implements IDebugTarget, ILaunchListener { --- 35,42 ---- /** ! * Debugger class that represents a single python process. ! * ! * It deals with events from RemoteDebugger. ! * Breakpoint updating. */ public class PyDebugTarget extends PlatformObject implements IDebugTarget, ILaunchListener { *************** *** 59,62 **** --- 60,65 ---- launch.addDebugTarget(this); debugger.setTarget(this); + IBreakpointManager breakpointManager= DebugPlugin.getDefault().getBreakpointManager(); + breakpointManager.addBreakpointListener(this); // we have to know when we get removed, so that we can shut off the debugger DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this); *************** *** 75,78 **** --- 78,83 ---- // shut down the remote debugger when parent launch if (launch == this.launch) { + IBreakpointManager breakpointManager= DebugPlugin.getDefault().getBreakpointManager(); + breakpointManager.removeBreakpointListener(this); debugger.dispose(); debugger = null; *************** *** 90,94 **** // From IDebugElement public String getModelIdentifier() { ! return PydevDebugPlugin.getPluginID(); } // From IDebugElement --- 95,99 ---- // From IDebugElement public String getModelIdentifier() { ! return PyDebugModelPresentation.PY_DEBUG_MODEL_ID; } // From IDebugElement *************** *** 192,211 **** public boolean supportsBreakpoint(IBreakpoint breakpoint) { ! // TODO Auto-generated method stub ! return false; } public void breakpointAdded(IBreakpoint breakpoint) { ! // TODO Auto-generated method stub ! } public void breakpointRemoved(IBreakpoint breakpoint, IMarkerDelta delta) { ! // TODO Auto-generated method stub ! } public void breakpointChanged(IBreakpoint breakpoint, IMarkerDelta delta) { ! // TODO Auto-generated method stub ! } --- 197,224 ---- public boolean supportsBreakpoint(IBreakpoint breakpoint) { ! return breakpoint instanceof PyBreakpoint; } + public void breakpointAdded(IBreakpoint breakpoint) { ! if (breakpoint instanceof PyBreakpoint) { ! PyBreakpoint b = (PyBreakpoint)breakpoint; ! SetBreakpointCommand cmd = new SetBreakpointCommand(debugger, b.getFile(), b.getLine()); ! debugger.postCommand(cmd); ! } } public void breakpointRemoved(IBreakpoint breakpoint, IMarkerDelta delta) { ! if (breakpoint instanceof PyBreakpoint) { ! PyBreakpoint b = (PyBreakpoint)breakpoint; ! RemoveBreakpointCommand cmd = new RemoveBreakpointCommand(debugger, b.getFile(), b.getLine()); ! debugger.postCommand(cmd); ! } } public void breakpointChanged(IBreakpoint breakpoint, IMarkerDelta delta) { ! if (breakpoint instanceof PyBreakpoint) { ! breakpointRemoved(breakpoint, null); ! breakpointAdded(breakpoint); ! } } *************** *** 337,340 **** --- 350,355 ---- else if (stopReason_i == AbstractDebuggerCommand.CMD_THREAD_SUSPEND) reason = DebugEvent.CLIENT_REQUEST; + else if (stopReason_i == AbstractDebuggerCommand.CMD_SET_BREAK) + reason = DebugEvent.BREAKPOINT; else { PydevDebugPlugin.log(IStatus.ERROR, "Unexpected reason for suspension", null); |