ExceptionInfo.java revision db267bc191f906f55eaef21a27110cce2ec57fdf
1/*
2 * ProGuard -- shrinking, optimization, obfuscation, and preverification
3 *             of Java bytecode.
4 *
5 * Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu)
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the Free
9 * Software Foundation; either version 2 of the License, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 * more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21package proguard.classfile.attribute;
22
23import proguard.classfile.VisitorAccepter;
24
25/**
26 * Representation of an Exception table entry.
27 *
28 * @author Eric Lafortune
29 */
30public class ExceptionInfo implements VisitorAccepter
31{
32    public int u2startPC;
33    public int u2endPC;
34    public int u2handlerPC;
35    public int u2catchType;
36
37    /**
38     * An extra field in which visitors can store information.
39     */
40    public Object visitorInfo;
41
42
43    /**
44     * Creates an uninitialized ExceptionInfo.
45     */
46    public ExceptionInfo()
47    {
48        this(0, 0, 0, 0);
49    }
50
51
52    /**
53     * Creates an ExceptionInfo with the given properties.
54     */
55    public ExceptionInfo(int u2startPC,
56                         int u2endPC,
57                         int u2handlerPC,
58                         int u2catchType)
59    {
60        this.u2startPC   = u2startPC;
61        this.u2endPC     = u2endPC;
62        this.u2handlerPC = u2handlerPC;
63        this.u2catchType = u2catchType;
64    }
65
66
67    /**
68     * Returns whether the exception's try block contains the instruction at the
69     * given offset.
70     */
71    public boolean isApplicable(int instructionOffset)
72    {
73        return instructionOffset >= u2startPC &&
74               instructionOffset <  u2endPC;
75    }
76
77
78    /**
79     * Returns whether the exception's try block overlaps with the specified
80     * block of instructions.
81     */
82    public boolean isApplicable(int startOffset, int endOffset)
83    {
84        return u2startPC < endOffset &&
85               u2endPC   > startOffset;
86    }
87
88
89    // Implementations for VisitorAccepter.
90
91    public Object getVisitorInfo()
92    {
93        return visitorInfo;
94    }
95
96    public void setVisitorInfo(Object visitorInfo)
97    {
98        this.visitorInfo = visitorInfo;
99    }
100}
101