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;
6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.annotation.*;
8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/**
10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Allows shorthand {@link org.mockito.ArgumentCaptor} creation on fields.
11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p>Example:
13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java">
14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * public class Test{
15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *    &#64;Captor ArgumentCaptor&lt;AsyncCallback&lt;Foo&gt;&gt; captor;
17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *    &#64;Before
19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *    public void init(){
20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *       MockitoAnnotations.initMocks(this);
21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *    }
22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *    &#64;Test public void shouldDoSomethingUseful() {
24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *       //...
25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *       verify(mock.doStuff(captor.capture()));
26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *       assertEquals("foo", captor.getValue());
27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *    }
28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * }
29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre>
30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p>
32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * One of the advantages of using &#64;Captor annotation is that you can avoid warnings related capturing complex generic types.
33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson *
34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @see ArgumentCaptor
35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @since 1.8.3
36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */
37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@Retention(RetentionPolicy.RUNTIME)
38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@Target(ElementType.FIELD)
39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@Documented
40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic @interface Captor {}
41