blob: 6935c702210d5fa193d9ccb5f7f9d8db9a0d7830 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.debug.core;
import org.eclipse.debug.core.DebugException;
import org.eclipse.jdt.core.dom.Message;
/**
* Provides event and error notification for Java breakpoints. Listeners
* register with the <code>JDIDebugModel</code>.
* <p>
* Since 3.5, clients can also register breakpoint listeners using the
* <code>org.eclipse.jdt.debug.breakpointListeners</code> extension point. A
* listener can be contributed to receive notifications from all Java
* breakpoints or receive notifications about specific breakpoints by
* programmatically registering the extension with a breakpoint.
* </p>
* <p>
* Clients are intended to implement this interface.
* </p>
*
* @since 2.0
* @see JDIDebugModel
* @see IJavaBreakpoint
*/
public interface IJavaBreakpointListener {
/**
* Return code in response to a "breakpoint hit" notification, indicating a
* vote to suspend the associated thread.
*
* @since 3.0
*/
public static int SUSPEND = 0x0001;
/**
* Return code in response to a "breakpoint hit" notification, indicating a
* vote to not suspend (i.e. resume) the associated thread.
*
* @since 3.0
*/
public static int DONT_SUSPEND = 0x0002;
/**
* Return code in response to an "installing" notification, indicating a
* vote to install the associated breakpoint.
*
* @since 3.0
*/
public static int INSTALL = 0x0001;
/**
* Return code in response to an "installing" notification, indicating a
* vote to not install the associated breakpoint.
*
* @since 3.0
*/
public static int DONT_INSTALL = 0x0002;
/**
* Return code indicating that this listener should not be considered in a
* vote to suspend a thread or install a breakpoint.
*
* @since 3.0
*/
public static int DONT_CARE = 0x0004;
/**
* Notification that the given breakpoint is about to be added to the
* specified target. This message is sent before the breakpoint is actually
* added to the debut target (i.e. this is a pre-notification).
*
* @param target
* Java debug target
* @param breakpoint
* Java breakpoint
*/
public void addingBreakpoint(IJavaDebugTarget target,
IJavaBreakpoint breakpoint);
/**
* Notification that the given breakpoint is about to be installed in the
* specified target, in the specified type. Allows this listener to vote to
* determine if the given breakpoint should be installed in the specified
* type and target. If at least one listener votes to <code>INSTALL</code>,
* the breakpoint will be installed. If there are no votes to install the
* breakpoint, there must be at least one <code>DONT_INSTALL</code> vote to
* cancel the installation. If all listeners vote <code>DONT_CARE</code>,
* the breakpoint will be installed by default.
*
* @param target
* Java debug target
* @param breakpoint
* Java breakpoint
* @param type
* the type (class or interface) the breakpoint is about to be
* installed in or <code>null</code> if the given breakpoint is
* not installed in a specific type (one of
* <code>IJavaClassType</code>, <code>IJavaInterfaceType</code>,
* or <code>IJavaArrayType</code>)
* @return whether the the breakpoint should be installed in the given type
* and target, or whether this listener doesn't care - one of
* <code>INSTALL</code>, <code>DONT_INSTALL</code>, or
* <code>DONT_CARE</code>
* @since 3.0
*/
public int installingBreakpoint(IJavaDebugTarget target,
IJavaBreakpoint breakpoint, IJavaType type);
/**
* Notification that the given breakpoint has been installed in the
* specified target.
*
* @param target
* Java debug target
* @param breakpoint
* Java breakpoint
*/
public void breakpointInstalled(IJavaDebugTarget target,
IJavaBreakpoint breakpoint);
/**
* Notification that the given breakpoint has been hit in the specified
* thread. Allows this listener to vote to determine if the given thread
* should be suspended in response to the breakpoint. If at least one
* listener votes to <code>SUSPEND</code>, the thread will suspend. If there
* are no votes to suspend the thread, there must be at least one
* <code>DONT_SUSPEND</code> vote to avoid the suspension (resume). If all
* listeners vote <code>DONT_CARE</code>, the thread will suspend by
* default.
* <p>
* The thread the breakpoint has been encountered in is now suspended.
* Listeners may query thread state and perform evaluations. All subsequent
* breakpoints in this thread will be ignored until voting has completed.
* </p>
*
* @param thread
* Java thread
* @param breakpoint
* Java breakpoint
* @return whether the thread should suspend or whether this listener
* doesn't care - one of <code>SUSPEND</code>,
* <code>DONT_SUSPEND</code>, or <code>DONT_CARE</code>
* @since 3.0
*/
public int breakpointHit(IJavaThread thread, IJavaBreakpoint breakpoint);
/**
* Notification that the given breakpoint has been removed from the
* specified target.
*
* @param target
* Java debug target
* @param breakpoint
* Java breakpoint
*/
public void breakpointRemoved(IJavaDebugTarget target,
IJavaBreakpoint breakpoint);
/**
* Notification that the given breakpoint had runtime errors in its
* conditional expression.
*
* @param breakpoint
* the breakpoint
* @param exception
* the debug exception that occurred evaluating the breakpoint's
* condition
*/
public void breakpointHasRuntimeException(IJavaLineBreakpoint breakpoint,
DebugException exception);
/**
* Notification that the given breakpoint has compilation errors in its
* conditional expression.
*
* @param breakpoint
* the breakpoint
* @param errors
* the compilation errors in the breakpoint's condition
*/
public void breakpointHasCompilationErrors(IJavaLineBreakpoint breakpoint,
Message[] errors);
}