001 package org.junit.runners.model; 002 003 import java.lang.annotation.Annotation; 004 import java.lang.reflect.Field; 005 006 import org.junit.runners.BlockJUnit4ClassRunner; 007 008 /** 009 * Represents a field on a test class (currently used only for Rules in 010 * {@link BlockJUnit4ClassRunner}, but custom runners can make other uses) 011 * 012 * @since 4.7 013 */ 014 public class FrameworkField extends FrameworkMember<FrameworkField> { 015 private final Field field; 016 017 FrameworkField(Field field) { 018 if (field == null) { 019 throw new NullPointerException( 020 "FrameworkField cannot be created without an underlying field."); 021 } 022 this.field = field; 023 } 024 025 @Override 026 public String getName() { 027 return getField().getName(); 028 } 029 030 public Annotation[] getAnnotations() { 031 return field.getAnnotations(); 032 } 033 034 public <T extends Annotation> T getAnnotation(Class<T> annotationType) { 035 return field.getAnnotation(annotationType); 036 } 037 038 @Override 039 public boolean isShadowedBy(FrameworkField otherMember) { 040 return otherMember.getName().equals(getName()); 041 } 042 043 @Override 044 protected int getModifiers() { 045 return field.getModifiers(); 046 } 047 048 /** 049 * @return the underlying java Field 050 */ 051 public Field getField() { 052 return field; 053 } 054 055 /** 056 * @return the underlying Java Field type 057 * @see java.lang.reflect.Field#getType() 058 */ 059 @Override 060 public Class<?> getType() { 061 return field.getType(); 062 } 063 064 @Override 065 public Class<?> getDeclaringClass() { 066 return field.getDeclaringClass(); 067 } 068 069 /** 070 * Attempts to retrieve the value of this field on {@code target} 071 */ 072 public Object get(Object target) throws IllegalArgumentException, IllegalAccessException { 073 return field.get(target); 074 } 075 076 @Override 077 public String toString() { 078 return field.toString(); 079 } 080 }