1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/*
2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors
3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License.
4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */
5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.util.reflection;
6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.exceptions.base.MockitoException;
8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.reflect.Field;
10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class FieldReader {
12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    final Object target;
14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    final Field field;
15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    final AccessibilityChanger changer = new AccessibilityChanger();
16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public FieldReader(Object target, Field field) {
18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        this.target = target;
19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        this.field = field;
20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        changer.enableAccess(field);
21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public boolean isNull() {
24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return read() == null;
25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public Object read() {
28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        try {
29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            return field.get(target);
30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        } catch (Exception e) {
31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            throw new MockitoException("Cannot read state from field: " + field + ", on instance: " + target);
32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}
35