jodd-proxetta/src/main/java/jodd/asm7/ClassReader.java
private void readParameterAnnotations(
      final MethodVisitor methodVisitor,
      final Context context,
      final int runtimeParameterAnnotationsOffset,
      final boolean visible) {
    int currentOffset = runtimeParameterAnnotationsOffset;
    int numParameters = b[currentOffset++] & 0xFF;
    methodVisitor.visitAnnotableParameterCount(numParameters, visible);
    char[] charBuffer = context.charBuffer;
    for (int i = 0; i < numParameters; ++i) {
      int numAnnotations = readUnsignedShort(currentOffset);
      currentOffset += 2;
      while (numAnnotations-- > 0) {
        // Parse the type_index field.
        String annotationDescriptor = readUTF8(currentOffset, charBuffer);
        currentOffset += 2;
        // Parse num_element_value_pairs and element_value_pairs and visit these values.
        currentOffset =
            readElementValues(
                methodVisitor.visitParameterAnnotation(i, annotationDescriptor, visible),
                currentOffset,
                /* named = */ true,
                charBuffer);
      }
    }
  }
private void readParameterAnnotations(
      final MethodVisitor methodVisitor,
      final Context context,
      final int runtimeParameterAnnotationsOffset,
      final boolean visible) {
    int currentOffset = runtimeParameterAnnotationsOffset;
    int numParameters = b[currentOffset++] & 0xFF;
    methodVisitor.visitAnnotableParameterCount(numParameters, visible);
    char[] charBuffer = context.charBuffer;
    for (int i = 0; i < numParameters; ++i) {
      int numAnnotations = readUnsignedShort(currentOffset);
      currentOffset += 2;
      while (numAnnotations-- > 0) {
        // Parse the type_index field.
        String annotationDescriptor = readUTF8(currentOffset, charBuffer);
        currentOffset += 2;
        // Parse num_element_value_pairs and element_value_pairs and visit these values.
        currentOffset =
            readElementValues(
                methodVisitor.visitParameterAnnotation(i, annotationDescriptor, visible),
                currentOffset,
                /* named = */ true,
                charBuffer);
      }
    }
  }
private void readParameterAnnotations ( final MethodVisitor methodVisitor , final Context context , final int runtimeParameterAnnotationsOffset , final boolean visible ) { int currentOffset = runtimeParameterAnnotationsOffset ; int numParameters = b [ currentOffset ++ ] & 0xFF ; methodVisitor . visitAnnotableParameterCount ( numParameters , visible ) ; char [ ] charBuffer = context . charBuffer ; for ( int i = 0 ; i < numParameters ; ++ i ) { int numAnnotations = readUnsignedShort ( currentOffset ) ; currentOffset += 2 ; while ( numAnnotations -- > 0 ) { // Parse the type_index field. String annotationDescriptor = readUTF8 ( currentOffset , charBuffer ) ; currentOffset += 2 ; // Parse num_element_value_pairs and element_value_pairs and visit these values. currentOffset = readElementValues ( methodVisitor . visitParameterAnnotation ( i , annotationDescriptor , visible ) , currentOffset , /* named = */ true , charBuffer ) ; } } }
Reads a Runtime[In]VisibleParameterAnnotations attribute and makes the given visitor visit it.

@param methodVisitor the visitor that must visit the parameter annotations.
@param context information about the class being parsed.
@param runtimeParameterAnnotationsOffset the start offset of a
Runtime[In]VisibleParameterAnnotations attribute, excluding the attribute_info's
attribute_name_index and attribute_length fields.
@param visible true if the attribute to parse is a RuntimeVisibleParameterAnnotations
attribute, false it is a RuntimeInvisibleParameterAnnotations attribute.
Reads a Runtime [ In ] VisibleParameterAnnotations attribute and makes the given visitor visit it .