@@ -198,6 +198,10 @@ private static class AsmMethodRemapper extends MethodRemapper {
198
198
this .inferNameFromSameLvIndex = inferNameFromSameLvIndex ;
199
199
}
200
200
201
+ private AsmRemapper getRemapper () {
202
+ return (AsmRemapper ) remapper ;
203
+ }
204
+
201
205
@ Override
202
206
public AnnotationVisitor createAnnotationRemapper (String descriptor , AnnotationVisitor annotationVisitor ) {
203
207
return new AsmAnnotationRemapper (descriptor , annotationVisitor , (AsmRemapper ) remapper );
@@ -240,21 +244,48 @@ public void visitMultiANewArrayInsn(String descriptor, int numDimensions) {
240
244
}
241
245
242
246
@ Override
243
- public void visitFieldInsn (int opcode , String owner , String name , String descriptor ) {
247
+ public void visitFieldInsn (int opcode , String owner , String name , String desc ) {
244
248
if (checkPackageAccess ) {
245
- PackageAccessChecker .checkMember (this .owner , owner , name , descriptor , TrMember .MemberType .FIELD , "field instruction" , (AsmRemapper ) remapper );
249
+ PackageAccessChecker .checkMember (this .owner , owner , name , desc , TrMember .MemberType .FIELD , "field instruction" , (AsmRemapper ) remapper );
250
+ }
251
+
252
+ AsmRemapper remapper = getRemapper ();
253
+ ClassInstance cls = remapper .getClass (owner );
254
+ MemberInstance member = cls != null ? cls .resolveField (name , desc ) : null ;
255
+
256
+ name = remapper .mapFieldName (cls , member , name , desc );
257
+
258
+ if (remapper .tr .useResolvedOwners && member != null && member .getOwner () != cls ) {
259
+ owner = member .getOwner ().getName ();
246
260
}
247
261
248
- super .visitFieldInsn (opcode , owner , name , descriptor );
262
+ mv .visitFieldInsn (opcode ,
263
+ remapper .mapType (owner ),
264
+ name ,
265
+ remapper .mapDesc (desc ));
249
266
}
250
267
251
268
@ Override
252
- public void visitMethodInsn (int opcode , String owner , String name , String descriptor , boolean isInterface ) {
269
+ public void visitMethodInsn (int opcode , String owner , String name , String desc , boolean isInterface ) {
253
270
if (checkPackageAccess ) {
254
- PackageAccessChecker .checkMember (this .owner , owner , name , descriptor , TrMember .MemberType .METHOD , "method instruction" , (AsmRemapper ) remapper );
271
+ PackageAccessChecker .checkMember (this .owner , owner , name , desc , TrMember .MemberType .METHOD , "method instruction" , (AsmRemapper ) remapper );
272
+ }
273
+
274
+ AsmRemapper remapper = getRemapper ();
275
+ ClassInstance cls = remapper .getClass (owner );
276
+ MemberInstance member = cls != null ? cls .resolveMethod (name , desc ) : null ;
277
+
278
+ name = remapper .mapMethodName (cls , member , name , desc );
279
+
280
+ if (remapper .tr .useResolvedOwners && member != null && member .getOwner () != cls ) {
281
+ owner = member .getOwner ().getName ();
255
282
}
256
283
257
- super .visitMethodInsn (opcode , owner , name , descriptor , isInterface );
284
+ mv .visitMethodInsn (opcode ,
285
+ remapper .mapType (owner ),
286
+ name ,
287
+ remapper .mapMethodDesc (desc ),
288
+ isInterface );
258
289
}
259
290
260
291
@ Override
@@ -271,7 +302,7 @@ public void visitInvokeDynamicInsn(String name, String descriptor, Handle bootst
271
302
bootstrapMethodArguments [i ] = remapper .mapValue (bootstrapMethodArguments [i ]);
272
303
}
273
304
274
- // bypass remapper
305
+ // bypass remapper, TODO: implement useResolvedOwners
275
306
mv .visitInvokeDynamicInsn (name ,
276
307
remapper .mapMethodDesc (descriptor ), (Handle ) remapper .mapValue (bootstrapMethodHandle ),
277
308
bootstrapMethodArguments );
0 commit comments