1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.compress.harmony.unpack200.bytecode;
18
19 import java.io.DataOutputStream;
20 import java.io.IOException;
21
22
23
24
25 public class CPString extends CPConstant {
26
27 private transient int nameIndex;
28 private final CPUTF8 name;
29
30 private boolean hashCodeComputed;
31
32 private int cachedHashCode;
33
34 public CPString(final CPUTF8 value, final int globalIndex) {
35 super(CP_String, value, globalIndex);
36 this.name = value;
37 }
38
39 private void generateHashCode() {
40 hashCodeComputed = true;
41 final int PRIME = 31;
42 int result = 1;
43 result = PRIME * result + name.hashCode();
44 cachedHashCode = result;
45 }
46
47 @Override
48 protected ClassFileEntry[] getNestedClassFileEntries() {
49 return new ClassFileEntry[] { name };
50 }
51
52 @Override
53 public int hashCode() {
54 if (!hashCodeComputed) {
55 generateHashCode();
56 }
57 return cachedHashCode;
58 }
59
60
61
62
63
64
65 @Override
66 protected void resolve(final ClassConstantPool pool) {
67 super.resolve(pool);
68 nameIndex = pool.indexOf(name);
69 }
70
71 @Override
72 public String toString() {
73 return "String: " + getValue();
74 }
75
76 @Override
77 protected void writeBody(final DataOutputStream dos) throws IOException {
78 dos.writeShort(nameIndex);
79 }
80 }