org.testng.internal.reflect.Parameter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of testng Show documentation
Show all versions of testng Show documentation
A testing framework for the JVM
package org.testng.internal.reflect;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* This class can be replaceable by java.lang.reflect.Parameter if using jdk 1.8.
*
* @author Nitin Verma
*/
public class Parameter implements AnnotatedElement {
private final int index;
private final Class type;
/**
* preserving the order of annotations.
*/
private final Annotation[] declaredAnnotations;
/**
* For efficient back to back searches.
*/
private final Map, Annotation> declaredAnnotationsMap;
public Parameter(final int index, final Class type, final Annotation[] declaredAnnotations) {
this.index = index;
this.type = type;
this.declaredAnnotations = declaredAnnotations;
this.declaredAnnotationsMap = declaredAnnotations(declaredAnnotations);
}
private static Map, Annotation> declaredAnnotations(final Annotation[] ann) {
final Map, Annotation> map =
new HashMap<>();
if (ann != null) {
for (int i = 0; i < ann.length; i++) {
map.put(ann[i].annotationType(), ann[i]);
}
}
return map;
}
@Override
public String toString() {
return "Parameter{" +
"index=" + index +
", type=" + (type != null ? type.getName() : null) +
", declaredAnnotations=" + Arrays.toString(declaredAnnotations) +
'}';
}
/**
* Returns a {@code Class} object that identifies the
* declared type for the parameter represented by this
* {@code Parameter} object.
*
* @return a {@code Class} object identifying the declared
* type of the parameter represented by this object
*/
public Class getType() {
return type;
}
/**
* {@inheritDoc}
*/
@Override
public boolean isAnnotationPresent(Class annotationClass) {
return getAnnotation(annotationClass) != null;
}
/**
* {@inheritDoc}
*/
@Override
public T getAnnotation(final Class annotationClass) {
return annotationClass.cast(declaredAnnotationsMap.get(annotationClass));
}
/**
* {@inheritDoc}
*/
@Override
public Annotation[] getAnnotations() {
// For parameter all annotations are declared.
return getDeclaredAnnotations();
}
/**
* {@inheritDoc}
*/
@Override
public Annotation[] getDeclaredAnnotations() {
return declaredAnnotations;
}
}