1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.bcel.classfile;
19
20 import java.io.DataInput;
21 import java.io.DataOutputStream;
22 import java.io.IOException;
23
24 import org.apache.bcel.Const;
25
26
27
28
29
30
31
32
33 public final class ModuleExports implements Cloneable, Node {
34
35 private final int exportsIndex;
36 private final int exportsFlags;
37 private final int exportsToCount;
38 private final int[] exportsToIndex;
39
40
41
42
43
44
45
46 ModuleExports(final DataInput file) throws IOException {
47 exportsIndex = file.readUnsignedShort();
48 exportsFlags = file.readUnsignedShort();
49 exportsToCount = file.readUnsignedShort();
50 exportsToIndex = new int[exportsToCount];
51 for (int i = 0; i < exportsToCount; i++) {
52 exportsToIndex[i] = file.readUnsignedShort();
53 }
54 }
55
56
57
58
59
60
61
62 @Override
63 public void accept(final Visitor v) {
64 v.visitModuleExports(this);
65 }
66
67
68
69
70
71
72 public ModuleExports copy() {
73 try {
74 return (ModuleExports) clone();
75 } catch (final CloneNotSupportedException e) {
76
77 }
78 return null;
79 }
80
81
82
83
84
85
86
87 public void dump(final DataOutputStream file) throws IOException {
88 file.writeShort(exportsIndex);
89 file.writeShort(exportsFlags);
90 file.writeShort(exportsToCount);
91 for (final int entry : exportsToIndex) {
92 file.writeShort(entry);
93 }
94 }
95
96
97
98
99 @Override
100 public String toString() {
101 return "exports(" + exportsIndex + ", " + exportsFlags + ", " + exportsToCount + ", ...)";
102 }
103
104
105
106
107 public String toString(final ConstantPool constantPool) {
108 final StringBuilder buf = new StringBuilder();
109 final String packageName = constantPool.constantToString(exportsIndex, Const.CONSTANT_Package);
110 buf.append(Utility.compactClassName(packageName, false));
111 buf.append(", ").append(String.format("%04x", exportsFlags));
112 buf.append(", to(").append(exportsToCount).append("):\n");
113 for (final int index : exportsToIndex) {
114 final String moduleName = constantPool.getConstantString(index, Const.CONSTANT_Module);
115 buf.append(" ").append(Utility.compactClassName(moduleName, false)).append("\n");
116 }
117 return buf.substring(0, buf.length() - 1);
118 }
119 }