1
2
3
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 }