void replaceArgsWithArray ( String desc ) { Type [ ] methodArgs = Type . getArgumentTypes ( desc ) ; createObjectArray ( methodArgs . length ) ; // [target] args... array for ( int i = methodArgs . length - 1 ; i >= 0 ; i -- ) { if ( methodArgs [ i ] . getSize ( ) == 2 ) { visitInsn ( DUP_X2 ) ; // [target] args... array arg_arg array visitLdcInsn ( Integer . valueOf ( i ) ) ; // [target] args... array arg_arg array idx visitInsn ( DUP2_X2 ) ; // [target] args... array array idx arg_arg array idx visitInsn ( POP2 ) ; // [target] args... array array idx arg_arg } else { visitInsn ( DUP_X1 ) ; // [target] args... array arg array visitInsn ( SWAP ) ; // [target] args... array array arg visitLdcInsn ( Integer . valueOf ( i ) ) ; // [target] args... array array arg idx visitInsn ( SWAP ) ; // [target] args... array array idx arg } box ( methodArgs [ i ] ) ; // [target] args... array array idx boxed visitInsn ( AASTORE ) ; // [target] args... array } // [target] array }
Create an object array and store the target method arguments in it .