1
2
3
4
5
6 package mockit.asm.classes;
7
8 import edu.umd.cs.findbugs.annotations.NonNull;
9
10 import mockit.asm.constantPool.AttributeWriter;
11 import mockit.asm.constantPool.ConstantPoolGeneration;
12 import mockit.asm.util.ByteVector;
13
14 import org.checkerframework.checker.index.qual.NonNegative;
15
16 final class NestMembersWriter extends AttributeWriter {
17 @NonNegative
18 private final int[] memberClassNameIndices;
19
20 NestMembersWriter(@NonNull ConstantPoolGeneration cp, @NonNull String[] memberClassNames) {
21 super(cp, "NestMembers");
22
23 memberClassNameIndices = new int[memberClassNames.length];
24
25 for (int i = 0; i < memberClassNames.length; i++) {
26 memberClassNameIndices[i] = cp.newClass(memberClassNames[i]);
27 }
28 }
29
30 @NonNegative
31 @Override
32 public int getSize() {
33 return 8 + 2 * memberClassNameIndices.length;
34 }
35
36 @Override
37 public void put(@NonNull ByteVector out) {
38 int numberOfMembers = memberClassNameIndices.length;
39 put(out, 2 + 2 * numberOfMembers);
40 out.putShort(numberOfMembers);
41
42 for (int memberClassNameIndex : memberClassNameIndices) {
43 out.putShort(memberClassNameIndex);
44 }
45 }
46 }