1
2
3
4
5
6 package mockit.internal.expectations.mocking;
7
8 import edu.umd.cs.findbugs.annotations.NonNull;
9 import edu.umd.cs.findbugs.annotations.Nullable;
10
11 import java.lang.reflect.Type;
12
13 import mockit.asm.classes.ClassReader;
14 import mockit.asm.jvmConstants.Access;
15 import mockit.internal.classGeneration.BaseSubclassGenerator;
16 import mockit.internal.util.ObjectMethods;
17
18 public final class SubclassGenerationModifier extends BaseSubclassGenerator {
19 public SubclassGenerationModifier(@NonNull Class<?> baseClass, @NonNull Type mockedType, @NonNull ClassReader cr,
20 @NonNull String subclassName, boolean copyConstructors) {
21 super(baseClass, cr, mockedType, subclassName, copyConstructors);
22 }
23
24 @Override
25 protected void generateMethodImplementation(@NonNull String className, int access, @NonNull String name,
26 @NonNull String desc, @Nullable String signature, @Nullable String[] exceptions) {
27 if (signature != null && mockedTypeInfo != null) {
28 signature = mockedTypeInfo.genericTypeMap.resolveSignature(className, signature);
29 }
30
31 mw = cw.visitMethod(Access.PUBLIC, name, desc, signature, exceptions);
32
33 if (ObjectMethods.isMethodFromObject(name, desc)) {
34 generateEmptyImplementation(desc);
35 } else {
36 generateDirectCallToHandler(className, access, name, desc, signature);
37 generateReturnWithObjectAtTopOfTheStack(desc);
38 mw.visitMaxStack(1);
39 }
40 }
41 }