View Javadoc
1   /*
2    * MIT License
3    * Copyright (c) 2006-2025 JMockit developers
4    * See LICENSE file for full license text.
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  }