KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > alt > jiapi > file > LineNumberTableAttribute


1 package alt.jiapi.file;
2
3 import java.io.ByteArrayOutputStream JavaDoc;
4 import java.io.DataInputStream JavaDoc;
5 import java.io.DataOutputStream JavaDoc;
6 import java.io.IOException JavaDoc;
7 import java.util.List JavaDoc;
8 import java.util.LinkedList JavaDoc;
9 import java.util.Iterator JavaDoc;
10
11 /**
12  * Class CodeAttribute.
13  *
14  * @author Mika Riekkinen
15  * @see Java Virtual Machine Specification 2nd edition, ch. 4.7.8
16  */

17 public class LineNumberTableAttribute extends Attribute {
18     private List JavaDoc lineNumbers = new LinkedList JavaDoc();
19
20     /**
21      * Name of the attribute.
22      */

23     public static final String JavaDoc ATTRIBUTE_NAME = "LineNumberTable";
24
25     LineNumberTableAttribute(short nameIndex, DataInputStream JavaDoc dis) throws IOException JavaDoc {
26         super(nameIndex);
27
28         short length = dis.readShort();
29         for(int i = 0; i < length; i++) {
30             short start_pc = dis.readShort();
31             short line_number = dis.readShort();
32             
33             lineNumbers.add(new Entry(start_pc, line_number));
34         }
35     }
36     
37     
38     public List JavaDoc getEntries() {
39         return lineNumbers;
40     }
41     
42
43     public byte[] getBytes() {
44         ByteArrayOutputStream JavaDoc baos = new ByteArrayOutputStream JavaDoc();
45         DataOutputStream JavaDoc dos = new DataOutputStream JavaDoc(baos);
46
47         try {
48             dos.writeShort(lineNumbers.size());
49
50             Iterator JavaDoc i = lineNumbers.iterator();
51             while(i.hasNext()) {
52                 Entry lnte = (Entry)i.next();
53                 dos.writeShort(lnte.getStartPc());
54                 dos.writeShort(lnte.getLineNumber());
55             }
56         }
57         catch(IOException JavaDoc ioe) {
58             // Should not ever happen
59
throw new RuntimeException JavaDoc(ioe);
60         }
61
62         return baos.toByteArray();
63     }
64
65
66     public class Entry {
67         private short start_pc;
68         private short line_number;
69
70         public Entry(short start_pc, short line_number) {
71             this.start_pc = start_pc;
72             this.line_number = line_number;
73         }
74
75         /**
76          * Get the start_pc.
77          */

78         public short getStartPc() {
79             return start_pc;
80         }
81
82         /**
83          * Set the start_pc.
84          */

85         public void setStartPc(short start_pc) {
86             this.start_pc = start_pc;
87         }
88
89         public short getLineNumber() {
90             return line_number;
91         }
92     }
93 }
94
95
Popular Tags