docs: void convertWrapperArraysToPrimitiveArrays(final ClassInfo annotationClassInfo, final String paramName) {
          if (annotationInfo != null) {
              // Recursively convert primitive arrays in nested annotations
              annotationInfo.convertWrapperArraysToPrimitiveArrays();
          } else if (objectArrayValue != null) {
              for (final ObjectTypedValueWrapper elt : objectArrayValue) {
                  if (elt.annotationInfo != null) {
                      // Recurse
                      elt.annotationInfo.convertWrapperArraysToPrimitiveArrays();
                  }
              }
  
              if (objectArrayValue.getClass().getComponentType().isArray()) {
                  // More than one array dimension -- not possible for annotation parameter values => skip
                  return;
              }
  
              // Find the method in the annotation class with the same name as the annotation parameter.
              final String targetElementTypeName = (String) getArrayValueClassOrName(annotationClassInfo, paramName,
                      /* getClass = */ false);
  
              // Get array element type for 1D non-primitive arrays, and convert to a primitive array
              switch (targetElementTypeName) {
              case "java.lang.String":
                  // Convert Object[] array containing String objects to String[] array
                  stringArrayValue = new String[objectArrayValue.length];
                  for (int j = 0; j < objectArrayValue.length; j++) {
                      stringArrayValue[j] = objectArrayValue[j].stringValue;
                  }
                  objectArrayValue = null;
                  break;
              case "int":
                  intArrayValue = new int[objectArrayValue.length];
                  for (int j = 0; j < objectArrayValue.length; j++) {
                      final ObjectTypedValueWrapper elt = objectArrayValue[j];
                      if (elt == null) {
                          throw new IllegalArgumentException("Illegal null value for array of element type "
                                  + targetElementTypeName + " in parameter " + paramName + " of annotation class "
                                  + annotationClassInfo.getName());
                      }
                      intArrayValue[j] = objectArrayValue[j].integerValue;
                  }
                  objectArrayValue = null;
                  break;
              case "long":
                  longArrayValue = new long[objectArrayValue.length];
                  for (int j = 0; j < objectArrayValue.length; j++) {
                      final ObjectTypedValueWrapper elt = objectArrayValue[j];
                      if (elt == null) {
                          throw new IllegalArgumentException("Illegal null value for array of element type "
                                  + targetElementTypeName + " in parameter " + paramName + " of annotation class "
                                  + annotationClassInfo.getName());
                      }
                      longArrayValue[j] = objectArrayValue[j].longValue;
                  }
                  objectArrayValue = null;
                  break;
              case "short":
                  shortArrayValue = new short[objectArrayValue.length];
                  for (int j = 0; j < objectArrayValue.length; j++) {
                      final ObjectTypedValueWrapper elt = objectArrayValue[j];
                      if (elt == null) {
                          throw new IllegalArgumentException("Illegal null value for array of element type "
                                  + targetElementTypeName + " in parameter " + paramName + " of annotation class "
                                  + annotationClassInfo.getName());
                      }
                      shortArrayValue[j] = objectArrayValue[j].shortValue;
                  }
                  objectArrayValue = null;
                  break;
              case "char":
                  charArrayValue = new char[objectArrayValue.length];
                  for (int j = 0; j < objectArrayValue.length; j++) {
                      final ObjectTypedValueWrapper elt = objectArrayValue[j];
                      if (elt == null) {
                          throw new IllegalArgumentException("Illegal null value for array of element type "
                                  + targetElementTypeName + " in parameter " + paramName + " of annotation class "
                                  + annotationClassInfo.getName());
                      }
                      charArrayValue[j] = objectArrayValue[j].characterValue;
                  }
                  objectArrayValue = null;
                  break;
              case "float":
                  floatArrayValue = new float[objectArrayValue.length];
                  for (int j = 0; j < objectArrayValue.length; j++) {
                      final ObjectTypedValueWrapper elt = objectArrayValue[j];
                      if (elt == null) {
                          throw new IllegalArgumentException("Illegal null value for array of element type "
                                  + targetElementTypeName + " in parameter " + paramName + " of annotation class "
                                  + annotationClassInfo.getName());
                      }
                      floatArrayValue[j] = objectArrayValue[j].floatValue;
                  }
                  objectArrayValue = null;
                  break;
              case "double":
                  doubleArrayValue = new double[objectArrayValue.length];
                  for (int j = 0; j < objectArrayValue.length; j++) {
                      final ObjectTypedValueWrapper elt = objectArrayValue[j];
                      if (elt == null) {
                          throw new IllegalArgumentException("Illegal null value for array of element type "
                                  + targetElementTypeName + " in parameter " + paramName + " of annotation class "
                                  + annotationClassInfo.getName());
                      }
                      doubleArrayValue[j] = objectArrayValue[j].doubleValue;
                  }
                  objectArrayValue = null;
                  break;
              case "boolean":
                  booleanArrayValue = new boolean[objectArrayValue.length];
                  for (int j = 0; j < objectArrayValue.length; j++) {
                      final ObjectTypedValueWrapper elt = objectArrayValue[j];
                      if (elt == null) {
                          throw new IllegalArgumentException("Illegal null value for array of element type "
                                  + targetElementTypeName + " in parameter " + paramName + " of annotation class "
                                  + annotationClassInfo.getName());
                      }
                      booleanArrayValue[j] = objectArrayValue[j].booleanValue;
                  }
                  objectArrayValue = null;
                  break;
              case "byte":
                  byteArrayValue = new byte[objectArrayValue.length];
                  for (int j = 0; j < objectArrayValue.length; j++) {
                      final ObjectTypedValueWrapper elt = objectArrayValue[j];
                      if (elt == null) {
                          throw new IllegalArgumentException("Illegal null value for array of element type "
                                  + targetElementTypeName + " in parameter " + paramName + " of annotation class "
                                  + annotationClassInfo.getName());
                      }
                      byteArrayValue[j] = objectArrayValue[j].byteValue;
                  }
                  objectArrayValue = null;
                  break;
              default:
                  // Leave objectArrayValue as-is
                  break;
              }
          }
      }