1
2
3
4
5
6 package mockit.internal.expectations;
7
8 import static mockit.internal.util.Utilities.containsReference;
9
10 import edu.umd.cs.findbugs.annotations.NonNull;
11
12 import java.util.LinkedList;
13 import java.util.List;
14
15 import mockit.internal.util.GeneratedClasses;
16
17 final class InstanceBasedMatching {
18 @NonNull
19 private final List<Class<?>> mockedTypesToMatchOnInstances;
20
21 InstanceBasedMatching() {
22 mockedTypesToMatchOnInstances = new LinkedList<>();
23 }
24
25 void discoverMockedTypesToMatchOnInstances(@NonNull List<Class<?>> targetClasses) {
26 int numClasses = targetClasses.size();
27
28 if (numClasses > 1) {
29 for (int i = 0; i < numClasses; i++) {
30 Class<?> targetClass = targetClasses.get(i);
31
32 if (targetClasses.lastIndexOf(targetClass) > i) {
33 addMockedTypeToMatchOnInstance(targetClass);
34 }
35 }
36 }
37 }
38
39 private void addMockedTypeToMatchOnInstance(@NonNull Class<?> mockedType) {
40 if (!containsReference(mockedTypesToMatchOnInstances, mockedType)) {
41 mockedTypesToMatchOnInstances.add(mockedType);
42 }
43 }
44
45 boolean isToBeMatchedOnInstance(@NonNull Object mock) {
46 Class<?> mockedClass = GeneratedClasses.getMockedClass(mock);
47 return containsReference(mockedTypesToMatchOnInstances, mockedClass);
48 }
49 }