Home | History | Annotate | Download | only in event
      1 /*
      2  * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
      3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
      4  *
      5  * This code is free software; you can redistribute it and/or modify it
      6  * under the terms of the GNU General Public License version 2 only, as
      7  * published by the Free Software Foundation.  Oracle designates this
      8  * particular file as subject to the "Classpath" exception as provided
      9  * by Oracle in the LICENSE file that accompanied this code.
     10  *
     11  * This code is distributed in the hope that it will be useful, but WITHOUT
     12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     14  * version 2 for more details (a copy is included in the LICENSE file that
     15  * accompanied this code).
     16  *
     17  * You should have received a copy of the GNU General Public License version
     18  * 2 along with this work; if not, write to the Free Software Foundation,
     19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
     20  *
     21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
     22  * or visit www.oracle.com if you need additional information or have any
     23  * questions.
     24  */
     25 
     26 package com.sun.jdi.event;
     27 
     28 import com.sun.jdi.*;
     29 
     30 import java.util.Set;
     31 
     32 /**
     33  * Several {@link Event} objects may be created at a given time by
     34  * the target {@link VirtualMachine}. For example, there may be
     35  * more than one {@link com.sun.jdi.request.BreakpointRequest}
     36  * for a given {@link Location}
     37  * or you might single step to the same location as a
     38  * BreakpointRequest.  These {@link Event} objects are delivered
     39  * together as an EventSet.  For uniformity, an EventSet is always used
     40  * to deliver {@link Event} objects.  EventSets are delivered by
     41  * the {@link EventQueue}.
     42  * EventSets are unmodifiable.
     43  * <P>
     44  * Associated with the issuance of an event set, suspensions may
     45  * have occurred in the target VM.  These suspensions correspond
     46  * with the {@link #suspendPolicy() suspend policy}.
     47  * To assure matching resumes occur, it is recommended,
     48  * where possible,
     49  * to complete the processing of an event set with
     50  * {@link #resume() EventSet.resume()}.
     51  * <P>
     52  * The events that are grouped in an EventSet are restricted in the
     53  * following ways:
     54  * <P>
     55  * <UL>
     56  * <LI>Always singleton sets:
     57  *     <UL>
     58  *     <LI>{@link VMStartEvent}
     59  *     <LI>{@link VMDisconnectEvent}
     60  *     </UL>
     61  * <LI>Only with other VMDeathEvents:
     62  *     <UL>
     63  *     <LI>{@link VMDeathEvent}
     64  *     </UL>
     65  * <LI>Only with other ThreadStartEvents for the same thread:
     66  *     <UL>
     67  *     <LI>{@link ThreadStartEvent}
     68  *     </UL>
     69  * <LI>Only with other ThreadDeathEvents for the same thread:
     70  *     <UL>
     71  *     <LI>{@link ThreadDeathEvent}
     72  *     </UL>
     73  * <LI>Only with other ClassPrepareEvents for the same class:
     74  *     <UL>
     75  *     <LI>{@link ClassPrepareEvent}
     76  *     </UL>
     77  * <LI>Only with other ClassUnloadEvents for the same class:
     78  *     <UL>
     79  *     <LI>{@link ClassUnloadEvent}
     80  *     </UL>
     81  * <LI>Only with other AccessWatchpointEvents for the same field access:
     82  *     <UL>
     83  *     <LI>{@link AccessWatchpointEvent}
     84  *     </UL>
     85  * <LI>Only with other ModificationWatchpointEvents for the same field
     86  * modification:
     87  *     <UL>
     88  *     <LI>{@link ModificationWatchpointEvent}
     89  *     </UL>
     90  * <LI>Only with other ExceptionEvents for the same exception occurrance:
     91  *     <UL>
     92  *     <LI>{@link ExceptionEvent}
     93  *     </UL>
     94  * <LI>Only with other MethodExitEvents for the same method exit:
     95  *     <UL>
     96  *     <LI>{@link MethodExitEvent}
     97  *     </UL>
     98  * <LI>Only with other Monitor contended enter events for the same monitor object:
     99  *     <UL>
    100  *     <LI>Monitor Contended Enter Event
    101  *     </UL>
    102  * <LI>Only with other Monitor contended entered events for the same monitor object:
    103  *     <UL>
    104  *     <LI>Monitor Contended Entered Event
    105  *    </UL>
    106  * <LI>Only with other Monitor wait events for the same monitor object:
    107  *     <UL>
    108  *     <LI>Monitor Wait Event
    109  *     </UL>
    110  * <LI>Only with other Monitor waited events for the same monitor object:
    111  *     <UL>
    112  *     <LI>Monitor Waited Event
    113  *     </UL>
    114  * <LI>Only with other members of this group, at the same location
    115  * and in the same thread:
    116  *     <UL>
    117  *     <LI>{@link BreakpointEvent}
    118  *     <LI>{@link StepEvent}
    119  *     <LI>{@link MethodEntryEvent}
    120  *     </UL>
    121  * </UL>
    122  *
    123  * @see Event
    124  * @see EventQueue
    125  *
    126  * @author Robert Field
    127  * @since  1.3
    128  */
    129 
    130 @jdk.Exported
    131 public interface EventSet extends Mirror, Set<Event> {
    132 
    133     /**
    134      * Returns the policy used to suspend threads in the target VM
    135      * for this event set. This policy is selected from the suspend
    136      * policies for each event's request; the target VM chooses the
    137      * policy which suspends the most threads.  The target VM
    138      * suspends threads according to that policy
    139      * and that policy is returned here. See
    140      * {@link com.sun.jdi.request.EventRequest} for the possible
    141      * policy values.
    142      * <p>
    143      * In rare cases, the suspend policy may differ from the requested
    144      * value if a {@link ClassPrepareEvent} has occurred in a
    145      * debugger system thread. See {@link ClassPrepareEvent#thread}
    146      * for details.
    147      *
    148      * @return the suspendPolicy which is either
    149      * {@link com.sun.jdi.request.EventRequest#SUSPEND_ALL SUSPEND_ALL},
    150      * {@link com.sun.jdi.request.EventRequest#SUSPEND_EVENT_THREAD SUSPEND_EVENT_THREAD} or
    151      * {@link com.sun.jdi.request.EventRequest#SUSPEND_NONE SUSPEND_NONE}.
    152      */
    153     int suspendPolicy();
    154 
    155     /**
    156      * Return an iterator specific to {@link Event} objects.
    157      */
    158     EventIterator eventIterator();
    159 
    160     /**
    161      * Resumes threads suspended by this event set. If the {@link #suspendPolicy}
    162      * is {@link com.sun.jdi.request.EventRequest#SUSPEND_ALL}, a call
    163      * to this method is equivalent to
    164      * {@link com.sun.jdi.VirtualMachine#resume}. If the
    165      * suspend policy is
    166      * {@link com.sun.jdi.request.EventRequest#SUSPEND_EVENT_THREAD},
    167      * a call to this method is equivalent to
    168      * {@link com.sun.jdi.ThreadReference#resume} for the event thread.
    169      * Otherwise, a call to this method is a no-op.
    170      */
    171     void resume();
    172 }
    173