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 Parkinson
6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.invocation;
7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.InternalMockHandler;
9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.stubbing.StubbedInvocationMatcher;
10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.util.MockUtil;
11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.Invocation;
12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.*;
14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class UnusedStubsFinder {
16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    /**
18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * Finds all unused stubs for given mocks
19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     *
20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     * @param mocks
21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson     */
22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public List<Invocation> find(List<?> mocks) {
23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        List<Invocation> unused = new LinkedList<Invocation>();
24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        for (Object mock : mocks) {
25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            InternalMockHandler<Object> handler = new MockUtil().getMockHandler(mock);
26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            List<StubbedInvocationMatcher> fromSingleMock = handler.getInvocationContainer().getStubbedInvocations();
27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            for(StubbedInvocationMatcher s : fromSingleMock) {
28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                if (!s.wasUsed()) {
29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                     unused.add(s.getInvocation());
30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                }
31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            }
32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return unused;
34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}