Home | History | Annotate | Download | only in attribute
      1 /*
      2  * ProGuard -- shrinking, optimization, obfuscation, and preverification
      3  *             of Java bytecode.
      4  *
      5  * Copyright (c) 2002-2009 Eric Lafortune (eric (at) 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  */
     21 package proguard.classfile.attribute;
     22 
     23 import proguard.classfile.VisitorAccepter;
     24 
     25 /**
     26  * Representation of an Exception table entry.
     27  *
     28  * @author Eric Lafortune
     29  */
     30 public 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