1/*
2 * Copyright (c) 2007 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5package org.mockito.internal.configuration;
6
7import org.mockito.ArgumentCaptor;
8import org.mockito.Captor;
9import org.mockito.exceptions.base.MockitoException;
10import org.mockito.internal.util.reflection.GenericMaster;
11
12import java.lang.reflect.Field;
13
14/**
15 * Instantiate {@link ArgumentCaptor} a field annotated by @Captor.
16 */
17public class CaptorAnnotationProcessor implements FieldAnnotationProcessor<Captor> {
18    public Object process(Captor annotation, Field field) {
19        Class<?> type = field.getType();
20        if (!ArgumentCaptor.class.isAssignableFrom(type)) {
21            throw new MockitoException("@Captor field must be of the type ArgumentCaptor.\n" + "Field: '"
22               + field.getName() + "' has wrong type\n"
23               + "For info how to use @Captor annotations see examples in javadoc for MockitoAnnotations class.");
24        }
25        Class cls = new GenericMaster().getGenericType(field);
26        return ArgumentCaptor.forClass(cls);
27    }
28}
29