Jdwp.class: Regenerated.

* classpath/lib/gnu/classpath/jdwp/Jdwp.class: Regenerated.
        * classpath/lib/gnu/classpath/jdwp/event/EventManager.class:
        Regenerated.
        * gnu/classpath/jdwp/event/EventManager.h: Regenerated.

        * 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.

From-SVN: r124250
This commit is contained in:
Keith Seitz 2007-04-28 01:05:36 +00:00 committed by Keith Seitz
parent e91ada38ad
commit 9898e8391f
7 changed files with 46 additions and 26 deletions

View File

@ -1,3 +1,10 @@
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/

View File

@ -1,3 +1,14 @@
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

View File

@ -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)
{

View File

@ -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;
}
/**

View File

@ -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);