
io.github.classgraph.AnnotationParameterValueList Maven / Gradle / Ivy
/*
* This file is part of ClassGraph.
*
* Author: Luke Hutchison
*
* Hosted at: https://github.com/classgraph/classgraph
*
* --
*
* The MIT License (MIT)
*
* Copyright (c) 2019 Luke Hutchison
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including without
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial
* portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
* LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
* EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
* OR OTHER DEALINGS IN THE SOFTWARE.
*/
package io.github.classgraph;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
/** A list of {@link AnnotationParameterValue} objects. */
public class AnnotationParameterValueList extends MappableInfoList {
/** An unmodifiable empty {@link AnnotationParameterValueList}. */
static final AnnotationParameterValueList EMPTY_LIST = new AnnotationParameterValueList();
static {
EMPTY_LIST.makeUnmodifiable();
}
/**
* Return an unmodifiable empty {@link AnnotationParameterValueList}.
*
* @return the unmodifiable empty {@link AnnotationParameterValueList}.
*/
public static AnnotationParameterValueList emptyList() {
return EMPTY_LIST;
}
/**
* Construct a new modifiable empty list of {@link AnnotationParameterValue} objects.
*/
public AnnotationParameterValueList() {
super();
}
/**
* Construct a new modifiable empty list of {@link AnnotationParameterValue} objects, given a size hint.
*
* @param sizeHint
* the size hint
*/
public AnnotationParameterValueList(final int sizeHint) {
super(sizeHint);
}
/**
* Construct a new modifiable empty {@link AnnotationParameterValueList}, given an initial list of
* {@link AnnotationParameterValue} objects.
*
* @param annotationParameterValueCollection
* the collection of {@link AnnotationParameterValue} objects.
*/
public AnnotationParameterValueList(
final Collection annotationParameterValueCollection) {
super(annotationParameterValueCollection);
}
// -------------------------------------------------------------------------------------------------------------
/**
* Get {@link ClassInfo} objects for any classes referenced in the methods in this list.
*
* @param classNameToClassInfo
* the map from class name to {@link ClassInfo}.
* @param refdClassInfo
* the referenced class info
*/
protected void findReferencedClassInfo(final Map classNameToClassInfo,
final Set refdClassInfo) {
for (final AnnotationParameterValue apv : this) {
apv.findReferencedClassInfo(classNameToClassInfo, refdClassInfo);
}
}
// -------------------------------------------------------------------------------------------------------------
/**
* For primitive array type params, replace Object[] arrays containing boxed types with primitive arrays (need
* to check the type of each method of the annotation class to determine if it is a primitive array type).
*
* @param annotationClassInfo
* the annotation class info
*/
void convertWrapperArraysToPrimitiveArrays(final ClassInfo annotationClassInfo) {
for (final AnnotationParameterValue apv : this) {
apv.convertWrapperArraysToPrimitiveArrays(annotationClassInfo);
}
}
// -------------------------------------------------------------------------------------------------------------
/**
* Get the annotation parameter value, by calling {@link AnnotationParameterValue#getValue()} on the result of
* {@link #get(String)}, if non-null.
*
* @param parameterName
* The name of an annotation parameter.
* @return The value of the {@link AnnotationParameterValue} object in the list with the given name, by calling
* {@link AnnotationParameterValue#getValue()} on that object, or null if not found.
*
*
* The annotation parameter value may be one of the following types:
*
* - String for string constants
*
- String[] for arrays of strings
*
- A boxed type, e.g. Integer or Character, for primitive-typed constants
*
- A 1-dimensional primitive-typed array (i.e. int[], long[], short[], char[], byte[], boolean[],
* float[], or double[]), for arrays of primitives
*
- A 1-dimensional {@link Object}[] array for array types (and then the array element type may be
* one of the types in this list)
*
- {@link AnnotationEnumValue}, for enum constants (this wraps the enum class and the string name of
* the constant)
*
- {@link AnnotationClassRef}, for Class references within annotations (this wraps the name of the
* referenced class)
*
- {@link AnnotationInfo}, for nested annotations
*
*/
public Object getValue(final String parameterName) {
final AnnotationParameterValue apv = get(parameterName);
return apv == null ? null : apv.getValue();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy