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 import java.util.Objects;
22
23
24
25
26 public class ConstantValueAttribute extends Attribute {
27
28 private static CPUTF8 attributeName;
29
30 public static void setAttributeName(final CPUTF8 cpUTF8Value) {
31 attributeName = cpUTF8Value;
32 }
33
34 private int constantIndex;
35
36 private final ClassFileEntry entry;
37
38 public ConstantValueAttribute(final ClassFileEntry entry) {
39 super(attributeName);
40 this.entry = Objects.requireNonNull(entry, "entry");
41 }
42
43 @Override
44 public boolean equals(final Object obj) {
45 if (this == obj) {
46 return true;
47 }
48 if (!super.equals(obj)) {
49 return false;
50 }
51 if (this.getClass() != obj.getClass()) {
52 return false;
53 }
54 final ConstantValueAttribute other = (ConstantValueAttribute) obj;
55 return Objects.equals(entry, other.entry);
56 }
57
58 @Override
59 protected int getLength() {
60 return 2;
61 }
62
63 @Override
64 protected ClassFileEntry[] getNestedClassFileEntries() {
65 return new ClassFileEntry[] { getAttributeName(), entry };
66 }
67
68 @Override
69 public int hashCode() {
70 final int PRIME = 31;
71 int result = super.hashCode();
72 result = PRIME * result + (entry == null ? 0 : entry.hashCode());
73 return result;
74 }
75
76 @Override
77 protected void resolve(final ClassConstantPool pool) {
78 super.resolve(pool);
79 entry.resolve(pool);
80 this.constantIndex = pool.indexOf(entry);
81 }
82
83 @Override
84 public String toString() {
85 return "Constant:" + entry;
86 }
87
88 @Override
89 protected void writeBody(final DataOutputStream dos) throws IOException {
90 dos.writeShort(constantIndex);
91 }
92
93 }