| package org.junit.runners.model; |
| |
| import java.lang.annotation.Annotation; |
| import java.lang.reflect.Field; |
| |
| import org.junit.runners.BlockJUnit4ClassRunner; |
| |
| /** |
| * Represents a field on a test class (currently used only for Rules in |
| * {@link BlockJUnit4ClassRunner}, but custom runners can make other uses) |
| * |
| * @since 4.7 |
| */ |
| public class FrameworkField extends FrameworkMember<FrameworkField> { |
| private final Field field; |
| |
| FrameworkField(Field field) { |
| if (field == null) { |
| throw new NullPointerException( |
| "FrameworkField cannot be created without an underlying field."); |
| } |
| this.field = field; |
| } |
| |
| @Override |
| public String getName() { |
| return getField().getName(); |
| } |
| |
| public Annotation[] getAnnotations() { |
| return field.getAnnotations(); |
| } |
| |
| public <T extends Annotation> T getAnnotation(Class<T> annotationType) { |
| return field.getAnnotation(annotationType); |
| } |
| |
| @Override |
| public boolean isShadowedBy(FrameworkField otherMember) { |
| return otherMember.getName().equals(getName()); |
| } |
| |
| @Override |
| protected int getModifiers() { |
| return field.getModifiers(); |
| } |
| |
| /** |
| * @return the underlying java Field |
| */ |
| public Field getField() { |
| return field; |
| } |
| |
| /** |
| * @return the underlying Java Field type |
| * @see java.lang.reflect.Field#getType() |
| */ |
| @Override |
| public Class<?> getType() { |
| return field.getType(); |
| } |
| |
| @Override |
| public Class<?> getDeclaringClass() { |
| return field.getDeclaringClass(); |
| } |
| |
| /** |
| * Attempts to retrieve the value of this field on {@code target} |
| */ |
| public Object get(Object target) throws IllegalArgumentException, IllegalAccessException { |
| return field.get(target); |
| } |
| |
| @Override |
| public String toString() { |
| return field.toString(); |
| } |
| } |