117 * instruction number and dump of the failed method with information about
118 * locals and stack slot for each instruction. For example (format is -
119 * insnNumber locals : stack):
120 *
121 * <pre>
122 * jdk.internal.org.objectweb.asm.tree.analysis.AnalyzerException: Error at instruction 71: Expected I, but found .
123 * at jdk.internal.org.objectweb.asm.tree.analysis.Analyzer.analyze(Analyzer.java:289)
124 * at jdk.internal.org.objectweb.asm.util.CheckClassAdapter.verify(CheckClassAdapter.java:135)
125 * ...
126 * remove()V
127 * 00000 LinkedBlockingQueue$Itr . . . . . . . . :
128 * ICONST_0
129 * 00001 LinkedBlockingQueue$Itr . . . . . . . . : I
130 * ISTORE 2
131 * 00001 LinkedBlockingQueue$Itr <b>.</b> I . . . . . . :
132 * ...
133 *
134 * 00071 LinkedBlockingQueue$Itr <b>.</b> I . . . . . . :
135 * ILOAD 1
136 * 00072 <b>?</b>
137 * INVOKESPECIAL java/lang/Integer.<init> (I)V
138 * ...
139 * </pre>
140 *
141 * In the above output you can see that variable 1 loaded by
142 * <code>ILOAD 1</code> instruction at position <code>00071</code> is not
143 * initialized. You can also see that at the beginning of the method (code
144 * inserted by the transformation) variable 2 is initialized.
145 *
146 * <p>Note that when used like that, <code>CheckClassAdapter.verify()</code>
147 * can trigger additional class loading, because it is using
148 * <code>SimpleVerifier</code>.
149 *
150 * @author Eric Bruneton
151 */
152 public class CheckClassAdapter extends ClassVisitor {
153
154 /**
155 * The class version number.
156 */
157 private int version;
|
117 * instruction number and dump of the failed method with information about
118 * locals and stack slot for each instruction. For example (format is -
119 * insnNumber locals : stack):
120 *
121 * <pre>
122 * jdk.internal.org.objectweb.asm.tree.analysis.AnalyzerException: Error at instruction 71: Expected I, but found .
123 * at jdk.internal.org.objectweb.asm.tree.analysis.Analyzer.analyze(Analyzer.java:289)
124 * at jdk.internal.org.objectweb.asm.util.CheckClassAdapter.verify(CheckClassAdapter.java:135)
125 * ...
126 * remove()V
127 * 00000 LinkedBlockingQueue$Itr . . . . . . . . :
128 * ICONST_0
129 * 00001 LinkedBlockingQueue$Itr . . . . . . . . : I
130 * ISTORE 2
131 * 00001 LinkedBlockingQueue$Itr <b>.</b> I . . . . . . :
132 * ...
133 *
134 * 00071 LinkedBlockingQueue$Itr <b>.</b> I . . . . . . :
135 * ILOAD 1
136 * 00072 <b>?</b>
137 * INVOKESPECIAL java/lang/Integer.{@literal <init>} (I)V
138 * ...
139 * </pre>
140 *
141 * In the above output you can see that variable 1 loaded by
142 * <code>ILOAD 1</code> instruction at position <code>00071</code> is not
143 * initialized. You can also see that at the beginning of the method (code
144 * inserted by the transformation) variable 2 is initialized.
145 *
146 * <p>Note that when used like that, <code>CheckClassAdapter.verify()</code>
147 * can trigger additional class loading, because it is using
148 * <code>SimpleVerifier</code>.
149 *
150 * @author Eric Bruneton
151 */
152 public class CheckClassAdapter extends ClassVisitor {
153
154 /**
155 * The class version number.
156 */
157 private int version;
|