1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.compress.harmony.unpack200.bytecode;
18
19 import java.io.DataOutputStream;
20 import java.io.IOException;
21
22
23
24
25 public class ClassFile {
26
27 private static final int MAGIC = 0xCAFEBABE;
28
29 public int major;
30 public int minor;
31 public ClassConstantPool pool = new ClassConstantPool();
32 public int accessFlags;
33 public int thisClass;
34 public int superClass;
35 public int[] interfaces;
36 public ClassFileEntry[] fields;
37 public ClassFileEntry[] methods;
38 public Attribute[] attributes;
39
40 public void write(final DataOutputStream dos) throws IOException {
41 dos.writeInt(MAGIC);
42 dos.writeShort(minor);
43 dos.writeShort(major);
44 dos.writeShort(pool.size() + 1);
45 for (int i = 1; i <= pool.size(); i++) {
46 ConstantPoolEntry entry;
47 (entry = (ConstantPoolEntry) pool.get(i)).doWrite(dos);
48
49
50 if (entry.getTag() == ConstantPoolEntry.CP_Double || entry.getTag() == ConstantPoolEntry.CP_Long) {
51 i++;
52 }
53 }
54 dos.writeShort(accessFlags);
55 dos.writeShort(thisClass);
56 dos.writeShort(superClass);
57 dos.writeShort(interfaces.length);
58 for (final int element : interfaces) {
59 dos.writeShort(element);
60 }
61 dos.writeShort(fields.length);
62 for (final ClassFileEntry field : fields) {
63 field.write(dos);
64 }
65 dos.writeShort(methods.length);
66 for (final ClassFileEntry method : methods) {
67 method.write(dos);
68 }
69 dos.writeShort(attributes.length);
70 for (final Attribute attribute : attributes) {
71 attribute.write(dos);
72 }
73 }
74 }