/******************************************************************************* * Copyright (c) 2000, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * 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); }