X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugLineBreakpoint.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugLineBreakpoint.java new file mode 100644 index 0000000..a626e8c --- /dev/null +++ b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugLineBreakpoint.java @@ -0,0 +1,141 @@ + +/* + * Created on 25.11.2004 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package net.sourceforge.phpeclipse.xdebug.php.model; + + +import java.util.HashMap; +import java.util.Map; + +import net.sourceforge.phpeclipse.xdebug.php.launching.IXDebugConstants; + +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspaceRunnable; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.model.IBreakpoint; +import org.eclipse.debug.core.model.LineBreakpoint; + + +/** + * @author Axel + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class XDebugLineBreakpoint extends LineBreakpoint { + + /** + * Default constructor is required for the breakpoint manager + * to re-create persisted breakpoints. After instantiating a breakpoint, + * the setMarker(...) method is called to restore + * this breakpoint's attributes. + */ + private static final String XDEBUG_LINE_BREAKPOINT = "net.sourceforge.phpeclipse.xdebug.core.XDebugLineBreakpoint"; //$NON-NLS-1$ + + /** + * Breakpoint attribute storing the fully qualified name of the type + * this breakpoint is located in. + * (value "net.sourceforge.phpeclipse.debug.typeName"). This attribute is a String. + */ + protected static final String TYPE_NAME = "net.sourceforge.phpeclipse.debug.typeName"; //$NON-NLS-1$ + +// public PHPLineBreakpoint() { +// } +// +// public PHPLineBreakpoint(IResource resource, int lineNumber, int charStart, int charEnd, int hitCount, boolean add, Map attributes) throws DebugException { +// this(resource, lineNumber, charStart, charEnd, hitCount, add, attributes, PHP_LINE_BREAKPOINT); +// } +// +// public PHPLineBreakpoint(IResource resource, int lineNumber, int hitCount, boolean add, Map attributes) throws DebugException { +// this(resource, lineNumber, -1, -1, hitCount, add, attributes, PHP_LINE_BREAKPOINT); +// } + + + public static final String BREAKPOINT_ID ="XDebugLineBreakpointID"; + + public XDebugLineBreakpoint() { + } + + /** + * Constructs a line breakpoint on the given resource at the given + * line number. The line number is 1-based (i.e. the first line of a + * file is line number 1). + * + * @param resource file on which to set the breakpoint + * @param lineNumber 1-based line number of the breakpoint + * @throws CoreException if unable to create the breakpoint + */ + public XDebugLineBreakpoint(final IResource resource, final int lineNumber) throws CoreException { +// IMarker marker = resource.createMarker("net.sourceforge.phpeclipse.xdebug.core.XDebugLineBreakpoint"); +// setMarker(marker); +// setEnabled(true); +// XDebugCorePlugin.log(IStatus.INFO,"Markertype: "+ marker.getType()); +// ensureMarker().setAttribute(IMarker.LINE_NUMBER, lineNumber); +// ensureMarker().setAttribute(IBreakpoint.ID, IXDebugConstants.ID_PHP_DEBUG_MODEL); +// ensureMarker().setAttribute(BREAKPOINT_ID,-1); + IWorkspaceRunnable wr= new IWorkspaceRunnable() { + public void run(IProgressMonitor monitor) throws CoreException { + + // create the marker + setMarker(resource.createMarker(XDEBUG_LINE_BREAKPOINT)); + + // add attributes + Map attributes = new HashMap(10); + addLineBreakpointAttributes(attributes, getModelIdentifier(), true, lineNumber, -1, -1); + + // set attributes + ensureMarker().setAttributes(attributes); + + // add to breakpoint manager if requested + register(true); + } + }; + run(getMarkerRule(resource), wr); + + } + + protected void register(boolean register) throws CoreException { + if (register) { + DebugPlugin.getDefault().getBreakpointManager().addBreakpoint(this); + } else { + setRegistered(false); + } + } + + public void addLineBreakpointAttributes(Map attributes, String modelIdentifier, boolean enabled, int lineNumber, int charStart, int charEnd) { + attributes.put(IBreakpoint.ID, modelIdentifier); + attributes.put(IBreakpoint.ENABLED, new Boolean(enabled)); + attributes.put(IMarker.LINE_NUMBER, new Integer(lineNumber)); + if (charStart!=-1) + { + attributes.put(IMarker.CHAR_START, new Integer(charStart)); + attributes.put(IMarker.CHAR_END, new Integer(charEnd)); + } + attributes.put(TYPE_NAME, "typeName"); + attributes.put(BREAKPOINT_ID,new Integer(-1)); + } + + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IBreakpoint#getModelIdentifier() + */ + public String getModelIdentifier() { + return IXDebugConstants.ID_PHP_DEBUG_MODEL; + } + + public void setID(int id) throws CoreException + { + ensureMarker().setAttribute(BREAKPOINT_ID,id); + } + public int getID() throws CoreException + { + return ensureMarker().getAttribute(BREAKPOINT_ID,-1); + } +}