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.configuration;
6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.Mock;
8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.MockSettings;
9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.Mockito;
10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.reflect.Field;
12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/**
14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Instantiates a mock on a field annotated by {@link Mock}
15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */
16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class MockAnnotationProcessor implements FieldAnnotationProcessor<Mock> {
17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public Object process(Mock annotation, Field field) {
18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        MockSettings mockSettings = Mockito.withSettings();
19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        if (annotation.extraInterfaces().length > 0) { // never null
20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            mockSettings.extraInterfaces(annotation.extraInterfaces());
21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        if ("".equals(annotation.name())) {
23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            mockSettings.name(field.getName());
24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        } else {
25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            mockSettings.name(annotation.name());
26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        if(annotation.serializable()){
28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        	mockSettings.serializable();
29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        // see @Mock answer default value
32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        mockSettings.defaultAnswer(annotation.answer().get());
33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return Mockito.mock(field.getType(), mockSettings);
34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}
36