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