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