KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > cojen > classfile > attribute > SourceFileAttr


1 /*
2  * Copyright 2004 Brian S O'Neill
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.cojen.classfile.attribute;
18
19 import java.io.DataInput JavaDoc;
20 import java.io.DataOutput JavaDoc;
21 import java.io.IOException JavaDoc;
22 import org.cojen.classfile.Attribute;
23 import org.cojen.classfile.ConstantPool;
24 import org.cojen.classfile.constant.ConstantUTFInfo;
25
26 /**
27  * This class corresponds to the SourceFile_attribute structure as defined
28  * in section 4.7.2 of <i>The Java Virtual Machine Specification</i>.
29  *
30  * @author Brian S O'Neill
31  * @see cojen.classfile.ClassFile
32  */

33 public class SourceFileAttr extends Attribute {
34
35     private final ConstantUTFInfo mSourcefile;
36     
37     public SourceFileAttr(ConstantPool cp, String JavaDoc fileName) {
38         this(cp, SOURCE_FILE, fileName);
39     }
40
41     public SourceFileAttr(ConstantPool cp, String JavaDoc name, String JavaDoc fileName) {
42         super(cp, name);
43         mSourcefile = cp.addConstantUTF(fileName);
44     }
45     
46     public SourceFileAttr(ConstantPool cp, String JavaDoc name, int length, DataInput JavaDoc din)
47         throws IOException JavaDoc
48     {
49         super(cp, name);
50         int index = din.readUnsignedShort();
51         if ((length -= 2) > 0) {
52             din.skipBytes(length);
53         }
54         mSourcefile = (ConstantUTFInfo)cp.getConstant(index);
55     }
56
57     /**
58      * Returns the source file name.
59      */

60     public ConstantUTFInfo getFileName() {
61         return mSourcefile;
62     }
63     
64     /**
65      * Returns the length of the source file attribute, which is 2 bytes.
66      */

67     public int getLength() {
68         return 2;
69     }
70     
71     public void writeDataTo(DataOutput JavaDoc dout) throws IOException JavaDoc {
72         dout.writeShort(mSourcefile.getIndex());
73     }
74 }
75
Popular Tags