1b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpackage org.junit.runners.model; 2b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 3b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.lang.annotation.Annotation; 4b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.lang.reflect.Field; 5b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.lang.reflect.Modifier; 6b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 7b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runners.BlockJUnit4ClassRunner; 8b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 9b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot/** 10b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * Represents a field on a test class (currently used only for Rules in 11b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * {@link BlockJUnit4ClassRunner}, but custom runners can make other uses) 12b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 13b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpublic class FrameworkField extends FrameworkMember<FrameworkField> { 14b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private final Field fField; 15b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 16b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot FrameworkField(Field field) { 17b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot fField= field; 18b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 19b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 20b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public String getName() { 21b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return getField().getName(); 22b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 23b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 24b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot @Override 25b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public Annotation[] getAnnotations() { 26b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return fField.getAnnotations(); 27b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 28b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 29b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public boolean isPublic() { 30b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot int modifiers= fField.getModifiers(); 31b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return Modifier.isPublic(modifiers); 32b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 33b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 34b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot @Override 35b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public boolean isShadowedBy(FrameworkField otherMember) { 36b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return otherMember.getName().equals(getName()); 37b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 38b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 39b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public boolean isStatic() { 40b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot int modifiers= fField.getModifiers(); 41b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return Modifier.isStatic(modifiers); 42b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 43b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 44b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot /** 45b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @return the underlying java Field 46b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 47b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public Field getField() { 48b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return fField; 49b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 50b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 51b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot /** 52b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @return the underlying Java Field type 53b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @see java.lang.reflect.Field#getType() 54b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 55b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public Class<?> getType() { 56b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return fField.getType(); 57b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 58b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 59b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot /** 60b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * Attempts to retrieve the value of this field on {@code target} 61b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 62b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public Object get(Object target) throws IllegalArgumentException, IllegalAccessException { 63b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return fField.get(target); 64b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 65b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot} 66