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.injection.filter;
6
7import java.lang.reflect.Field;
8import java.util.ArrayList;
9import java.util.Collection;
10import java.util.List;
11
12public class TypeBasedCandidateFilter implements MockCandidateFilter {
13
14    private final MockCandidateFilter next;
15
16    public TypeBasedCandidateFilter(MockCandidateFilter next) {
17        this.next = next;
18    }
19
20    public OngoingInjector filterCandidate(final Collection<Object> mocks,
21                                           final Field candidateFieldToBeInjected,
22                                           final List<Field> allRemainingCandidateFields,
23                                           final Object injectee) {
24        List<Object> mockTypeMatches = new ArrayList<Object>();
25        for (Object mock : mocks) {
26            if (candidateFieldToBeInjected.getType().isAssignableFrom(mock.getClass())) {
27                mockTypeMatches.add(mock);
28            }
29        }
30
31        return next.filterCandidate(mockTypeMatches, candidateFieldToBeInjected, allRemainingCandidateFields, injectee);
32    }
33}
34