34
34
public class ASMUtil {
35
35
/**
36
36
* Append the call of proper autoboxing method for the given primitive type.
37
+ *
38
+ * @param mv MethodVisitor
39
+ * @param clz expected class
37
40
*/
38
41
public static void autoBoxing (MethodVisitor mv , Class <?> clz ) {
39
42
autoBoxing (mv , Type .getType (clz ));
@@ -69,72 +72,78 @@ static public Accessor[] getAccessors(Class<?> type, FieldFilter filter) {
69
72
70
73
/**
71
74
* Append the call of proper autoboxing method for the given primitive type.
75
+ *
76
+ * @param mv MethodVisitor
77
+ * @param fieldType expected class
72
78
*/
73
79
protected static void autoBoxing (MethodVisitor mv , Type fieldType ) {
74
80
switch (fieldType .getSort ()) {
75
81
case Type .BOOLEAN :
76
- mv .visitMethodInsn (INVOKESTATIC , "java/lang/Boolean" , "valueOf" , "(Z)Ljava/lang/Boolean;" );
82
+ mv .visitMethodInsn (INVOKESTATIC , "java/lang/Boolean" , "valueOf" , "(Z)Ljava/lang/Boolean;" , false );
77
83
break ;
78
84
case Type .BYTE :
79
- mv .visitMethodInsn (INVOKESTATIC , "java/lang/Byte" , "valueOf" , "(B)Ljava/lang/Byte;" );
85
+ mv .visitMethodInsn (INVOKESTATIC , "java/lang/Byte" , "valueOf" , "(B)Ljava/lang/Byte;" , false );
80
86
break ;
81
87
case Type .CHAR :
82
- mv .visitMethodInsn (INVOKESTATIC , "java/lang/Character" , "valueOf" , "(C)Ljava/lang/Character;" );
88
+ mv .visitMethodInsn (INVOKESTATIC , "java/lang/Character" , "valueOf" , "(C)Ljava/lang/Character;" , false );
83
89
break ;
84
90
case Type .SHORT :
85
- mv .visitMethodInsn (INVOKESTATIC , "java/lang/Short" , "valueOf" , "(S)Ljava/lang/Short;" );
91
+ mv .visitMethodInsn (INVOKESTATIC , "java/lang/Short" , "valueOf" , "(S)Ljava/lang/Short;" , false );
86
92
break ;
87
93
case Type .INT :
88
- mv .visitMethodInsn (INVOKESTATIC , "java/lang/Integer" , "valueOf" , "(I)Ljava/lang/Integer;" );
94
+ mv .visitMethodInsn (INVOKESTATIC , "java/lang/Integer" , "valueOf" , "(I)Ljava/lang/Integer;" , false );
89
95
break ;
90
96
case Type .FLOAT :
91
- mv .visitMethodInsn (INVOKESTATIC , "java/lang/Float" , "valueOf" , "(F)Ljava/lang/Float;" );
97
+ mv .visitMethodInsn (INVOKESTATIC , "java/lang/Float" , "valueOf" , "(F)Ljava/lang/Float;" , false );
92
98
break ;
93
99
case Type .LONG :
94
- mv .visitMethodInsn (INVOKESTATIC , "java/lang/Long" , "valueOf" , "(J)Ljava/lang/Long;" );
100
+ mv .visitMethodInsn (INVOKESTATIC , "java/lang/Long" , "valueOf" , "(J)Ljava/lang/Long;" , false );
95
101
break ;
96
102
case Type .DOUBLE :
97
- mv .visitMethodInsn (INVOKESTATIC , "java/lang/Double" , "valueOf" , "(D)Ljava/lang/Double;" );
103
+ mv .visitMethodInsn (INVOKESTATIC , "java/lang/Double" , "valueOf" , "(D)Ljava/lang/Double;" , false );
98
104
break ;
99
105
}
100
106
}
101
107
102
108
/**
103
109
* Append the call of proper extract primitive type of an boxed object.
110
+ *
111
+ * @param mv MethodVisitor
112
+ * @param fieldType expected class
104
113
*/
105
114
protected static void autoUnBoxing1 (MethodVisitor mv , Type fieldType ) {
106
115
switch (fieldType .getSort ()) {
107
116
case Type .BOOLEAN :
108
117
mv .visitTypeInsn (CHECKCAST , "java/lang/Boolean" );
109
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Boolean" , "booleanValue" , "()Z" );
118
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Boolean" , "booleanValue" , "()Z" , false );
110
119
break ;
111
120
case Type .BYTE :
112
121
mv .visitTypeInsn (CHECKCAST , "java/lang/Byte" );
113
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Byte" , "byteValue" , "()B" );
122
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Byte" , "byteValue" , "()B" , false );
114
123
break ;
115
124
case Type .CHAR :
116
125
mv .visitTypeInsn (CHECKCAST , "java/lang/Character" );
117
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Character" , "charValue" , "()C" );
126
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Character" , "charValue" , "()C" , false );
118
127
break ;
119
128
case Type .SHORT :
120
129
mv .visitTypeInsn (CHECKCAST , "java/lang/Short" );
121
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Short" , "shortValue" , "()S" );
130
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Short" , "shortValue" , "()S" , false );
122
131
break ;
123
132
case Type .INT :
124
133
mv .visitTypeInsn (CHECKCAST , "java/lang/Integer" );
125
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Integer" , "intValue" , "()I" );
134
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Integer" , "intValue" , "()I" , false );
126
135
break ;
127
136
case Type .FLOAT :
128
137
mv .visitTypeInsn (CHECKCAST , "java/lang/Float" );
129
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Float" , "floatValue" , "()F" );
138
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Float" , "floatValue" , "()F" , false );
130
139
break ;
131
140
case Type .LONG :
132
141
mv .visitTypeInsn (CHECKCAST , "java/lang/Long" );
133
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Long" , "longValue" , "()J" );
142
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Long" , "longValue" , "()J" , false );
134
143
break ;
135
144
case Type .DOUBLE :
136
145
mv .visitTypeInsn (CHECKCAST , "java/lang/Double" );
137
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Double" , "doubleValue" , "()D" );
146
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Double" , "doubleValue" , "()D" , false );
138
147
break ;
139
148
case Type .ARRAY :
140
149
mv .visitTypeInsn (CHECKCAST , fieldType .getInternalName ());
@@ -147,40 +156,43 @@ protected static void autoUnBoxing1(MethodVisitor mv, Type fieldType) {
147
156
/**
148
157
* Append the call of proper extract primitive type of an boxed object. this
149
158
* method use Number interface to unbox object
159
+ *
160
+ * @param mv MethodVisitor
161
+ * @param fieldType expected class
150
162
*/
151
163
protected static void autoUnBoxing2 (MethodVisitor mv , Type fieldType ) {
152
164
switch (fieldType .getSort ()) {
153
165
case Type .BOOLEAN :
154
166
mv .visitTypeInsn (CHECKCAST , "java/lang/Boolean" );
155
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Boolean" , "booleanValue" , "()Z" );
167
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Boolean" , "booleanValue" , "()Z" , false );
156
168
break ;
157
169
case Type .BYTE :
158
170
mv .visitTypeInsn (CHECKCAST , "java/lang/Number" );
159
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "byteValue" , "()B" );
171
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "byteValue" , "()B" , false );
160
172
break ;
161
173
case Type .CHAR :
162
174
mv .visitTypeInsn (CHECKCAST , "java/lang/Character" );
163
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Character" , "charValue" , "()C" );
175
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Character" , "charValue" , "()C" , false );
164
176
break ;
165
177
case Type .SHORT :
166
178
mv .visitTypeInsn (CHECKCAST , "java/lang/Number" );
167
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "shortValue" , "()S" );
179
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "shortValue" , "()S" , false );
168
180
break ;
169
181
case Type .INT :
170
182
mv .visitTypeInsn (CHECKCAST , "java/lang/Number" );
171
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "intValue" , "()I" );
183
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "intValue" , "()I" , false );
172
184
break ;
173
185
case Type .FLOAT :
174
186
mv .visitTypeInsn (CHECKCAST , "java/lang/Number" );
175
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "floatValue" , "()F" );
187
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "floatValue" , "()F" , false );
176
188
break ;
177
189
case Type .LONG :
178
190
mv .visitTypeInsn (CHECKCAST , "java/lang/Number" );
179
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "longValue" , "()J" );
191
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "longValue" , "()J" , false );
180
192
break ;
181
193
case Type .DOUBLE :
182
194
mv .visitTypeInsn (CHECKCAST , "java/lang/Number" );
183
- mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "doubleValue" , "()D" );
195
+ mv .visitMethodInsn (INVOKEVIRTUAL , "java/lang/Number" , "doubleValue" , "()D" , false );
184
196
break ;
185
197
case Type .ARRAY :
186
198
mv .visitTypeInsn (CHECKCAST , fieldType .getInternalName ());
@@ -193,8 +205,7 @@ protected static void autoUnBoxing2(MethodVisitor mv, Type fieldType) {
193
205
/**
194
206
* return a array of new Label (used for switch/case generation)
195
207
*
196
- * @param cnt
197
- * number of label to return
208
+ * @param cnt number of label to return
198
209
*/
199
210
public static Label [] newLabels (int cnt ) {
200
211
Label [] r = new Label [cnt ];
@@ -203,6 +214,10 @@ public static Label[] newLabels(int cnt) {
203
214
return r ;
204
215
}
205
216
217
+ /**
218
+ * @param key the field name
219
+ * @return setter name
220
+ */
206
221
public static String getSetterName (String key ) {
207
222
int len = key .length ();
208
223
char [] b = new char [len + 3 ];
@@ -219,6 +234,10 @@ public static String getSetterName(String key) {
219
234
return new String (b );
220
235
}
221
236
237
+ /**
238
+ * @param key the field name
239
+ * @return getter name
240
+ */
222
241
public static String getGetterName (String key ) {
223
242
int len = key .length ();
224
243
char [] b = new char [len + 3 ];
@@ -235,6 +254,10 @@ public static String getGetterName(String key) {
235
254
return new String (b );
236
255
}
237
256
257
+ /**
258
+ * @param key the boolean field name
259
+ * @return boolean getter name
260
+ */
238
261
public static String getIsName (String key ) {
239
262
int len = key .length ();
240
263
char [] b = new char [len + 2 ];
0 commit comments