CatchHandlerList.java revision 579d7739c53a2707ad711a2d2cae46d7d782f061
1ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul/* 2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Copyright (C) 2008 The Android Open Source Project 3afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 4afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Licensed under the Apache License, Version 2.0 (the "License"); 5fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * you may not use this file except in compliance with the License. 6afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * You may obtain a copy of the License at 70a654a5d5a99e00e1456cd04870dd6e656b558f9Brian Paul * 8afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * http://www.apache.org/licenses/LICENSE-2.0 9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Unless required by applicable law or agreed to in writing, software 11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * distributed under the License is distributed on an "AS IS" BASIS, 12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * See the License for the specific language governing permissions and 14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * limitations under the License. 15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgpackage com.android.dx.dex.code; 18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgimport com.android.dx.rop.cst.CstType; 20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgimport com.android.dx.util.FixedSizeList; 21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgimport com.android.dx.util.Hex; 22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/** 24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Ordered list of (exception type, handler address) entries. 25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 26afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgpublic final class CatchHandlerList extends FixedSizeList 27afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg implements Comparable<CatchHandlerList> { 28e23e2759fc67973c0d2e3318f79837f88f8bad0dBrian Paul /** {@code non-null;} empty instance */ 29e23e2759fc67973c0d2e3318f79837f88f8bad0dBrian Paul public static final CatchHandlerList EMPTY = new CatchHandlerList(0); 30afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 31afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /** 32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Constructs an instance. All indices initially contain {@code null}. 33afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 34afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * @param size {@code >= 0;} the size of the list 35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg public CatchHandlerList(int size) { 37afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg super(size); 38afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 40afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /** 41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Gets the element at the given index. It is an error to call 42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * this with the index for an element which was never set; if you 43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * do that, this will throw {@code NullPointerException}. 44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 45afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * @param n {@code >= 0, < size();} which index 46fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * @return {@code non-null;} element at that index 47fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul */ 48fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul public Entry get(int n) { 49fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return (Entry) get0(n); 50fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 51afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 52afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /** {@inheritDoc} */ 53afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg public String toHuman() { 54afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return toHuman("", ""); 55afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 56b19ba7827cded079470fc0c848124089ecb6ca5fTed Jump 5738136ec3ddef8f1e7f7c96b69efc33bf2d7706ccTed Jump /** 583f17dfb8ba48d874814ce0e4a0b7d9e57feb4c36Ted Jump * Get the human form of this instance, prefixed on each line 59f7190d4b1f63ce94526d526c4c6c326c6833bf2bTed Jump * with the string. 60ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul * 61ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul * @param prefix {@code non-null;} the prefix for every line 62ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul * @param header {@code non-null;} the header for the first line (after the 63ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul * first prefix) 64ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul * @return {@code non-null;} the human form 65ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul */ 6638136ec3ddef8f1e7f7c96b69efc33bf2d7706ccTed Jump public String toHuman(String prefix, String header) { 67ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul StringBuilder sb = new StringBuilder(100); 68ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul int size = size(); 69ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul 70ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul sb.append(prefix); 71ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul sb.append(header); 72ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul sb.append("catch "); 73ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul 74ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul for (int i = 0; i < size; i++) { 75ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul Entry entry = get(i); 76ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul 77ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul if (i != 0) { 78ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul sb.append(",\n"); 79ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul sb.append(prefix); 80ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul sb.append(" "); 81ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul } 82ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul 83ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul if ((i == (size - 1)) && catchesAll()) { 84ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul sb.append("<any>"); 85ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul } else { 86ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul sb.append(entry.getExceptionType().toHuman()); 87ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul } 88afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 89afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg sb.append(" -> "); 90ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul sb.append(Hex.u2or4(entry.getHandler())); 91ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul } 92ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul 93ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul return sb.toString(); 94ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul } 95ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul 96ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul /** 97ae773f612c0b9262e9cf9fb63423a44d2125ce46Brian Paul * Returns whether or not this instance ends with a "catch-all" 98afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * handler. 99afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 100afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * @return {@code true} if this instance ends with a "catch-all" 101afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * handler or {@code false} if not 102afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg public boolean catchesAll() { 104afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int size = size(); 105afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 106afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (size == 0) { 107afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return false; 108afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 109afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 110afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Entry last = get(size - 1); 111afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return last.getExceptionType().equals(CstType.OBJECT); 112afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 113afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 114afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /** 115afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Sets the entry at the given index. 116afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 117afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * @param n {@code >= 0, < size();} which index 118afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * @param exceptionType {@code non-null;} type of exception handled 119afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * @param handler {@code >= 0;} exception handler address 120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 121afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg public void set(int n, CstType exceptionType, int handler) { 1226799ecb6753f2ec5b1b66c9e8c447bc82035f94cTed Jump set0(n, new Entry(exceptionType, handler)); 1236799ecb6753f2ec5b1b66c9e8c447bc82035f94cTed Jump } 124afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 125afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /** 126afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Sets the entry at the given index. 127afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 128afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * @param n {@code >= 0, < size();} which index 129afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * @param entry {@code non-null;} the entry to set at {@code n} 130afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 131afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg public void set(int n, Entry entry) { 132afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg set0(n, entry); 133afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 134afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 135afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /** {@inheritDoc} */ 136afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg public int compareTo(CatchHandlerList other) { 137afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (this == other) { 138afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg // Easy out. 139afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 140afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 141afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 142afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int thisSize = size(); 143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int otherSize = other.size(); 144fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul int checkSize = Math.min(thisSize, otherSize); 145afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 146afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (int i = 0; i < checkSize; i++) { 147fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul Entry thisEntry = get(i); 148afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Entry otherEntry = other.get(i); 149afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int compare = thisEntry.compareTo(otherEntry); 150fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul if (compare != 0) { 151fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return compare; 152fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 153fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 154fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 155fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul if (thisSize < otherSize) { 156fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return -1; 157fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } else if (thisSize > otherSize) { 158fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return 1; 159fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 160fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 161fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return 0; 162fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 163fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 164fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul /** 165fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * Entry in the list. 166fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul */ 167fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul public static class Entry implements Comparable<Entry> { 168afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /** {@code non-null;} type of exception handled */ 169fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul private final CstType exceptionType; 170fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 171fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul /** {@code >= 0;} exception handler address */ 172fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul private final int handler; 173fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 174fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul /** 175afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Constructs an instance. 176afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 177fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * @param exceptionType {@code non-null;} type of exception handled 178fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * @param handler {@code >= 0;} exception handler address 179fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul */ 180fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul public Entry(CstType exceptionType, int handler) { 181fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul if (handler < 0) { 182fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul throw new IllegalArgumentException("handler < 0"); 183fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 184fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 185fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul if (exceptionType == null) { 186fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul throw new NullPointerException("exceptionType == null"); 187fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 188fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 189fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul this.handler = handler; 190fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul this.exceptionType = exceptionType; 191fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 192fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 193fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul /** {@inheritDoc} */ 194fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul @Override 195fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul public int hashCode() { 196fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return (handler * 31) + exceptionType.hashCode(); 197fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 198fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 199fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul /** {@inheritDoc} */ 200fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul @Override 201fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul public boolean equals(Object other) { 202fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul if (other instanceof Entry) { 203fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return (compareTo((Entry) other) == 0); 204fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 205fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 206fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return false; 207fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 208fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 209fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul /** {@inheritDoc} */ 210fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul public int compareTo(Entry other) { 211fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul if (handler < other.handler) { 212fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return -1; 213fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } else if (handler > other.handler) { 214fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return 1; 215fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 216fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 217fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return exceptionType.compareTo(other.exceptionType); 218fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 219fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 220fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul /** 221fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * Gets the exception type handled. 222fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * 223fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * @return {@code non-null;} the exception type 224fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul */ 225fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul public CstType getExceptionType() { 226fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return exceptionType; 227fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 228fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul 229fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul /** 230fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * Gets the handler address. 231fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * 232fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul * @return {@code >= 0;} the handler address 233fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul */ 234fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul public int getHandler() { 235fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul return handler; 236fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 237fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul } 238fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul} 239fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul