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