1/* 2 * Copyright (c) 1998, 2011, 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/* 27 * This source code is provided to illustrate the usage of a given feature 28 * or technique and has been deliberately simplified. Additional steps 29 * required for a production-quality application, such as security checks, 30 * input validation and proper error handling, might not be present in 31 * this sample code. 32 */ 33 34 35package com.sun.tools.example.debug.tty; 36 37import com.sun.jdi.ReferenceType; 38import com.sun.jdi.request.*; 39 40class ExceptionSpec extends EventRequestSpec { 41 private boolean notifyCaught; 42 private boolean notifyUncaught; 43 44 private ExceptionSpec(ReferenceTypeSpec refSpec) { 45 this(refSpec, true, true); 46 } 47 48 ExceptionSpec(ReferenceTypeSpec refSpec, 49 boolean notifyCaught, 50 boolean notifyUncaught) { 51 super(refSpec); 52 this.notifyCaught = notifyCaught; 53 this.notifyUncaught = notifyUncaught; 54 } 55 56 /** 57 * The 'refType' is known to match, return the EventRequest. 58 */ 59 @Override 60 EventRequest resolveEventRequest(ReferenceType refType) { 61 EventRequestManager em = refType.virtualMachine().eventRequestManager(); 62 ExceptionRequest excReq = em.createExceptionRequest(refType, 63 notifyCaught, 64 notifyUncaught); 65 excReq.enable(); 66 return excReq; 67 } 68 69 public boolean notifyCaught() { 70 return notifyCaught; 71 } 72 73 public boolean notifyUncaught() { 74 return notifyUncaught; 75 } 76 77 @Override 78 public int hashCode() { 79 //Reference: Effective Java[tm] (Bloch, 2001), Item 8 80 int result = 17; 81 result = (37 * result) + (notifyCaught() ? 0: 1); 82 result = (37 * result) + (notifyUncaught() ? 0: 1); 83 result = (37 * result) + refSpec.hashCode(); 84 return result; 85 } 86 87 @Override 88 public boolean equals(Object obj) { 89 if (obj instanceof ExceptionSpec) { 90 ExceptionSpec es = (ExceptionSpec)obj; 91 92 if (refSpec.equals(es.refSpec) && 93 (this.notifyCaught() == es.notifyCaught()) && 94 (this.notifyUncaught() == es.notifyUncaught())) { 95 return true; 96 } 97 } 98 return false; 99 } 100 101 @Override 102 public String toString() { 103 String s; 104 if (notifyCaught && !notifyUncaught) { 105 s = MessageOutput.format("exceptionSpec caught", 106 refSpec.toString()); 107 } else if (notifyUncaught && !notifyCaught) { 108 s = MessageOutput.format("exceptionSpec uncaught", 109 refSpec.toString()); 110 } else { 111 s = MessageOutput.format("exceptionSpec all", 112 refSpec.toString()); 113 } 114 return s; 115 } 116} 117