View Javadoc
1   /*
2    * MIT License
3    * Copyright (c) 2006-2025 JMockit developers
4    * See LICENSE file for full license text.
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  }