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