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  /**
15   * Writes out the interfaces implemented or extended by the class or interface being written.
16   */
17  final class InterfaceWriter extends AttributeWriter {
18      @NonNull
19      private final int[] interfaceItemIndices;
20  
21      InterfaceWriter(@NonNull ConstantPoolGeneration cp, @NonNull String[] interfaceNames) {
22          super(cp);
23  
24          int n = interfaceNames.length;
25          int[] cpItemIndices = new int[n];
26  
27          for (int i = 0; i < n; i++) {
28              cpItemIndices[i] = cp.newClass(interfaceNames[i]);
29          }
30  
31          interfaceItemIndices = cpItemIndices;
32      }
33  
34      @Override
35      public int getSize() {
36          return 2 * interfaceItemIndices.length;
37      }
38  
39      @Override
40      public void put(@NonNull ByteVector out) {
41          out.putShort(interfaceItemIndices.length);
42  
43          for (int interfaceItemIndex : interfaceItemIndices) {
44              out.putShort(interfaceItemIndex);
45          }
46      }
47  }