View Javadoc
1   /*
2    * MIT License
3    * Copyright (c) 2006-2025 JMockit developers
4    * See LICENSE file for full license text.
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  }