CVSROOT: /sources/classpath Module name: classpath Changes by: Keith Seitz <keiths> 06/06/12 19:59:43
Modified files: . : ChangeLog Added files: gnu/classpath/jdwp/event: ExceptionEvent.java Log message: From Kyle Galloway <[EMAIL PROTECTED]>: * gnu/classpath/jdwp/event/ExceptionEvent.java: New file. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/classpath/ChangeLog?cvsroot=classpath&r1=1.7785&r2=1.7786 http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/classpath/jdwp/event/ExceptionEvent.java?cvsroot=classpath&rev=1.1 Patches: Index: ChangeLog =================================================================== RCS file: /sources/classpath/classpath/ChangeLog,v retrieving revision 1.7785 retrieving revision 1.7786 diff -u -b -r1.7785 -r1.7786 --- ChangeLog 12 Jun 2006 19:43:25 -0000 1.7785 +++ ChangeLog 12 Jun 2006 19:59:43 -0000 1.7786 @@ -1,6 +1,11 @@ 2006-06-12 Keith Seitz <[EMAIL PROTECTED]> From Kyle Galloway <[EMAIL PROTECTED]>: + * gnu/classpath/jdwp/event/ExceptionEvent.java: New file. + +2006-06-12 Keith Seitz <[EMAIL PROTECTED]> + + From Kyle Galloway <[EMAIL PROTECTED]>: * gnu/classpath/jdwp/event/Event.java: Added constants for type. (getParameter): Changed parameter type from Class to int. Index: gnu/classpath/jdwp/event/ExceptionEvent.java =================================================================== RCS file: gnu/classpath/jdwp/event/ExceptionEvent.java diff -N gnu/classpath/jdwp/event/ExceptionEvent.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/classpath/jdwp/event/ExceptionEvent.java 12 Jun 2006 19:59:43 -0000 1.1 @@ -0,0 +1,143 @@ +/* ExceptionEvent.java -- an event specifying an exception has been thrown + Copyright (C) 2006 Free Software Foundation, Inc. + + This file is part of GNU Classpath. + + GNU Classpath is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU Classpath is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU Classpath; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA. + + Linking this library statically or dynamically with other modules is + making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License cover the whole + combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent + modules, and to copy and distribute the resulting executable under + terms of your choice, provided that you also meet, for each linked + independent module, the terms and conditions of the license of that + module. An independent module is a module which is not derived from + or based on this library. If you modify this library, you may extend + this exception to your version of the library, but you are not + obligated to do so. If you do not wish to do so, delete this + exception statement from your version. */ + + +package gnu.classpath.jdwp.event; + +import gnu.classpath.jdwp.JdwpConstants; +import gnu.classpath.jdwp.VMIdManager; +import gnu.classpath.jdwp.id.ObjectId; +import gnu.classpath.jdwp.id.ThreadId; +import gnu.classpath.jdwp.util.Location; + +import java.io.DataOutputStream; +import java.io.IOException; + +/** + * Notification from the VM that an exception has occurred along with where it + * occurred, and if and where it was caught. + * + * @author Kyle Galloway ([EMAIL PROTECTED]) + */ +public class ExceptionEvent + extends Event +{ + //object instance + private Object _instance; + + // the exception thrown + private Throwable _exception; + + // the thread in which the exception occurred + private Thread _thread; + + // the location where the exception was thrown + private Location _location; + + //the location where the exception was caught + private Location _catchLocation; + + /** + * Constructs a new <code>ExceptionEvent</code> where the exception was + * caught. + * + * @param exception the throwable object that generated the event + * @param thread the thread where the exception occurred + * @param location the location where the exception was thrown + * @param catchLocation the location where the exception was caught + */ + public ExceptionEvent(Throwable exception, Thread thread, Location location, + Location catchLocation, Object instance) + { + super(JdwpConstants.EventKind.EXCEPTION); + _exception = exception; + _thread = thread; + _location = location; + _catchLocation = catchLocation; + _instance = instance; + } + + /** + * Returns a specific filtering parameter for this event. Valid types are + * thread, location, and catchLocation. + * + * @param type the type of parameter desired + * @returns the desired parameter or null + */ + public Object getParameter(int type) + { + if (type == EVENT_THREAD) + return _thread; + else if (type == EVENT_LOCATION) + return _location; + else if (type == EVENT_INSTANCE) + return _instance; + else if (type == EVENT_CLASS) + return _instance.getClass(); + else if (type == EVENT_EXCEPTION_CLASS) + return _exception.getClass(); + else if (type == EVENT_EXCEPTION_CAUGHT) + if (_catchLocation != null) + return new Boolean(true); + else + return new Boolean(false); + + return null; + } + + /** + * Writes the event to the given stream + * + * @param outStream the output stream to write the event to + * @throws IOException + */ + protected void _writeData(DataOutputStream outStream) + throws IOException + { + VMIdManager idm = VMIdManager.getDefault(); + ThreadId tid = (ThreadId) idm.getObjectId(_thread); + ObjectId oid = idm.getObjectId(_exception); + + tid.write(outStream); + _location.write(outStream); + oid.writeTagged(outStream); + if(_catchLocation != null) + _catchLocation.write(outStream); + else + outStream.write(0); + } +}