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