60 } |
60 } |
61 |
61 |
62 protected void writeConstantPool(ConstantPool constant_pool) { |
62 protected void writeConstantPool(ConstantPool constant_pool) { |
63 ConstantPool.Visitor<Integer, Void> v = new ConstantPool.Visitor<Integer,Void>() { |
63 ConstantPool.Visitor<Integer, Void> v = new ConstantPool.Visitor<Integer,Void>() { |
64 public Integer visitClass(CONSTANT_Class_info info, Void p) { |
64 public Integer visitClass(CONSTANT_Class_info info, Void p) { |
65 println("#" + info.name_index + ";\t// " + stringValue(info)); |
65 print("#" + info.name_index + ";"); |
|
66 tab(); |
|
67 println("// " + stringValue(info)); |
66 return 1; |
68 return 1; |
67 } |
69 } |
68 |
70 |
69 public Integer visitDouble(CONSTANT_Double_info info, Void p) { |
71 public Integer visitDouble(CONSTANT_Double_info info, Void p) { |
70 println(stringValue(info) + ";"); |
72 println(stringValue(info) + ";"); |
71 return 2; |
73 return 2; |
72 } |
74 } |
73 |
75 |
74 public Integer visitFieldref(CONSTANT_Fieldref_info info, Void p) { |
76 public Integer visitFieldref(CONSTANT_Fieldref_info info, Void p) { |
75 println("#" + info.class_index + ".#" + info.name_and_type_index + ";\t// " + stringValue(info)); |
77 print("#" + info.class_index + ".#" + info.name_and_type_index + ";"); |
|
78 tab(); |
|
79 println("// " + stringValue(info)); |
76 return 1; |
80 return 1; |
77 } |
81 } |
78 |
82 |
79 public Integer visitFloat(CONSTANT_Float_info info, Void p) { |
83 public Integer visitFloat(CONSTANT_Float_info info, Void p) { |
80 println(stringValue(info) + ";"); |
84 println(stringValue(info) + ";"); |
85 println(stringValue(info) + ";"); |
89 println(stringValue(info) + ";"); |
86 return 1; |
90 return 1; |
87 } |
91 } |
88 |
92 |
89 public Integer visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, Void p) { |
93 public Integer visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, Void p) { |
90 println("#" + info.class_index + ".#" + info.name_and_type_index + ";\t// " + stringValue(info)); |
94 print("#" + info.class_index + ".#" + info.name_and_type_index + ";"); |
|
95 tab(); |
|
96 println("// " + stringValue(info)); |
91 return 1; |
97 return 1; |
92 } |
98 } |
93 |
99 |
94 public Integer visitLong(CONSTANT_Long_info info, Void p) { |
100 public Integer visitLong(CONSTANT_Long_info info, Void p) { |
95 println(stringValue(info) + ";"); |
101 println(stringValue(info) + ";"); |
96 return 2; |
102 return 2; |
97 } |
103 } |
98 |
104 |
99 public Integer visitNameAndType(CONSTANT_NameAndType_info info, Void p) { |
105 public Integer visitNameAndType(CONSTANT_NameAndType_info info, Void p) { |
100 String tab = (options.compat ? "" : "\t"); // BUG 6622232 javap gets whitespace confused |
106 print("#" + info.name_index + ":#" + info.type_index + ";"); |
101 println("#" + info.name_index + ":#" + info.type_index + ";" + tab + "// " + stringValue(info)); |
107 tab(); |
|
108 println("// " + stringValue(info)); |
102 return 1; |
109 return 1; |
103 } |
110 } |
104 |
111 |
105 public Integer visitMethodref(CONSTANT_Methodref_info info, Void p) { |
112 public Integer visitMethodref(CONSTANT_Methodref_info info, Void p) { |
106 println("#" + info.class_index + ".#" + info.name_and_type_index + ";\t// " + stringValue(info)); |
113 print("#" + info.class_index + ".#" + info.name_and_type_index + ";"); |
|
114 tab(); |
|
115 println("// " + stringValue(info)); |
107 return 1; |
116 return 1; |
108 } |
117 } |
109 |
118 |
110 public Integer visitString(CONSTANT_String_info info, Void p) { |
119 public Integer visitString(CONSTANT_String_info info, Void p) { |
111 println("#" + info.string_index + ";\t// " + stringValue(info)); |
120 print("#" + info.string_index + ";"); |
|
121 tab(); |
|
122 println("// " + stringValue(info)); |
112 return 1; |
123 return 1; |
113 } |
124 } |
114 |
125 |
115 public Integer visitUtf8(CONSTANT_Utf8_info info, Void p) { |
126 public Integer visitUtf8(CONSTANT_Utf8_info info, Void p) { |
116 println(stringValue(info) + ";"); |
127 println(stringValue(info) + ";"); |
117 return 1; |
128 return 1; |
118 } |
129 } |
119 |
130 |
120 }; |
131 }; |
121 println(" Constant pool:"); |
132 println("Constant pool:"); |
|
133 indent(+1); |
|
134 int width = String.valueOf(constant_pool.size()).length() + 1; |
122 int cpx = 1; |
135 int cpx = 1; |
123 while (cpx < constant_pool.size()) { |
136 while (cpx < constant_pool.size()) { |
|
137 print(String.format("const %" + width + "s", ("#" + cpx))); |
124 try { |
138 try { |
125 CPInfo cpInfo = constant_pool.get(cpx); |
139 CPInfo cpInfo = constant_pool.get(cpx); |
126 print("const #" + cpx + " = " + tagName(cpInfo.getTag()) + "\t"); |
140 print(String.format(" = %-15s ", tagName(cpInfo.getTag()))); |
127 cpx += cpInfo.accept(v, null); |
141 cpx += cpInfo.accept(v, null); |
128 } catch (ConstantPool.InvalidIndex ex) { |
142 } catch (ConstantPool.InvalidIndex ex) { |
129 print("const #" + cpx); // should not happen |
143 // should not happen |
130 } |
144 } |
131 } |
145 } |
|
146 indent(-1); |
132 } |
147 } |
133 |
148 |
134 protected void write(int cpx) { |
149 protected void write(int cpx) { |
135 ClassFile classFile = classWriter.getClassFile(); |
150 ClassFile classFile = classWriter.getClassFile(); |
136 if (cpx == 0) { |
151 if (cpx == 0) { |