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