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