KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jbet > LocalVarRec


1 /*
2  * JBET - Java Binary Enhancement Tool
3  * Copyright (c) 2003 Networks Associates Technology, Inc.
4  *
5  * This software was developed under DARPA/SPAWAR contract
6  * N66001-00-C-8602 "SPMA" as part of the
7  * DARPA OASIS research program.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  * SUCH DAMAGE.
29  */

30
31 /**
32  * This class represents a local variable record from LocalVariableTable.
33  *
34  * $Id: LocalVarRec.java,v 1.5 2003/09/09 17:31:54 areisse Exp $
35  *
36  * @author Larry D'Anna
37  * @version 0.1
38  */

39
40 package jbet;
41 import java.io.*;
42
43 class LocalVarRec {
44
45     BranchTarget start = new BranchTarget(); // The range of code overwhich
46
BranchTarget end = new BranchTarget(); // the variable is accessable
47

48     String JavaDoc name;
49     Type descriptor;
50     int index;
51
52     /* only used for reading and writeing, stale at other times */
53     private int name_index;
54     private int descriptor_index;
55     int length; // Used by Snippit at least
56

57     LocalVarRec dup() {
58     try {
59         return (LocalVarRec) clone();
60     } catch (CloneNotSupportedException JavaDoc e) {
61         return null;
62     }
63     }
64
65     LocalVarRec() {}
66
67     LocalVarRec (Instruction s, Instruction e,
68          String JavaDoc n, Type t, int i) {
69     start.instr = s;
70     end.instr = e;
71     name = n;
72     descriptor = t;
73     index = i;
74     }
75
76
77
78     LocalVarRec (DataInputStream dataIn, ConstantPool constantPool)
79     throws IOException, ClassFileException {
80     
81     start.offset = dataIn.readUnsignedShort();
82     length = dataIn.readUnsignedShort();
83     
84     name_index = dataIn.readUnsignedShort();
85     name = constantPool.utf8At(name_index);
86
87     descriptor_index = dataIn.readUnsignedShort();
88     descriptor = new Type ( constantPool.utf8At(descriptor_index) );
89
90     index = dataIn.readUnsignedShort();
91     }
92
93     void writeFile (DataOutputStream dataOut) throws IOException {
94     dataOut.writeShort (start.offset);
95     dataOut.writeShort (length);
96     dataOut.writeShort (name_index);
97     dataOut.writeShort (descriptor_index);
98     dataOut.writeShort (index);
99     }
100
101     void resolveConstants (ConstantPool constantPool) {
102     name_index = constantPool.internUtf8(name);
103     descriptor_index = constantPool.internUtf8( descriptor.toString() );
104     }
105     
106     private Integer JavaDoc integerCache = null;
107     Integer JavaDoc integer() {
108     if (integerCache == null || integerCache.intValue() != index)
109         integerCache = new Integer JavaDoc (index);
110     return integerCache;
111     }
112     
113     String JavaDoc recString() {
114     return "LocalVarRec: name(" + name + ") type(" + descriptor.toString()
115         + ") startPC(" + start.instr.pc() + ") " +
116         (end.instr == null ? "" : " endPC(" + end.instr.pc() + ") ")
117         + "length(" + length + ") index(" + index + ")";
118     }
119
120 }
121
Popular Tags