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;
    }
public AnnotationParameterValueList getParameterValues ( ) { if ( annotationParamValuesWithDefaults == null ) { final ClassInfo classInfo = getClassInfo ( ) ; if ( classInfo == null ) { return annotationParamValues == null ? AnnotationParameterValueList . EMPTY_LIST : annotationParamValues ; } if ( annotationParamValues != null && ! annotationParamValuesHasBeenConvertedToPrimitive ) { annotationParamValues . convertWrapperArraysToPrimitiveArrays ( classInfo ) ; annotationParamValuesHasBeenConvertedToPrimitive = true ; } if ( classInfo . annotationDefaultParamValues != null && ! classInfo . annotationDefaultParamValuesHasBeenConvertedToPrimitive ) { classInfo . annotationDefaultParamValues . convertWrapperArraysToPrimitiveArrays ( classInfo ) ; classInfo . annotationDefaultParamValuesHasBeenConvertedToPrimitive = true ; } 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 ; } 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 ( ) ) ; } if ( classInfo . methodInfo == null ) { 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 ) { case "<init>" : case "<clinit>" : case "hashCode" : case "equals" : case "toString" : case "annotationType" : break ; default : final Object paramValue = allParamValues . get ( paramName ) ; if ( paramValue != null ) { annotationParamValuesWithDefaults . add ( new AnnotationParameterValue ( paramName , paramValue ) ) ; } break ; } } } return annotationParamValuesWithDefaults ; }
Get the parameter values.

@return The parameter values of this annotation, including any default parameter values inherited from the
annotation class definition, or the empty list if none.