docs: public AnnotationParameterValueList getParameterValues() {
          if (annotationParamValuesWithDefaults == null) {
              final ClassInfo classInfo = getClassInfo();
              if (classInfo == null) {
                  // ClassInfo has not yet been set, just return values without defaults
                  // (happens when trying to log AnnotationInfo during scanning, before ScanResult is available)
                  return annotationParamValues == null ? AnnotationParameterValueList.EMPTY_LIST
                          : annotationParamValues;
              }
  
              // Lazily convert any Object[] arrays of boxed types to primitive arrays
              if (annotationParamValues != null && !annotationParamValuesHasBeenConvertedToPrimitive) {
                  annotationParamValues.convertWrapperArraysToPrimitiveArrays(classInfo);
                  annotationParamValuesHasBeenConvertedToPrimitive = true;
              }
              if (classInfo.annotationDefaultParamValues != null
                      && !classInfo.annotationDefaultParamValuesHasBeenConvertedToPrimitive) {
                  classInfo.annotationDefaultParamValues.convertWrapperArraysToPrimitiveArrays(classInfo);
                  classInfo.annotationDefaultParamValuesHasBeenConvertedToPrimitive = true;
              }
  
              // Check if one or both of the defaults and the values in this annotation instance are null (empty)
              final AnnotationParameterValueList defaultParamValues = classInfo.annotationDefaultParamValues;
              if (defaultParamValues == null && annotationParamValues == null) {
                  return AnnotationParameterValueList.EMPTY_LIST;
              } else if (defaultParamValues == null) {
                  return annotationParamValues;
              } else if (annotationParamValues == null) {
                  return defaultParamValues;
              }
  
              // Overwrite defaults with non-defaults
              final Map<String, Object> allParamValues = new HashMap<>();
              for (final AnnotationParameterValue defaultParamValue : defaultParamValues) {
                  allParamValues.put(defaultParamValue.getName(), defaultParamValue.getValue());
              }
              for (final AnnotationParameterValue annotationParamValue : this.annotationParamValues) {
                  allParamValues.put(annotationParamValue.getName(), annotationParamValue.getValue());
              }
  
              // Put annotation values in the same order as the annotation methods (there is one method for each
              // annotation constant)
              if (classInfo.methodInfo == null) {
                  // Should not happen (when classfile is read, methods are always read, whether or not
                  // scanSpec.enableMethodInfo is true)
                  throw new IllegalArgumentException("Could not find methods for annotation " + classInfo.getName());
              }
              annotationParamValuesWithDefaults = new AnnotationParameterValueList();
              for (final MethodInfo mi : classInfo.methodInfo) {
                  final String paramName = mi.getName();
                  switch (paramName) {
                  // None of these method names should be present in the @interface class itself, it should only
                  // contain methods for the annotation constants (but skip them anyway to be safe). These methods
                  // should only exist in concrete instances of the annotation.
                  case "<init>":
                  case "<clinit>":
                  case "hashCode":
                  case "equals":
                  case "toString":
                  case "annotationType":
                      // Skip
                      break;
                  default:
                      // Annotation constant
                      final Object paramValue = allParamValues.get(paramName);
                      // Annotation values cannot be null (or absent, from either defaults or annotation instance)
                      if (paramValue != null) {
                          annotationParamValuesWithDefaults.add(new AnnotationParameterValue(paramName, paramValue));
                      }
                      break;
                  }
              }
          }
          return annotationParamValuesWithDefaults;
      }