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.ArgumentCaptor; 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.Captor; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.exceptions.base.MockitoException; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.util.reflection.GenericMaster; 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.reflect.Field; 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/** 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Instantiate {@link ArgumentCaptor} a field annotated by @Captor. 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class CaptorAnnotationProcessor implements FieldAnnotationProcessor<Captor> { 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public Object process(Captor annotation, Field field) { 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Class<?> type = field.getType(); 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (!ArgumentCaptor.class.isAssignableFrom(type)) { 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson throw new MockitoException("@Captor field must be of the type ArgumentCaptor.\n" + "Field: '" 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson + field.getName() + "' has wrong type\n" 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson + "For info how to use @Captor annotations see examples in javadoc for MockitoAnnotations class."); 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Class cls = new GenericMaster().getGenericType(field); 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return ArgumentCaptor.forClass(cls); 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson} 29