View Javadoc
1   /*
2    * Copyright (c) 2006 JMockit developers
3    * This file is subject to the terms of the MIT license (see LICENSE.txt).
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  }