diff options
-rw-r--r-- | libjava/ChangeLog | 7 | ||||
-rw-r--r-- | libjava/classpath/ChangeLog | 11 | ||||
-rw-r--r-- | libjava/classpath/gnu/classpath/jdwp/Jdwp.java | 19 | ||||
-rw-r--r-- | libjava/classpath/gnu/classpath/jdwp/event/EventManager.java | 31 | ||||
-rw-r--r-- | libjava/classpath/lib/gnu/classpath/jdwp/Jdwp.class | bin | 5748 -> 5777 bytes | |||
-rw-r--r-- | libjava/classpath/lib/gnu/classpath/jdwp/event/EventManager.class | bin | 4291 -> 4558 bytes | |||
-rw-r--r-- | libjava/gnu/classpath/jdwp/event/EventManager.h | 4 |
7 files changed, 46 insertions, 26 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index eac885ae7e3..a66338cd4a4 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,12 @@ 2007-04-27 Keith Seitz <keiths@redhat.com> + * classpath/lib/gnu/classpath/jdwp/Jdwp.class: Regenerated. + * classpath/lib/gnu/classpath/jdwp/event/EventManager.class: + Regenerated. + * gnu/classpath/jdwp/event/EventManager.h: Regenerated. + +2007-04-27 Keith Seitz <keiths@redhat.com> + * classpath/lib/gnu/classpath/jdwp/event/filters/ LocationOnlyFilter.class: Regenerated; * classpath/lib/gnu/classpath/jdwp/util/Location.class: diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog index e9ad54b28b7..12c9b8b1d0e 100644 --- a/libjava/classpath/ChangeLog +++ b/libjava/classpath/ChangeLog @@ -1,5 +1,16 @@ 2007-04-27 Keith Seitz <keiths@redhat.com> + * gnu/classpath/jdwp/event/EventManager.java + (getEventRequest): Rename to... + (getEventRequests): ...this. + Change return type to array of requests. + Construct a list of all matching events and return + them all. + * gnu/classpath/jdwp/Jdwp.java (notify): Use getEventRequests + and send event notifications for all matching requests. + +2007-04-27 Keith Seitz <keiths@redhat.com> + * gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java (matches): Use Location.equals to determine equality. * gnu/classpath/jdwp/VMMethod.java (equals): diff --git a/libjava/classpath/gnu/classpath/jdwp/Jdwp.java b/libjava/classpath/gnu/classpath/jdwp/Jdwp.java index e63a9a353dd..ca92f2f0d55 100644 --- a/libjava/classpath/gnu/classpath/jdwp/Jdwp.java +++ b/libjava/classpath/gnu/classpath/jdwp/Jdwp.java @@ -1,5 +1,5 @@ /* Jdwp.java -- Virtual machine to JDWP back-end programming interface - Copyright (C) 2005, 2006 Free Software Foundation + Copyright (C) 2005, 2006, 2007 Free Software Foundation This file is part of GNU Classpath. @@ -207,23 +207,22 @@ public class Jdwp * The event is filtered through the event manager before being * sent. * - * FIXME: Probably need logic to send multiple events + * FIXME: Probably need logic to send multiple (different) events * @param event the event to report */ - public static void notify (Event event) + public static void notify(Event event) { - Jdwp jdwp = getDefault (); + Jdwp jdwp = getDefault(); if (jdwp != null) { - EventManager em = EventManager.getDefault (); - EventRequest request = em.getEventRequest (event); - if (request != null) + EventManager em = EventManager.getDefault(); + EventRequest[] requests = em.getEventRequests(event); + for (int i = 0; i < requests.length; ++i) { try { - System.out.println ("Jdwp.notify: sending event " + event); - sendEvent (request, event); - jdwp._enforceSuspendPolicy (request.getSuspendPolicy ()); + sendEvent(requests[i], event); + jdwp._enforceSuspendPolicy(requests[i].getSuspendPolicy()); } catch (Exception e) { diff --git a/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java b/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java index 02ffa241395..aa3d5d6292c 100644 --- a/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java +++ b/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java @@ -44,6 +44,7 @@ import gnu.classpath.jdwp.VMVirtualMachine; import gnu.classpath.jdwp.exception.InvalidEventTypeException; import gnu.classpath.jdwp.exception.JdwpException; +import java.util.ArrayList; import java.util.Collection; import java.util.Hashtable; import java.util.Iterator; @@ -146,39 +147,39 @@ public class EventManager } /** - * Returns a request for the given event. This method will only + * Returns all requests for the given event. This method will only * be used if the <code>EventManager</code> is handling event filtering. * * @param event the event - * @return request that was interested in this event + * @return requests that are interested in this event * or <code>null</code> if none (and event should not be sent) * @throws IllegalArgumentException for invalid event kind */ - public EventRequest getEventRequest (Event event) + public EventRequest[] getEventRequests(Event event) { - EventRequest interestedRequest = null; + ArrayList interestedEvents = new ArrayList(); Hashtable requests; - Byte kind = new Byte (event.getEventKind ()); - requests = (Hashtable) _requests.get (kind); + Byte kind = new Byte(event.getEventKind()); + requests = (Hashtable) _requests.get(kind); if (requests == null) { // Did not get a valid event type - throw new IllegalArgumentException ("invalid event kind: " + kind); + throw new IllegalArgumentException("invalid event kind: " + kind); } - boolean match = false; // Loop through the requests. Must look at ALL requests in order // to evaluate all filters (think count filter). - // TODO: What if multiple matches? Spec isn't so clear on this. - Iterator rIter = requests.values().iterator (); - while (rIter.hasNext ()) + Iterator rIter = requests.values().iterator(); + while (rIter.hasNext()) { - EventRequest request = (EventRequest) rIter.next (); - if (request.matches (event)) - interestedRequest = request; + EventRequest request = (EventRequest) rIter.next(); + if (request.matches(event)) + interestedEvents.add(request); } - return interestedRequest; + EventRequest[] r = new EventRequest[interestedEvents.size()]; + interestedEvents.toArray(r); + return r; } /** diff --git a/libjava/classpath/lib/gnu/classpath/jdwp/Jdwp.class b/libjava/classpath/lib/gnu/classpath/jdwp/Jdwp.class Binary files differindex e16ddb6b313..616beaa1fab 100644 --- a/libjava/classpath/lib/gnu/classpath/jdwp/Jdwp.class +++ b/libjava/classpath/lib/gnu/classpath/jdwp/Jdwp.class diff --git a/libjava/classpath/lib/gnu/classpath/jdwp/event/EventManager.class b/libjava/classpath/lib/gnu/classpath/jdwp/event/EventManager.class Binary files differindex 4d311632060..df7926f3956 100644 --- a/libjava/classpath/lib/gnu/classpath/jdwp/event/EventManager.class +++ b/libjava/classpath/lib/gnu/classpath/jdwp/event/EventManager.class diff --git a/libjava/gnu/classpath/jdwp/event/EventManager.h b/libjava/gnu/classpath/jdwp/event/EventManager.h index 081371148ee..45b47622c8a 100644 --- a/libjava/gnu/classpath/jdwp/event/EventManager.h +++ b/libjava/gnu/classpath/jdwp/event/EventManager.h @@ -7,6 +7,8 @@ #pragma interface #include <java/lang/Object.h> +#include <gcj/array.h> + extern "Java" { namespace gnu @@ -34,7 +36,7 @@ public: private: EventManager(); public: - virtual ::gnu::classpath::jdwp::event::EventRequest * getEventRequest(::gnu::classpath::jdwp::event::Event *); + virtual JArray< ::gnu::classpath::jdwp::event::EventRequest * > * getEventRequests(::gnu::classpath::jdwp::event::Event *); virtual void requestEvent(::gnu::classpath::jdwp::event::EventRequest *); virtual void deleteRequest(jbyte, jint); virtual void clearRequests(jbyte); |