1 package serp.bytecode;
2
3 import java.io.*;
4
5 import serp.bytecode.lowlevel.*;
6 import serp.bytecode.visitor.*;
7
8
9
10
11
12
13 public class SourceFile extends Attribute {
14 int _sourceFileIndex = 0;
15
16 SourceFile(int nameIndex, Attributes owner) {
17 super(nameIndex, owner);
18 }
19
20 int getLength() {
21 return 2;
22 }
23
24
25
26
27
28 public int getFileIndex() {
29 return _sourceFileIndex;
30 }
31
32
33
34
35
36 public void setFileIndex(int sourceFileIndex) {
37 if (sourceFileIndex < 0)
38 sourceFileIndex = 0;
39 _sourceFileIndex = sourceFileIndex;
40 }
41
42
43
44
45 public String getFileName() {
46 if (_sourceFileIndex == 0)
47 return null;
48 return ((UTF8Entry) getPool().getEntry(_sourceFileIndex)).getValue();
49 }
50
51
52
53
54
55
56 public File getFile(File dir) {
57 String name = getFileName();
58 if (name == null)
59 return null;
60 return new File(dir, name);
61 }
62
63
64
65
66
67 public void setFile(String name) {
68 if (name == null)
69 setFileIndex(0);
70 else
71 setFileIndex(getPool().findUTF8Entry(name, true));
72 }
73
74
75
76
77
78 public void setFile(File file) {
79 if (file == null)
80 setFile((String) null);
81 else
82 setFile(file.getName());
83 }
84
85
86
87
88 public void setFromClassName() {
89 setFile(((BCClass) getOwner()).getClassName() + ".java");
90 }
91
92 public void acceptVisit(BCVisitor visit) {
93 visit.enterSourceFile(this);
94 visit.exitSourceFile(this);
95 }
96
97 void read(Attribute other) {
98 setFile(((SourceFile) other).getFileName());
99 }
100
101 void read(DataInput in, int length) throws IOException {
102 setFileIndex(in.readUnsignedShort());
103 }
104
105 void write(DataOutput out, int length) throws IOException {
106 out.writeShort(getFileIndex());
107 }
108 }