View Javadoc
1   package mockit.asm.classes;
2   
3   import edu.umd.cs.findbugs.annotations.NonNull;
4   import edu.umd.cs.findbugs.annotations.Nullable;
5   
6   import mockit.asm.constantPool.AttributeWriter;
7   import mockit.asm.constantPool.ConstantPoolGeneration;
8   import mockit.asm.util.ByteVector;
9   
10  import org.checkerframework.checker.index.qual.NonNegative;
11  
12  final class InnerClassesWriter extends AttributeWriter {
13      @NonNull
14      private final ByteVector innerClasses;
15      @NonNegative
16      private int innerClassesCount;
17  
18      InnerClassesWriter(@NonNull ConstantPoolGeneration cp) {
19          super(cp, "InnerClasses");
20          innerClasses = new ByteVector();
21      }
22  
23      void add(@NonNull String name, @Nullable String outerName, @Nullable String innerName, int access) {
24          innerClasses.putShort(cp.newClass(name));
25          innerClasses.putShort(outerName == null ? 0 : cp.newClass(outerName));
26          innerClasses.putShort(innerName == null ? 0 : cp.newUTF8(innerName));
27          innerClasses.putShort(access);
28          innerClassesCount++;
29      }
30  
31      @NonNegative
32      @Override
33      public int getSize() {
34          return 8 + innerClasses.getLength();
35      }
36  
37      @Override
38      public void put(@NonNull ByteVector out) {
39          put(out, 2 + innerClasses.getLength());
40          out.putShort(innerClassesCount);
41          out.putByteVector(innerClasses);
42      }
43  }