@@ -327,7 +327,16 @@ private static MethodVisitor collectBasicMethodInfo(DexMethodNode methodNode, Cl
327
327
final int cleanFlag = ~((DexConstants .ACC_DECLARED_SYNCHRONIZED | DexConstants .ACC_CONSTRUCTOR
328
328
| Opcodes .ACC_SYNTHETIC ));
329
329
access &= cleanFlag ;
330
- return cv .visitMethod (access , methodNode .method .getName (), methodNode .method .getDesc (), signature , xthrows );
330
+ try {
331
+ return cv .visitMethod (access , methodNode .method .getName (), methodNode .method .getDesc (), signature , xthrows );
332
+ } catch (StringIndexOutOfBoundsException | IllegalArgumentException e ) {
333
+ System .err .println ("Applying workaround to method "
334
+ + methodNode .method .getOwner () + "#" + methodNode .method .getName ()
335
+ + " with original signature " + signature
336
+ + " by changing its types to java.lang.Object." );
337
+ return cv .visitMethod (access , methodNode .method .getName (), methodNode .method .getDesc (),
338
+ "(Ljava/lang/Object;)Ljava/lang/Object;" , xthrows );
339
+ }
331
340
}
332
341
333
342
protected static Map <String , Clz > collectClzInfo (DexFileNode fileNode ) {
@@ -568,8 +577,18 @@ public void convertField(DexClassNode classNode, DexFieldNode fieldNode, ClassVi
568
577
}
569
578
Object value = convertConstantValue (fieldNode .cst );
570
579
final int fieldCleanFlag = ~((DexConstants .ACC_DECLARED_SYNCHRONIZED | Opcodes .ACC_SYNTHETIC ));
571
- FieldVisitor fv = cv .visitField (fieldNode .access & fieldCleanFlag , fieldNode .field .getName (),
572
- fieldNode .field .getType (), signature == null || !signature .contains (";" ) ? null : signature , value );
580
+ FieldVisitor fv ;
581
+ try {
582
+ fv = cv .visitField (fieldNode .access & fieldCleanFlag , fieldNode .field .getName (),
583
+ fieldNode .field .getType (), signature , value );
584
+ } catch (StringIndexOutOfBoundsException | IllegalArgumentException e ) {
585
+ System .err .println ("Applying workaround to field "
586
+ + classNode .className + "#" + fieldNode .field .getName ()
587
+ + " with original signature " + signature
588
+ + " by changing its type to java.lang.Object." );
589
+ fv = cv .visitField (fieldNode .access & fieldCleanFlag , fieldNode .field .getName (),
590
+ fieldNode .field .getType (), "Ljava/lang/Object;" , value );
591
+ }
573
592
if (fv == null ) {
574
593
return ;
575
594
}
0 commit comments