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