/Users/lyon/j4p/src/javassist/bytecode/SourceFileAttribute.java

1    /* 
2     * Javassist, a Java-bytecode translator toolkit. 
3     * Copyright (C) 1999-2003 Shigeru Chiba. All Rights Reserved. 
4     * 
5     * The contents of this file are subject to the Mozilla Public License Version 
6     * 1.1 (the "License"); you may not use this file except in compliance with 
7     * the License.  Alternatively, the contents of this file may be used under 
8     * the terms of the GNU Lesser General Public License Version 2.1 or later. 
9     * 
10    * Software distributed under the License is distributed on an "AS IS" basis, 
11    * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
12    * for the specific language governing rights and limitations under the 
13    * License. 
14    */ 
15    
16   package javassist.bytecode; 
17    
18   import java.io.DataInputStream; 
19   import java.io.IOException; 
20   import java.util.Map; 
21    
22   /** 
23    * <code>SourceFile_attribute</code>. 
24    */ 
25   public class SourceFileAttribute extends AttributeInfo { 
26       /** 
27        * The name of this attribute <code>"SourceFile"</code>. 
28        */ 
29       public static final String tag = "SourceFile"; 
30    
31       SourceFileAttribute(ConstPool cp, int n, DataInputStream in) 
32               throws IOException { 
33           super(cp, n, in); 
34       } 
35    
36       /** 
37        * Constructs a SourceFile attribute. 
38        * 
39        * @param cp                a constant pool table. 
40        * @param filename          the name of the source file. 
41        */ 
42       public SourceFileAttribute(ConstPool cp, String filename) { 
43           super(cp, tag); 
44           int index = cp.addUtf8Info(filename); 
45           byte[] bvalue = new byte[2]; 
46           bvalue[0] = (byte) (index >>> 8); 
47           bvalue[1] = (byte) index; 
48           set(bvalue); 
49       } 
50    
51       /** 
52        * Returns the file name indicated by <code>sourcefile_index</code>. 
53        */ 
54       public String getFileName() { 
55           return getConstPool().getUtf8Info(ByteArray.readU16bit(get(), 0)); 
56       } 
57    
58       /** 
59        * Makes a copy.  Class names are replaced according to the 
60        * given <code>Map</code> object. 
61        * 
62        * @param newCp     the constant pool table used by the new copy. 
63        * @param classnames        pairs of replaced and substituted 
64        *                          class names. 
65        */ 
66       public AttributeInfo copy(ConstPool newCp, Map classnames) { 
67           return new SourceFileAttribute(newCp, getFileName()); 
68       } 
69   } 
70