/******************************************************************************* * Copyright (c) 2000, 2015 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.jdi.hcr; import com.sun.jdi.ReferenceType; import com.sun.jdi.ThreadReference; import com.sun.jdi.request.StepRequest; /** * A reenter step request is a step event request that will be activated when * the given thread is about to pop the top stack frame. At this point, the VM * is expected to do the following: * <ol> * <li>The arguments to the method are carefully set aside, along with the * identity of the actual method. * <li>The stack frame is popped. Any value being returned is discarded. Any * exception being thrown is ignored. Instruction counter in caller is set * <i>at</i> (rather than after) the send bytecode. * <li>Suspend the thread depending on the suspend policy and report a * <code>StepEvent</code> for this request. * <li>When the thread is resumed, the method is re-retrieved; if the class had * recently been reloaded, this must find the new bytecodes. If the method is no * longer present, throw a <code>java.lang.NoSuchMethodError</code> as specified * in the Java VM Specification. * <li>The method is entered as per normal, using the saved arguments. * </ol> * <p> * Note that other events may need to be reported as well (e.g., hit breakpoint * on first instruction). Execution does not reenter the caller at any point; so * no step out or step into events are reported. * */ public interface ReenterStepRequest extends StepRequest { /** * Restricts the events generated by this request to those whose location is * in a class whose name does NOT match this restricted regular expression. * e.g. "java.*" or "*.Foo". * * @param classPattern * the pattern String to filter against. */ @Override public void addClassExclusionFilter(String classPattern); /** * Restricts the events generated by this request to those whose location is * in this class.. * * @param clazz * the class to filter on. */ @Override public void addClassFilter(ReferenceType clazz); /** * Restricts the events generated by this request to those whose location is * in a class whose name matches this restricted regular expression. e.g. * "java.*" or "*.Foo". * * @param classPattern * the pattern String to filter for. */ @Override public void addClassFilter(String classPattern); /** * @return the thread on which the step event is being requested. */ @Override public ThreadReference thread(); }