1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.bcel.classfile;
18
19 import java.io.DataInputStream;
20 import java.io.DataOutputStream;
21 import java.io.IOException;
22 import org.apache.bcel.Constants;
23
24 /***
25 * This class is derived from the abstract
26 * <A HREF="org.apache.bcel.classfile.Constant.html">Constant</A> class
27 * and represents a reference to a String object.
28 *
29 * @version $Id: ConstantString.java 386056 2006-03-15 11:31:56Z tcurdt $
30 * @author <A HREF="mailto:m.dahm@gmx.de">M. Dahm</A>
31 * @see Constant
32 */
33 public final class ConstantString extends Constant implements ConstantObject {
34
35 private int string_index;
36
37
38 /***
39 * Initialize from another object.
40 */
41 public ConstantString(ConstantString c) {
42 this(c.getStringIndex());
43 }
44
45
46 /***
47 * Initialize instance from file data.
48 *
49 * @param file Input stream
50 * @throws IOException
51 */
52 ConstantString(DataInputStream file) throws IOException {
53 this(file.readUnsignedShort());
54 }
55
56
57 /***
58 * @param string_index Index of Constant_Utf8 in constant pool
59 */
60 public ConstantString(int string_index) {
61 super(Constants.CONSTANT_String);
62 this.string_index = string_index;
63 }
64
65
66 /***
67 * Called by objects that are traversing the nodes of the tree implicitely
68 * defined by the contents of a Java class. I.e., the hierarchy of methods,
69 * fields, attributes, etc. spawns a tree of objects.
70 *
71 * @param v Visitor object
72 */
73 public void accept( Visitor v ) {
74 v.visitConstantString(this);
75 }
76
77
78 /***
79 * Dump constant field reference to file stream in binary format.
80 *
81 * @param file Output file stream
82 * @throws IOException
83 */
84 public final void dump( DataOutputStream file ) throws IOException {
85 file.writeByte(tag);
86 file.writeShort(string_index);
87 }
88
89
90 /***
91 * @return Index in constant pool of the string (ConstantUtf8).
92 */
93 public final int getStringIndex() {
94 return string_index;
95 }
96
97
98 /***
99 * @param string_index the index into the constant of the string value
100 */
101 public final void setStringIndex( int string_index ) {
102 this.string_index = string_index;
103 }
104
105
106 /***
107 * @return String representation.
108 */
109 public final String toString() {
110 return super.toString() + "(string_index = " + string_index + ")";
111 }
112
113
114 /*** @return String object
115 */
116 public Object getConstantValue( ConstantPool cp ) {
117 Constant c = cp.getConstant(string_index, Constants.CONSTANT_Utf8);
118 return ((ConstantUtf8) c).getBytes();
119 }
120
121
122 /*** @return dereferenced string
123 */
124 public String getBytes( ConstantPool cp ) {
125 return (String) getConstantValue(cp);
126 }
127 }