code: protected void createTraceArrayForParameters() {
          // Static methods don't have an implicit "this" argment so start
          // working with local var 0 instead of 1 for the parm list.
          int localVarOffset = isStatic ? 0 : 1;
          int syntheticArgs = 0;
  
          // Use an heuristic to guess when we're in a nested class constructor.
          // Nested classes that are not static get a synthetic reference to their
          // parent as the first argument.
          if (isConstructor() && getClassAdapter().isInnerClass() && argTypes.length > 1) {
              String className = getClassAdapter().getClassInternalName();
              String ownerName = className.substring(0, className.lastIndexOf("$"));
              if (Type.getObjectType(ownerName).equals(argTypes[0])) {
                  syntheticArgs = 1;
              }
          }
  
          // Build the object array that will hold the input args to the method.
          visitLdcInsn(new Integer(argTypes.length - syntheticArgs));
          visitTypeInsn(ANEWARRAY, "java/lang/Object");
  
          for (int i = syntheticArgs; i < argTypes.length; i++) {
              int j = i + localVarOffset;
  
              visitInsn(DUP);
              visitLdcInsn(new Integer(i - syntheticArgs));
              boxLocalVar(argTypes[i], j, isArgumentSensitive(i));
              visitInsn(AASTORE);
  
              // Local variables can use more than one slot. (DJ)
              // Account for those here by adding them to the local
              // var offset.
              localVarOffset += argTypes[i].getSize() - 1;
          }
      }
docs: Create an object array that contains references to the method parameters.
  Primitives will be boxed and parameters that have been annotated as
  sensitive will only have their class type traced. On exit, the Object
  array will be on the top of the stack.