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.faking;
6   
7   import edu.umd.cs.findbugs.annotations.NonNull;
8   import edu.umd.cs.findbugs.annotations.Nullable;
9   
10  import java.lang.reflect.Method;
11  
12  import mockit.internal.ClassLoadingBridge;
13  import mockit.internal.state.TestRun;
14  
15  public final class FakeBridge extends ClassLoadingBridge {
16      @NonNull
17      public static final ClassLoadingBridge MB = new FakeBridge();
18  
19      private FakeBridge() {
20          super("$FB");
21      }
22  
23      @NonNull
24      @Override
25      public Object invoke(@Nullable Object faked, Method method, @NonNull Object[] args) {
26          if (TestRun.isInsideNoMockingZone()) {
27              return false;
28          }
29  
30          TestRun.enterNoMockingZone();
31  
32          try {
33              String fakeClassDesc = (String) args[0];
34  
35              if (notToBeMocked(faked, fakeClassDesc)) {
36                  return false;
37              }
38  
39              Integer fakeStateIndex = (Integer) args[1];
40              return TestRun.updateFakeState(fakeClassDesc, faked, fakeStateIndex);
41          } finally {
42              TestRun.exitNoMockingZone();
43          }
44      }
45  }