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.asm.methods;
7   
8   import edu.umd.cs.findbugs.annotations.NonNull;
9   import edu.umd.cs.findbugs.annotations.Nullable;
10  
11  import mockit.asm.annotations.AnnotationVisitor;
12  import mockit.asm.controlFlow.Label;
13  import mockit.asm.util.MethodHandle;
14  
15  import org.checkerframework.checker.index.qual.NonNegative;
16  
17  /**
18   * Same as {@link MethodVisitor}, except it always wraps a {@link MethodWriter}.
19   */
20  public class WrappingMethodVisitor extends MethodVisitor {
21      /**
22       * The method writer to which this visitor must delegate method calls.
23       */
24      @NonNull
25      protected final MethodWriter mw;
26  
27      /**
28       * Initializes a new wrapping Method Visitor.
29       *
30       * @param mw
31       *            the method visitor to which this visitor must delegate method calls
32       */
33      protected WrappingMethodVisitor(@NonNull MethodWriter mw) {
34          this.mw = mw;
35      }
36  
37      @Nullable
38      @Override
39      public AnnotationVisitor visitAnnotation(@NonNull String desc) {
40          return mw.visitAnnotation(desc);
41      }
42  
43      @Override
44      public final AnnotationVisitor visitParameterAnnotation(@NonNegative int parameter, @NonNull String desc) {
45          return mw.visitParameterAnnotation(parameter, desc);
46      }
47  
48      @Override
49      public void visitInsn(int opcode) {
50          mw.visitInsn(opcode);
51      }
52  
53      @Override
54      public void visitIntInsn(int opcode, int operand) {
55          mw.visitIntInsn(opcode, operand);
56      }
57  
58      @Override
59      public void visitVarInsn(int opcode, @NonNegative int varIndex) {
60          mw.visitVarInsn(opcode, varIndex);
61      }
62  
63      @Override
64      public void visitTypeInsn(int opcode, @NonNull String typeDesc) {
65          mw.visitTypeInsn(opcode, typeDesc);
66      }
67  
68      @Override
69      public void visitFieldInsn(int opcode, @NonNull String owner, @NonNull String name, @NonNull String desc) {
70          mw.visitFieldInsn(opcode, owner, name, desc);
71      }
72  
73      @Override
74      public void visitMethodInsn(int opcode, @NonNull String owner, @NonNull String name, @NonNull String desc,
75              boolean itf) {
76          mw.visitMethodInsn(opcode, owner, name, desc, itf);
77      }
78  
79      @Override
80      public final void visitInvokeDynamicInsn(@NonNull String name, @NonNull String desc, @NonNull MethodHandle bsm,
81              @NonNull Object... bsmArgs) {
82          mw.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
83      }
84  
85      @Override
86      public void visitJumpInsn(int opcode, @NonNull Label label) {
87          mw.visitJumpInsn(opcode, label);
88      }
89  
90      @Override
91      public void visitLabel(@NonNull Label label) {
92          mw.visitLabel(label);
93      }
94  
95      @Override
96      public void visitLdcInsn(@NonNull Object cst) {
97          mw.visitLdcInsn(cst);
98      }
99  
100     @Override
101     public void visitIincInsn(@NonNegative int varIndex, int increment) {
102         mw.visitIincInsn(varIndex, increment);
103     }
104 
105     @Override
106     public void visitTableSwitchInsn(int min, int max, @NonNull Label dflt, @NonNull Label... labels) {
107         mw.visitTableSwitchInsn(min, max, dflt, labels);
108     }
109 
110     @Override
111     public void visitLookupSwitchInsn(@NonNull Label dflt, @NonNull int[] keys, @NonNull Label[] labels) {
112         mw.visitLookupSwitchInsn(dflt, keys, labels);
113     }
114 
115     @Override
116     public void visitMultiANewArrayInsn(@NonNull String desc, @NonNegative int dims) {
117         mw.visitMultiANewArrayInsn(desc, dims);
118     }
119 
120     @Override
121     public void visitTryCatchBlock(@NonNull Label start, @NonNull Label end, @NonNull Label handler,
122             @Nullable String type) {
123         mw.visitTryCatchBlock(start, end, handler, type);
124     }
125 
126     @Override
127     public void visitLocalVariable(@NonNull String name, @NonNull String desc, String signature, @NonNull Label start,
128             @NonNull Label end, @NonNegative int index) {
129         mw.visitLocalVariable(name, desc, signature, start, end, index);
130     }
131 
132     @Override
133     public void visitLineNumber(@NonNegative int line, @NonNull Label start) {
134         mw.visitLineNumber(line, start);
135     }
136 
137     @Override
138     public void visitMaxStack(@NonNegative int maxStack) {
139         mw.visitMaxStack(maxStack);
140     }
141 }