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.debugging;
6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.invocation.InvocationMatcher;
8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.Invocation;
9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.Iterator;
11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.LinkedList;
12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.List;
13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@SuppressWarnings("unchecked")
15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class WarningsFinder {
16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    private final List<Invocation> baseUnusedStubs;
17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    private final List<InvocationMatcher> baseAllInvocations;
18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public WarningsFinder(List<Invocation> unusedStubs, List<InvocationMatcher> allInvocations) {
20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        this.baseUnusedStubs = unusedStubs;
21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        this.baseAllInvocations = allInvocations;
22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public void find(FindingsListener findingsListener) {
25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        List<Invocation> unusedStubs = new LinkedList(this.baseUnusedStubs);
26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        List<InvocationMatcher> allInvocations = new LinkedList(this.baseAllInvocations);
27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        Iterator<Invocation> unusedIterator = unusedStubs.iterator();
29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        while(unusedIterator.hasNext()) {
30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            Invocation unused = unusedIterator.next();
31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            Iterator<InvocationMatcher> unstubbedIterator = allInvocations.iterator();
32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            while(unstubbedIterator.hasNext()) {
33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                InvocationMatcher unstubbed = unstubbedIterator.next();
34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                if(unstubbed.hasSimilarMethod(unused)) {
35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                    findingsListener.foundStubCalledWithDifferentArgs(unused, unstubbed);
36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                    unusedIterator.remove();
37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                    unstubbedIterator.remove();
38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                }
39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            }
40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        for (Invocation i : unusedStubs) {
43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            findingsListener.foundUnusedStub(i);
44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        for (InvocationMatcher i : allInvocations) {
47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            findingsListener.foundUnstubbed(i);
48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}
51