src/share/classes/jdk/internal/org/objectweb/asm/util/CheckMethodAdapter.java

Print this page

        

@@ -73,10 +73,12 @@
 import jdk.internal.org.objectweb.asm.Handle;
 import jdk.internal.org.objectweb.asm.Label;
 import jdk.internal.org.objectweb.asm.MethodVisitor;
 import jdk.internal.org.objectweb.asm.Opcodes;
 import jdk.internal.org.objectweb.asm.Type;
+import jdk.internal.org.objectweb.asm.TypePath;
+import jdk.internal.org.objectweb.asm.TypeReference;
 import jdk.internal.org.objectweb.asm.tree.MethodNode;
 import jdk.internal.org.objectweb.asm.tree.analysis.Analyzer;
 import jdk.internal.org.objectweb.asm.tree.analysis.BasicValue;
 import jdk.internal.org.objectweb.asm.tree.analysis.BasicVerifier;
 

@@ -102,10 +104,15 @@
      * The class version number.
      */
     public int version;
 
     /**
+     * The access flags of the method.
+     */
+    private int access;
+
+    /**
      * <tt>true</tt> if the visitCode method has been called.
      */
     private boolean startCode;
 
     /**

@@ -134,10 +141,25 @@
      * visitLabel before the end of the method (i.e. should be in #labels).
      */
     private Set<Label> usedLabels;
 
     /**
+     * If an explicit first frame has been visited before the first instruction.
+     */
+    private boolean hasExplicitFirstFrame;
+
+    /**
+     * Number of visited frames in expanded form.
+     */
+    private int expandedFrames;
+
+    /**
+     * Number of visited frames in compressed form.
+     */
+    private int compressedFrames;
+
+    /**
      * The exception handler ranges. Each pair of list element contains the
      * start and end labels of an exception handler block.
      */
     private List<Label> handlers;
 

@@ -379,11 +401,12 @@
      * will not perform any data flow check (see
      * {@link #CheckMethodAdapter(int,String,String,MethodVisitor,Map)}).
      * <i>Subclasses must not use this constructor</i>. Instead, they must use
      * the {@link #CheckMethodAdapter(int, MethodVisitor, Map)} version.
      *
-     * @param mv the method visitor to which this adapter must delegate calls.
+     * @param mv
+     *            the method visitor to which this adapter must delegate calls.
      */
     public CheckMethodAdapter(final MethodVisitor mv) {
         this(mv, new HashMap<Label, Integer>());
     }
 

@@ -392,33 +415,32 @@
      * will not perform any data flow check (see
      * {@link #CheckMethodAdapter(int,String,String,MethodVisitor,Map)}).
      * <i>Subclasses must not use this constructor</i>. Instead, they must use
      * the {@link #CheckMethodAdapter(int, MethodVisitor, Map)} version.
      *
-     * @param mv the method visitor to which this adapter must delegate calls.
-     * @param labels a map of already visited labels (in other methods).
+     * @param mv
+     *            the method visitor to which this adapter must delegate calls.
+     * @param labels
+     *            a map of already visited labels (in other methods).
      */
-    public CheckMethodAdapter(
-        final MethodVisitor mv,
-        final Map<Label, Integer> labels)
-    {
-        this(Opcodes.ASM4, mv, labels);
+    public CheckMethodAdapter(final MethodVisitor mv,
+            final Map<Label, Integer> labels) {
+        this(Opcodes.ASM5, mv, labels);
     }
 
     /**
      * Constructs a new {@link CheckMethodAdapter} object. This method adapter
      * will not perform any data flow check (see
      * {@link #CheckMethodAdapter(int,String,String,MethodVisitor,Map)}).
      *
-     * @param mv the method visitor to which this adapter must delegate calls.
-     * @param labels a map of already visited labels (in other methods).
+     * @param mv
+     *            the method visitor to which this adapter must delegate calls.
+     * @param labels
+     *            a map of already visited labels (in other methods).
      */
-    protected CheckMethodAdapter(
-        final int api,
-        final MethodVisitor mv,
-        final Map<Label, Integer> labels)
-    {
+    protected CheckMethodAdapter(final int api, final MethodVisitor mv,
+            final Map<Label, Integer> labels) {
         super(api, mv);
         this.labels = labels;
         this.usedLabels = new HashSet<Label>();
         this.handlers = new ArrayList<Label>();
     }

@@ -427,34 +449,36 @@
      * Constructs a new {@link CheckMethodAdapter} object. This method adapter
      * will perform basic data flow checks. For instance in a method whose
      * signature is <tt>void m ()</tt>, the invalid instruction IRETURN, or the
      * invalid sequence IADD L2I will be detected.
      *
-     * @param access the method's access flags.
-     * @param name the method's name.
-     * @param desc the method's descriptor (see {@link Type Type}).
-     * @param cmv the method visitor to which this adapter must delegate calls.
-     * @param labels a map of already visited labels (in other methods).
+     * @param access
+     *            the method's access flags.
+     * @param name
+     *            the method's name.
+     * @param desc
+     *            the method's descriptor (see {@link Type Type}).
+     * @param cmv
+     *            the method visitor to which this adapter must delegate calls.
+     * @param labels
+     *            a map of already visited labels (in other methods).
      */
-    public CheckMethodAdapter(
-        final int access,
-        final String name,
-        final String desc,
-        final MethodVisitor cmv,
-        final Map<Label, Integer> labels)
-    {
+    public CheckMethodAdapter(final int access, final String name,
+            final String desc, final MethodVisitor cmv,
+            final Map<Label, Integer> labels) {
         this(new MethodNode(access, name, desc, null, null) {
             @Override
             public void visitEnd() {
-                Analyzer<BasicValue> a = new Analyzer<BasicValue>(new BasicVerifier());
+                Analyzer<BasicValue> a = new Analyzer<BasicValue>(
+                        new BasicVerifier());
                 try {
                     a.analyze("dummy", this);
                 } catch (Exception e) {
                     if (e instanceof IndexOutOfBoundsException
-                            && maxLocals == 0 && maxStack == 0)
-                    {
-                        throw new RuntimeException("Data flow checking option requires valid, non zero maxLocals and maxStack values.");
+                            && maxLocals == 0 && maxStack == 0) {
+                        throw new RuntimeException(
+                                "Data flow checking option requires valid, non zero maxLocals and maxStack values.");
                     }
                     e.printStackTrace();
                     StringWriter sw = new StringWriter();
                     PrintWriter pw = new PrintWriter(sw, true);
                     CheckClassAdapter.printAnalyzerResult(this, a, pw);

@@ -462,66 +486,88 @@
                     throw new RuntimeException(e.getMessage() + ' '
                             + sw.toString());
                 }
                 accept(cmv);
             }
-        },
-                labels);
+        }, labels);
+        this.access = access;
     }
 
     @Override
-    public AnnotationVisitor visitAnnotation(
-        final String desc,
-        final boolean visible)
-    {
+    public void visitParameter(String name, int access) {
+        if (name != null) {
+            checkUnqualifiedName(version, name, "name");
+        }
+        CheckClassAdapter.checkAccess(access, Opcodes.ACC_FINAL
+                + Opcodes.ACC_MANDATED + Opcodes.ACC_SYNTHETIC);
+    }
+
+    @Override
+    public AnnotationVisitor visitAnnotation(final String desc,
+            final boolean visible) {
         checkEndMethod();
         checkDesc(desc, false);
         return new CheckAnnotationAdapter(super.visitAnnotation(desc, visible));
     }
 
     @Override
+    public AnnotationVisitor visitTypeAnnotation(final int typeRef,
+            final TypePath typePath, final String desc, final boolean visible) {
+        checkEndMethod();
+        int sort = typeRef >>> 24;
+        if (sort != TypeReference.METHOD_TYPE_PARAMETER
+                && sort != TypeReference.METHOD_TYPE_PARAMETER_BOUND
+                && sort != TypeReference.METHOD_RETURN
+                && sort != TypeReference.METHOD_RECEIVER
+                && sort != TypeReference.METHOD_FORMAL_PARAMETER
+                && sort != TypeReference.THROWS) {
+            throw new IllegalArgumentException("Invalid type reference sort 0x"
+                    + Integer.toHexString(sort));
+        }
+        CheckClassAdapter.checkTypeRefAndPath(typeRef, typePath);
+        CheckMethodAdapter.checkDesc(desc, false);
+        return new CheckAnnotationAdapter(super.visitTypeAnnotation(typeRef,
+                typePath, desc, visible));
+    }
+
+    @Override
     public AnnotationVisitor visitAnnotationDefault() {
         checkEndMethod();
         return new CheckAnnotationAdapter(super.visitAnnotationDefault(), false);
     }
 
     @Override
-    public AnnotationVisitor visitParameterAnnotation(
-        final int parameter,
-        final String desc,
-        final boolean visible)
-    {
+    public AnnotationVisitor visitParameterAnnotation(final int parameter,
+            final String desc, final boolean visible) {
         checkEndMethod();
         checkDesc(desc, false);
-        return new CheckAnnotationAdapter(super.visitParameterAnnotation(parameter,
-                desc,
-                visible));
+        return new CheckAnnotationAdapter(super.visitParameterAnnotation(
+                parameter, desc, visible));
     }
 
     @Override
     public void visitAttribute(final Attribute attr) {
         checkEndMethod();
         if (attr == null) {
-            throw new IllegalArgumentException("Invalid attribute (must not be null)");
+            throw new IllegalArgumentException(
+                    "Invalid attribute (must not be null)");
         }
         super.visitAttribute(attr);
     }
 
     @Override
     public void visitCode() {
+        if ((access & Opcodes.ACC_ABSTRACT) != 0) {
+            throw new RuntimeException("Abstract methods cannot have code");
+        }
         startCode = true;
         super.visitCode();
     }
 
     @Override
-    public void visitFrame(
-        final int type,
-        final int nLocal,
-        final Object[] local,
-        final int nStack,
-        final Object[] stack)
-    {
+    public void visitFrame(final int type, final int nLocal,
+            final Object[] local, final int nStack, final Object[] stack) {
         int mLocal;
         int mStack;
         switch (type) {
             case Opcodes.F_NEW:
             case Opcodes.F_FULL:

@@ -558,23 +604,40 @@
                     + " for frame type " + type);
         }
 
         if (type != Opcodes.F_CHOP) {
             if (nLocal > 0 && (local == null || local.length < nLocal)) {
-                throw new IllegalArgumentException("Array local[] is shorter than nLocal");
+                throw new IllegalArgumentException(
+                        "Array local[] is shorter than nLocal");
             }
             for (int i = 0; i < nLocal; ++i) {
                 checkFrameValue(local[i]);
             }
         }
         if (nStack > 0 && (stack == null || stack.length < nStack)) {
-            throw new IllegalArgumentException("Array stack[] is shorter than nStack");
+            throw new IllegalArgumentException(
+                    "Array stack[] is shorter than nStack");
         }
         for (int i = 0; i < nStack; ++i) {
             checkFrameValue(stack[i]);
         }
-
+        if (type == Opcodes.F_NEW) {
+            if (insnCount == 0) {
+                hasExplicitFirstFrame = true;
+            } else if (!hasExplicitFirstFrame) {
+                throw new RuntimeException(
+                        "In expanded form, a first frame must be explicitly "
+                                + "visited before the first instruction.");
+            }
+            ++expandedFrames;
+        } else {
+            ++compressedFrames;
+        }
+        if (expandedFrames > 0 && compressedFrames > 0) {
+            throw new RuntimeException(
+                    "Expanded and compressed frames must not be mixed.");
+        }
         super.visitFrame(type, nLocal, local, nStack, stack);
     }
 
     @Override
     public void visitInsn(final int opcode) {

@@ -598,11 +661,12 @@
                 checkSignedShort(operand, "Invalid operand");
                 break;
             // case Constants.NEWARRAY:
             default:
                 if (operand < Opcodes.T_BOOLEAN || operand > Opcodes.T_LONG) {
-                    throw new IllegalArgumentException("Invalid operand (must be an array type code T_...): "
+                throw new IllegalArgumentException(
+                        "Invalid operand (must be an array type code T_...): "
                             + operand);
                 }
         }
         super.visitIntInsn(opcode, operand);
         ++insnCount;

@@ -623,24 +687,20 @@
         checkStartCode();
         checkEndCode();
         checkOpcode(opcode, 3);
         checkInternalName(type, "type");
         if (opcode == Opcodes.NEW && type.charAt(0) == '[') {
-            throw new IllegalArgumentException("NEW cannot be used to create arrays: "
-                    + type);
+            throw new IllegalArgumentException(
+                    "NEW cannot be used to create arrays: " + type);
         }
         super.visitTypeInsn(opcode, type);
         ++insnCount;
     }
 
     @Override
-    public void visitFieldInsn(
-        final int opcode,
-        final String owner,
-        final String name,
-        final String desc)
-    {
+    public void visitFieldInsn(final int opcode, final String owner,
+            final String name, final String desc) {
         checkStartCode();
         checkEndCode();
         checkOpcode(opcode, 4);
         checkInternalName(owner, "owner");
         checkUnqualifiedName(version, name, "name");

@@ -648,40 +708,33 @@
         super.visitFieldInsn(opcode, owner, name, desc);
         ++insnCount;
     }
 
     @Override
-    public void visitMethodInsn(
-        final int opcode,
-        final String owner,
-        final String name,
-        final String desc)
-    {
+    public void visitMethodInsn(final int opcode, final String owner,
+            final String name, final String desc) {
         checkStartCode();
         checkEndCode();
         checkOpcode(opcode, 5);
+        if (opcode != Opcodes.INVOKESPECIAL || !"<init>".equals(name)) {
         checkMethodIdentifier(version, name, "name");
+        }
         checkInternalName(owner, "owner");
         checkMethodDesc(desc);
         super.visitMethodInsn(opcode, owner, name, desc);
         ++insnCount;
     }
 
     @Override
-    public void visitInvokeDynamicInsn(
-        String name,
-        String desc,
-        Handle bsm,
-        Object... bsmArgs)
-    {
+    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
+            Object... bsmArgs) {
         checkStartCode();
         checkEndCode();
         checkMethodIdentifier(version, name, "name");
         checkMethodDesc(desc);
         if (bsm.getTag() != Opcodes.H_INVOKESTATIC
-                && bsm.getTag() != Opcodes.H_NEWINVOKESPECIAL)
-        {
+                && bsm.getTag() != Opcodes.H_NEWINVOKESPECIAL) {
             throw new IllegalArgumentException("invalid handle tag "
                     + bsm.getTag());
         }
         for (int i = 0; i < bsmArgs.length; i++) {
             checkLDCConstant(bsmArgs[i]);

@@ -732,26 +785,23 @@
         super.visitIincInsn(var, increment);
         ++insnCount;
     }
 
     @Override
-    public void visitTableSwitchInsn(
-        final int min,
-        final int max,
-        final Label dflt,
-        final Label... labels)
-    {
+    public void visitTableSwitchInsn(final int min, final int max,
+            final Label dflt, final Label... labels) {
         checkStartCode();
         checkEndCode();
         if (max < min) {
             throw new IllegalArgumentException("Max = " + max
                     + " must be greater than or equal to min = " + min);
         }
         checkLabel(dflt, false, "default label");
         checkNonDebugLabel(dflt);
         if (labels == null || labels.length != max - min + 1) {
-            throw new IllegalArgumentException("There must be max - min + 1 labels");
+            throw new IllegalArgumentException(
+                    "There must be max - min + 1 labels");
         }
         for (int i = 0; i < labels.length; ++i) {
             checkLabel(labels[i], false, "label at index " + i);
             checkNonDebugLabel(labels[i]);
         }

@@ -761,21 +811,19 @@
         }
         ++insnCount;
     }
 
     @Override
-    public void visitLookupSwitchInsn(
-        final Label dflt,
-        final int[] keys,
-        final Label[] labels)
-    {
+    public void visitLookupSwitchInsn(final Label dflt, final int[] keys,
+            final Label[] labels) {
         checkEndCode();
         checkStartCode();
         checkLabel(dflt, false, "default label");
         checkNonDebugLabel(dflt);
         if (keys == null || labels == null || keys.length != labels.length) {
-            throw new IllegalArgumentException("There must be the same number of keys and labels");
+            throw new IllegalArgumentException(
+                    "There must be the same number of keys and labels");
         }
         for (int i = 0; i < labels.length; ++i) {
             checkLabel(labels[i], false, "label at index " + i);
             checkNonDebugLabel(labels[i]);
         }

@@ -791,44 +839,65 @@
     public void visitMultiANewArrayInsn(final String desc, final int dims) {
         checkStartCode();
         checkEndCode();
         checkDesc(desc, false);
         if (desc.charAt(0) != '[') {
-            throw new IllegalArgumentException("Invalid descriptor (must be an array type descriptor): "
+            throw new IllegalArgumentException(
+                    "Invalid descriptor (must be an array type descriptor): "
                     + desc);
         }
         if (dims < 1) {
-            throw new IllegalArgumentException("Invalid dimensions (must be greater than 0): "
-                    + dims);
+            throw new IllegalArgumentException(
+                    "Invalid dimensions (must be greater than 0): " + dims);
         }
         if (dims > desc.lastIndexOf('[') + 1) {
-            throw new IllegalArgumentException("Invalid dimensions (must not be greater than dims(desc)): "
+            throw new IllegalArgumentException(
+                    "Invalid dimensions (must not be greater than dims(desc)): "
                     + dims);
         }
         super.visitMultiANewArrayInsn(desc, dims);
         ++insnCount;
     }
 
     @Override
-    public void visitTryCatchBlock(
-        final Label start,
-        final Label end,
-        final Label handler,
-        final String type)
-    {
+    public AnnotationVisitor visitInsnAnnotation(final int typeRef,
+            final TypePath typePath, final String desc, final boolean visible) {
         checkStartCode();
         checkEndCode();
+        int sort = typeRef >>> 24;
+        if (sort != TypeReference.INSTANCEOF && sort != TypeReference.NEW
+                && sort != TypeReference.CONSTRUCTOR_REFERENCE
+                && sort != TypeReference.METHOD_REFERENCE
+                && sort != TypeReference.CAST
+                && sort != TypeReference.CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT
+                && sort != TypeReference.METHOD_INVOCATION_TYPE_ARGUMENT
+                && sort != TypeReference.CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT
+                && sort != TypeReference.METHOD_REFERENCE_TYPE_ARGUMENT) {
+            throw new IllegalArgumentException("Invalid type reference sort 0x"
+                    + Integer.toHexString(sort));
+        }
+        CheckClassAdapter.checkTypeRefAndPath(typeRef, typePath);
+        CheckMethodAdapter.checkDesc(desc, false);
+        return new CheckAnnotationAdapter(super.visitInsnAnnotation(typeRef,
+                typePath, desc, visible));
+    }
+
+    @Override
+    public void visitTryCatchBlock(final Label start, final Label end,
+            final Label handler, final String type) {
+        checkStartCode();
+        checkEndCode();
         checkLabel(start, false, "start label");
         checkLabel(end, false, "end label");
         checkLabel(handler, false, "handler label");
         checkNonDebugLabel(start);
         checkNonDebugLabel(end);
         checkNonDebugLabel(handler);
         if (labels.get(start) != null || labels.get(end) != null
-                || labels.get(handler) != null)
-        {
-            throw new IllegalStateException("Try catch blocks must be visited before their labels");
+                || labels.get(handler) != null) {
+            throw new IllegalStateException(
+                    "Try catch blocks must be visited before their labels");
         }
         if (type != null) {
             checkInternalName(type, "type");
         }
         super.visitTryCatchBlock(start, end, handler, type);

@@ -835,34 +904,80 @@
         handlers.add(start);
         handlers.add(end);
     }
 
     @Override
-    public void visitLocalVariable(
-        final String name,
-        final String desc,
-        final String signature,
-        final Label start,
-        final Label end,
-        final int index)
-    {
+    public AnnotationVisitor visitTryCatchAnnotation(final int typeRef,
+            final TypePath typePath, final String desc, final boolean visible) {
         checkStartCode();
         checkEndCode();
+        int sort = typeRef >>> 24;
+        if (sort != TypeReference.EXCEPTION_PARAMETER) {
+            throw new IllegalArgumentException("Invalid type reference sort 0x"
+                    + Integer.toHexString(sort));
+        }
+        CheckClassAdapter.checkTypeRefAndPath(typeRef, typePath);
+        CheckMethodAdapter.checkDesc(desc, false);
+        return new CheckAnnotationAdapter(super.visitTryCatchAnnotation(
+                typeRef, typePath, desc, visible));
+    }
+
+    @Override
+    public void visitLocalVariable(final String name, final String desc,
+            final String signature, final Label start, final Label end,
+            final int index) {
+        checkStartCode();
+        checkEndCode();
         checkUnqualifiedName(version, name, "name");
         checkDesc(desc, false);
         checkLabel(start, true, "start label");
         checkLabel(end, true, "end label");
         checkUnsignedShort(index, "Invalid variable index");
         int s = labels.get(start).intValue();
         int e = labels.get(end).intValue();
         if (e < s) {
-            throw new IllegalArgumentException("Invalid start and end labels (end must be greater than start)");
+            throw new IllegalArgumentException(
+                    "Invalid start and end labels (end must be greater than start)");
         }
         super.visitLocalVariable(name, desc, signature, start, end, index);
     }
 
     @Override
+    public AnnotationVisitor visitLocalVariableAnnotation(int typeRef,
+            TypePath typePath, Label[] start, Label[] end, int[] index,
+            String desc, boolean visible) {
+        checkStartCode();
+        checkEndCode();
+        int sort = typeRef >>> 24;
+        if (sort != TypeReference.LOCAL_VARIABLE
+                && sort != TypeReference.RESOURCE_VARIABLE) {
+            throw new IllegalArgumentException("Invalid type reference sort 0x"
+                    + Integer.toHexString(sort));
+        }
+        CheckClassAdapter.checkTypeRefAndPath(typeRef, typePath);
+        checkDesc(desc, false);
+        if (start == null || end == null || index == null
+                || end.length != start.length || index.length != start.length) {
+            throw new IllegalArgumentException(
+                    "Invalid start, end and index arrays (must be non null and of identical length");
+        }
+        for (int i = 0; i < start.length; ++i) {
+            checkLabel(start[i], true, "start label");
+            checkLabel(end[i], true, "end label");
+            checkUnsignedShort(index[i], "Invalid variable index");
+            int s = labels.get(start[i]).intValue();
+            int e = labels.get(end[i]).intValue();
+            if (e < s) {
+                throw new IllegalArgumentException(
+                        "Invalid start and end labels (end must be greater than start)");
+            }
+        }
+        return super.visitLocalVariableAnnotation(typeRef, typePath, start,
+                end, index, desc, visible);
+    }
+
+    @Override
     public void visitLineNumber(final int line, final Label start) {
         checkStartCode();
         checkEndCode();
         checkUnsignedShort(line, "Invalid line number");
         checkLabel(start, true, "start label");

@@ -877,18 +992,20 @@
         for (Label l : usedLabels) {
             if (labels.get(l) == null) {
                 throw new IllegalStateException("Undefined label used");
             }
         }
-        for (int i = 0; i < handlers.size(); ) {
+        for (int i = 0; i < handlers.size();) {
             Integer start = labels.get(handlers.get(i++));
             Integer end = labels.get(handlers.get(i++));
             if (start == null || end == null) {
-                throw new IllegalStateException("Undefined try catch block labels");
+                throw new IllegalStateException(
+                        "Undefined try catch block labels");
             }
             if (end.intValue() <= start.intValue()) {
-                throw new IllegalStateException("Emty try catch block handler range");
+                throw new IllegalStateException(
+                        "Emty try catch block handler range");
             }
         }
         checkUnsignedShort(maxStack, "Invalid max stack");
         checkUnsignedShort(maxLocals, "Invalid max locals");
         super.visitMaxs(maxStack, maxLocals);

@@ -906,43 +1023,46 @@
     /**
      * Checks that the visitCode method has been called.
      */
     void checkStartCode() {
         if (!startCode) {
-            throw new IllegalStateException("Cannot visit instructions before visitCode has been called.");
+            throw new IllegalStateException(
+                    "Cannot visit instructions before visitCode has been called.");
         }
     }
 
     /**
      * Checks that the visitMaxs method has not been called.
      */
     void checkEndCode() {
         if (endCode) {
-            throw new IllegalStateException("Cannot visit instructions after visitMaxs has been called.");
+            throw new IllegalStateException(
+                    "Cannot visit instructions after visitMaxs has been called.");
         }
     }
 
     /**
      * Checks that the visitEnd method has not been called.
      */
     void checkEndMethod() {
         if (endMethod) {
-            throw new IllegalStateException("Cannot visit elements after visitEnd has been called.");
+            throw new IllegalStateException(
+                    "Cannot visit elements after visitEnd has been called.");
         }
     }
 
     /**
      * Checks a stack frame value.
      *
-     * @param value the value to be checked.
+     * @param value
+     *            the value to be checked.
      */
     void checkFrameValue(final Object value) {
         if (value == Opcodes.TOP || value == Opcodes.INTEGER
                 || value == Opcodes.FLOAT || value == Opcodes.LONG
                 || value == Opcodes.DOUBLE || value == Opcodes.NULL
-                || value == Opcodes.UNINITIALIZED_THIS)
-        {
+                || value == Opcodes.UNINITIALIZED_THIS) {
             return;
         }
         if (value instanceof String) {
             checkInternalName((String) value, "Invalid stack frame value");
             return;

@@ -956,12 +1076,14 @@
     }
 
     /**
      * Checks that the type of the given opcode is equal to the given type.
      *
-     * @param opcode the opcode to be checked.
-     * @param type the expected opcode type.
+     * @param opcode
+     *            the opcode to be checked.
+     * @param type
+     *            the expected opcode type.
      */
     static void checkOpcode(final int opcode, final int type) {
         if (opcode < 0 || opcode > 199 || TYPE[opcode] != type) {
             throw new IllegalArgumentException("Invalid opcode: " + opcode);
         }

@@ -968,12 +1090,14 @@
     }
 
     /**
      * Checks that the given value is a signed byte.
      *
-     * @param value the value to be checked.
-     * @param msg an message to be used in case of error.
+     * @param value
+     *            the value to be checked.
+     * @param msg
+     *            an message to be used in case of error.
      */
     static void checkSignedByte(final int value, final String msg) {
         if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE) {
             throw new IllegalArgumentException(msg
                     + " (must be a signed byte): " + value);

@@ -981,12 +1105,14 @@
     }
 
     /**
      * Checks that the given value is a signed short.
      *
-     * @param value the value to be checked.
-     * @param msg an message to be used in case of error.
+     * @param value
+     *            the value to be checked.
+     * @param msg
+     *            an message to be used in case of error.
      */
     static void checkSignedShort(final int value, final String msg) {
         if (value < Short.MIN_VALUE || value > Short.MAX_VALUE) {
             throw new IllegalArgumentException(msg
                     + " (must be a signed short): " + value);

@@ -994,12 +1120,14 @@
     }
 
     /**
      * Checks that the given value is an unsigned short.
      *
-     * @param value the value to be checked.
-     * @param msg an message to be used in case of error.
+     * @param value
+     *            the value to be checked.
+     * @param msg
+     *            an message to be used in case of error.
      */
     static void checkUnsignedShort(final int value, final String msg) {
         if (value < 0 || value > 65535) {
             throw new IllegalArgumentException(msg
                     + " (must be an unsigned short): " + value);

@@ -1008,17 +1136,17 @@
 
     /**
      * Checks that the given value is an {@link Integer}, a{@link Float}, a
      * {@link Long}, a {@link Double} or a {@link String}.
      *
-     * @param cst the value to be checked.
+     * @param cst
+     *            the value to be checked.
      */
     static void checkConstant(final Object cst) {
         if (!(cst instanceof Integer) && !(cst instanceof Float)
                 && !(cst instanceof Long) && !(cst instanceof Double)
-                && !(cst instanceof String))
-        {
+                && !(cst instanceof String)) {
             throw new IllegalArgumentException("Invalid constant: " + cst);
         }
     }
 
     void checkLDCConstant(final Object cst) {

@@ -1026,41 +1154,43 @@
             int s = ((Type) cst).getSort();
             if (s != Type.OBJECT && s != Type.ARRAY && s != Type.METHOD) {
                 throw new IllegalArgumentException("Illegal LDC constant value");
             }
             if (s != Type.METHOD && (version & 0xFFFF) < Opcodes.V1_5) {
-                throw new IllegalArgumentException("ldc of a constant class requires at least version 1.5");
+                throw new IllegalArgumentException(
+                        "ldc of a constant class requires at least version 1.5");
             }
             if (s == Type.METHOD && (version & 0xFFFF) < Opcodes.V1_7) {
-                throw new IllegalArgumentException("ldc of a method type requires at least version 1.7");
+                throw new IllegalArgumentException(
+                        "ldc of a method type requires at least version 1.7");
             }
         } else if (cst instanceof Handle) {
             if ((version & 0xFFFF) < Opcodes.V1_7) {
-                throw new IllegalArgumentException("ldc of a handle requires at least version 1.7");
+                throw new IllegalArgumentException(
+                        "ldc of a handle requires at least version 1.7");
             }
             int tag = ((Handle) cst).getTag();
             if (tag < Opcodes.H_GETFIELD || tag > Opcodes.H_INVOKEINTERFACE) {
-                throw new IllegalArgumentException("invalid handle tag "
-                        + tag);
+                throw new IllegalArgumentException("invalid handle tag " + tag);
             }
         } else {
             checkConstant(cst);
         }
     }
 
     /**
      * Checks that the given string is a valid unqualified name.
      *
-     * @param version the class version.
-     * @param name the string to be checked.
-     * @param msg a message to be used in case of error.
+     * @param version
+     *            the class version.
+     * @param name
+     *            the string to be checked.
+     * @param msg
+     *            a message to be used in case of error.
      */
-    static void checkUnqualifiedName(
-        int version,
-        final String name,
-        final String msg)
-    {
+    static void checkUnqualifiedName(int version, final String name,
+            final String msg) {
         if ((version & 0xFFFF) < Opcodes.V1_5) {
             checkIdentifier(name, msg);
         } else {
             for (int i = 0; i < name.length(); ++i) {
                 if (".;[/".indexOf(name.charAt(i)) != -1) {

@@ -1072,35 +1202,36 @@
     }
 
     /**
      * Checks that the given string is a valid Java identifier.
      *
-     * @param name the string to be checked.
-     * @param msg a message to be used in case of error.
+     * @param name
+     *            the string to be checked.
+     * @param msg
+     *            a message to be used in case of error.
      */
     static void checkIdentifier(final String name, final String msg) {
         checkIdentifier(name, 0, -1, msg);
     }
 
     /**
      * Checks that the given substring is a valid Java identifier.
      *
-     * @param name the string to be checked.
-     * @param start index of the first character of the identifier (inclusive).
-     * @param end index of the last character of the identifier (exclusive). -1
+     * @param name
+     *            the string to be checked.
+     * @param start
+     *            index of the first character of the identifier (inclusive).
+     * @param end
+     *            index of the last character of the identifier (exclusive). -1
      *        is equivalent to <tt>name.length()</tt> if name is not
      *        <tt>null</tt>.
-     * @param msg a message to be used in case of error.
+     * @param msg
+     *            a message to be used in case of error.
      */
-    static void checkIdentifier(
-        final String name,
-        final int start,
-        final int end,
-        final String msg)
-    {
-        if (name == null || (end == -1 ? name.length() <= start : end <= start))
-        {
+    static void checkIdentifier(final String name, final int start,
+            final int end, final String msg) {
+        if (name == null || (end == -1 ? name.length() <= start : end <= start)) {
             throw new IllegalArgumentException("Invalid " + msg
                     + " (must not be null or empty)");
         }
         if (!Character.isJavaIdentifierStart(name.charAt(start))) {
             throw new IllegalArgumentException("Invalid " + msg

@@ -1114,29 +1245,25 @@
             }
         }
     }
 
     /**
-     * Checks that the given string is a valid Java identifier or is equal to
-     * '&lt;init&gt;' or '&lt;clinit&gt;'.
+     * Checks that the given string is a valid Java identifier.
      *
-     * @param version the class version.
-     * @param name the string to be checked.
-     * @param msg a message to be used in case of error.
+     * @param version
+     *            the class version.
+     * @param name
+     *            the string to be checked.
+     * @param msg
+     *            a message to be used in case of error.
      */
-    static void checkMethodIdentifier(
-        int version,
-        final String name,
-        final String msg)
-    {
+    static void checkMethodIdentifier(int version, final String name,
+            final String msg) {
         if (name == null || name.length() == 0) {
             throw new IllegalArgumentException("Invalid " + msg
                     + " (must not be null or empty)");
         }
-        if ("<init>".equals(name) || "<clinit>".equals(name)) {
-            return;
-        }
         if ((version & 0xFFFF) >= Opcodes.V1_5) {
             for (int i = 0; i < name.length(); ++i) {
                 if (".;[/<>".indexOf(name.charAt(i)) != -1) {
                     throw new IllegalArgumentException("Invalid " + msg
                             + " (must be a valid unqualified name): " + name);

@@ -1143,18 +1270,20 @@
                 }
             }
             return;
         }
         if (!Character.isJavaIdentifierStart(name.charAt(0))) {
-            throw new IllegalArgumentException("Invalid "
+            throw new IllegalArgumentException(
+                    "Invalid "
                     + msg
                     + " (must be a '<init>', '<clinit>' or a valid Java identifier): "
                     + name);
         }
         for (int i = 1; i < name.length(); ++i) {
             if (!Character.isJavaIdentifierPart(name.charAt(i))) {
-                throw new IllegalArgumentException("Invalid "
+                throw new IllegalArgumentException(
+                        "Invalid "
                         + msg
                         + " (must be '<init>' or '<clinit>' or a valid Java identifier): "
                         + name);
             }
         }

@@ -1161,12 +1290,14 @@
     }
 
     /**
      * Checks that the given string is a valid internal class name.
      *
-     * @param name the string to be checked.
-     * @param msg a message to be used in case of error.
+     * @param name
+     *            the string to be checked.
+     * @param msg
+     *            a message to be used in case of error.
      */
     static void checkInternalName(final String name, final String msg) {
         if (name == null || name.length() == 0) {
             throw new IllegalArgumentException("Invalid " + msg
                     + " (must not be null or empty)");

@@ -1179,23 +1310,23 @@
     }
 
     /**
      * Checks that the given substring is a valid internal class name.
      *
-     * @param name the string to be checked.
-     * @param start index of the first character of the identifier (inclusive).
-     * @param end index of the last character of the identifier (exclusive). -1
+     * @param name
+     *            the string to be checked.
+     * @param start
+     *            index of the first character of the identifier (inclusive).
+     * @param end
+     *            index of the last character of the identifier (exclusive). -1
      *        is equivalent to <tt>name.length()</tt> if name is not
      *        <tt>null</tt>.
-     * @param msg a message to be used in case of error.
+     * @param msg
+     *            a message to be used in case of error.
      */
-    static void checkInternalName(
-        final String name,
-        final int start,
-        final int end,
-        final String msg)
-    {
+    static void checkInternalName(final String name, final int start,
+            final int end, final String msg) {
         int max = end == -1 ? name.length() : end;
         try {
             int begin = start;
             int slash;
             do {

@@ -1204,23 +1335,26 @@
                     slash = max;
                 }
                 checkIdentifier(name, begin, slash, null);
                 begin = slash + 1;
             } while (slash != max);
-        } catch (IllegalArgumentException _) {
-            throw new IllegalArgumentException("Invalid "
+        } catch (IllegalArgumentException unused) {
+            throw new IllegalArgumentException(
+                    "Invalid "
                     + msg
                     + " (must be a fully qualified class name in internal form): "
                     + name);
         }
     }
 
     /**
      * Checks that the given string is a valid type descriptor.
      *
-     * @param desc the string to be checked.
-     * @param canBeVoid <tt>true</tt> if <tt>V</tt> can be considered valid.
+     * @param desc
+     *            the string to be checked.
+     * @param canBeVoid
+     *            <tt>true</tt> if <tt>V</tt> can be considered valid.
      */
     static void checkDesc(final String desc, final boolean canBeVoid) {
         int end = checkDesc(desc, 0, canBeVoid);
         if (end != desc.length()) {
             throw new IllegalArgumentException("Invalid descriptor: " + desc);

@@ -1228,22 +1362,23 @@
     }
 
     /**
      * Checks that a the given substring is a valid type descriptor.
      *
-     * @param desc the string to be checked.
-     * @param start index of the first character of the identifier (inclusive).
-     * @param canBeVoid <tt>true</tt> if <tt>V</tt> can be considered valid.
+     * @param desc
+     *            the string to be checked.
+     * @param start
+     *            index of the first character of the identifier (inclusive).
+     * @param canBeVoid
+     *            <tt>true</tt> if <tt>V</tt> can be considered valid.
      * @return the index of the last character of the type decriptor, plus one.
      */
-    static int checkDesc(
-        final String desc,
-        final int start,
-        final boolean canBeVoid)
-    {
+    static int checkDesc(final String desc, final int start,
+            final boolean canBeVoid) {
         if (desc == null || start >= desc.length()) {
-            throw new IllegalArgumentException("Invalid type descriptor (must not be null or empty)");
+            throw new IllegalArgumentException(
+                    "Invalid type descriptor (must not be null or empty)");
         }
         int index;
         switch (desc.charAt(start)) {
             case 'V':
                 if (canBeVoid) {

@@ -1278,29 +1413,30 @@
                     throw new IllegalArgumentException("Invalid descriptor: "
                             + desc);
                 }
                 try {
                     checkInternalName(desc, start + 1, index, null);
-                } catch (IllegalArgumentException _) {
+            } catch (IllegalArgumentException unused) {
                     throw new IllegalArgumentException("Invalid descriptor: "
                             + desc);
                 }
                 return index + 1;
             default:
-                throw new IllegalArgumentException("Invalid descriptor: "
-                        + desc);
+            throw new IllegalArgumentException("Invalid descriptor: " + desc);
         }
     }
 
     /**
      * Checks that the given string is a valid method descriptor.
      *
-     * @param desc the string to be checked.
+     * @param desc
+     *            the string to be checked.
      */
     static void checkMethodDesc(final String desc) {
         if (desc == null || desc.length() == 0) {
-            throw new IllegalArgumentException("Invalid method descriptor (must not be null or empty)");
+            throw new IllegalArgumentException(
+                    "Invalid method descriptor (must not be null or empty)");
         }
         if (desc.charAt(0) != '(' || desc.length() < 3) {
             throw new IllegalArgumentException("Invalid descriptor: " + desc);
         }
         int start = 1;

@@ -1318,326 +1454,22 @@
             throw new IllegalArgumentException("Invalid descriptor: " + desc);
         }
     }
 
     /**
-     * Checks a class signature.
-     *
-     * @param signature a string containing the signature that must be checked.
-     */
-    static void checkClassSignature(final String signature) {
-        // ClassSignature:
-        // FormalTypeParameters? ClassTypeSignature ClassTypeSignature*
-
-        int pos = 0;
-        if (getChar(signature, 0) == '<') {
-            pos = checkFormalTypeParameters(signature, pos);
-        }
-        pos = checkClassTypeSignature(signature, pos);
-        while (getChar(signature, pos) == 'L') {
-            pos = checkClassTypeSignature(signature, pos);
-        }
-        if (pos != signature.length()) {
-            throw new IllegalArgumentException(signature + ": error at index "
-                    + pos);
-        }
-    }
-
-    /**
-     * Checks a method signature.
-     *
-     * @param signature a string containing the signature that must be checked.
-     */
-    static void checkMethodSignature(final String signature) {
-        // MethodTypeSignature:
-        // FormalTypeParameters? ( TypeSignature* ) ( TypeSignature | V ) (
-        // ^ClassTypeSignature | ^TypeVariableSignature )*
-
-        int pos = 0;
-        if (getChar(signature, 0) == '<') {
-            pos = checkFormalTypeParameters(signature, pos);
-        }
-        pos = checkChar('(', signature, pos);
-        while ("ZCBSIFJDL[T".indexOf(getChar(signature, pos)) != -1) {
-            pos = checkTypeSignature(signature, pos);
-        }
-        pos = checkChar(')', signature, pos);
-        if (getChar(signature, pos) == 'V') {
-            ++pos;
-        } else {
-            pos = checkTypeSignature(signature, pos);
-        }
-        while (getChar(signature, pos) == '^') {
-            ++pos;
-            if (getChar(signature, pos) == 'L') {
-                pos = checkClassTypeSignature(signature, pos);
-            } else {
-                pos = checkTypeVariableSignature(signature, pos);
-            }
-        }
-        if (pos != signature.length()) {
-            throw new IllegalArgumentException(signature + ": error at index "
-                    + pos);
-        }
-    }
-
-    /**
-     * Checks a field signature.
-     *
-     * @param signature a string containing the signature that must be checked.
-     */
-    static void checkFieldSignature(final String signature) {
-        int pos = checkFieldTypeSignature(signature, 0);
-        if (pos != signature.length()) {
-            throw new IllegalArgumentException(signature + ": error at index "
-                    + pos);
-        }
-    }
-
-    /**
-     * Checks the formal type parameters of a class or method signature.
-     *
-     * @param signature a string containing the signature that must be checked.
-     * @param pos index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkFormalTypeParameters(final String signature, int pos)
-    {
-        // FormalTypeParameters:
-        // < FormalTypeParameter+ >
-
-        pos = checkChar('<', signature, pos);
-        pos = checkFormalTypeParameter(signature, pos);
-        while (getChar(signature, pos) != '>') {
-            pos = checkFormalTypeParameter(signature, pos);
-        }
-        return pos + 1;
-    }
-
-    /**
-     * Checks a formal type parameter of a class or method signature.
-     *
-     * @param signature a string containing the signature that must be checked.
-     * @param pos index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkFormalTypeParameter(final String signature, int pos)
-    {
-        // FormalTypeParameter:
-        // Identifier : FieldTypeSignature? (: FieldTypeSignature)*
-
-        pos = checkIdentifier(signature, pos);
-        pos = checkChar(':', signature, pos);
-        if ("L[T".indexOf(getChar(signature, pos)) != -1) {
-            pos = checkFieldTypeSignature(signature, pos);
-        }
-        while (getChar(signature, pos) == ':') {
-            pos = checkFieldTypeSignature(signature, pos + 1);
-        }
-        return pos;
-    }
-
-    /**
-     * Checks a field type signature.
-     *
-     * @param signature a string containing the signature that must be checked.
-     * @param pos index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkFieldTypeSignature(final String signature, int pos)
-    {
-        // FieldTypeSignature:
-        // ClassTypeSignature | ArrayTypeSignature | TypeVariableSignature
-        //
-        // ArrayTypeSignature:
-        // [ TypeSignature
-
-        switch (getChar(signature, pos)) {
-            case 'L':
-                return checkClassTypeSignature(signature, pos);
-            case '[':
-                return checkTypeSignature(signature, pos + 1);
-            default:
-                return checkTypeVariableSignature(signature, pos);
-        }
-    }
-
-    /**
-     * Checks a class type signature.
-     *
-     * @param signature a string containing the signature that must be checked.
-     * @param pos index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkClassTypeSignature(final String signature, int pos)
-    {
-        // ClassTypeSignature:
-        // L Identifier ( / Identifier )* TypeArguments? ( . Identifier
-        // TypeArguments? )* ;
-
-        pos = checkChar('L', signature, pos);
-        pos = checkIdentifier(signature, pos);
-        while (getChar(signature, pos) == '/') {
-            pos = checkIdentifier(signature, pos + 1);
-        }
-        if (getChar(signature, pos) == '<') {
-            pos = checkTypeArguments(signature, pos);
-        }
-        while (getChar(signature, pos) == '.') {
-            pos = checkIdentifier(signature, pos + 1);
-            if (getChar(signature, pos) == '<') {
-                pos = checkTypeArguments(signature, pos);
-            }
-        }
-        return checkChar(';', signature, pos);
-    }
-
-    /**
-     * Checks the type arguments in a class type signature.
-     *
-     * @param signature a string containing the signature that must be checked.
-     * @param pos index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkTypeArguments(final String signature, int pos) {
-        // TypeArguments:
-        // < TypeArgument+ >
-
-        pos = checkChar('<', signature, pos);
-        pos = checkTypeArgument(signature, pos);
-        while (getChar(signature, pos) != '>') {
-            pos = checkTypeArgument(signature, pos);
-        }
-        return pos + 1;
-    }
-
-    /**
-     * Checks a type argument in a class type signature.
-     *
-     * @param signature a string containing the signature that must be checked.
-     * @param pos index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkTypeArgument(final String signature, int pos) {
-        // TypeArgument:
-        // * | ( ( + | - )? FieldTypeSignature )
-
-        char c = getChar(signature, pos);
-        if (c == '*') {
-            return pos + 1;
-        } else if (c == '+' || c == '-') {
-            pos++;
-        }
-        return checkFieldTypeSignature(signature, pos);
-    }
-
-    /**
-     * Checks a type variable signature.
-     *
-     * @param signature a string containing the signature that must be checked.
-     * @param pos index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkTypeVariableSignature(
-        final String signature,
-        int pos)
-    {
-        // TypeVariableSignature:
-        // T Identifier ;
-
-        pos = checkChar('T', signature, pos);
-        pos = checkIdentifier(signature, pos);
-        return checkChar(';', signature, pos);
-    }
-
-    /**
-     * Checks a type signature.
-     *
-     * @param signature a string containing the signature that must be checked.
-     * @param pos index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkTypeSignature(final String signature, int pos) {
-        // TypeSignature:
-        // Z | C | B | S | I | F | J | D | FieldTypeSignature
-
-        switch (getChar(signature, pos)) {
-            case 'Z':
-            case 'C':
-            case 'B':
-            case 'S':
-            case 'I':
-            case 'F':
-            case 'J':
-            case 'D':
-                return pos + 1;
-            default:
-                return checkFieldTypeSignature(signature, pos);
-        }
-    }
-
-    /**
-     * Checks an identifier.
-     *
-     * @param signature a string containing the signature that must be checked.
-     * @param pos index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkIdentifier(final String signature, int pos) {
-        if (!Character.isJavaIdentifierStart(getChar(signature, pos))) {
-            throw new IllegalArgumentException(signature
-                    + ": identifier expected at index " + pos);
-        }
-        ++pos;
-        while (Character.isJavaIdentifierPart(getChar(signature, pos))) {
-            ++pos;
-        }
-        return pos;
-    }
-
-    /**
-     * Checks a single character.
-     *
-     * @param signature a string containing the signature that must be checked.
-     * @param pos index of first character to be checked.
-     * @return the index of the first character after the checked part.
-     */
-    private static int checkChar(final char c, final String signature, int pos)
-    {
-        if (getChar(signature, pos) == c) {
-            return pos + 1;
-        }
-        throw new IllegalArgumentException(signature + ": '" + c
-                + "' expected at index " + pos);
-    }
-
-    /**
-     * Returns the signature car at the given index.
-     *
-     * @param signature a signature.
-     * @param pos an index in signature.
-     * @return the character at the given index, or 0 if there is no such
-     *         character.
-     */
-    private static char getChar(final String signature, int pos) {
-        return pos < signature.length() ? signature.charAt(pos) : (char) 0;
-    }
-
-    /**
      * Checks that the given label is not null. This method can also check that
      * the label has been visited.
      *
-     * @param label the label to be checked.
-     * @param checkVisited <tt>true</tt> to check that the label has been
-     *        visited.
-     * @param msg a message to be used in case of error.
+     * @param label
+     *            the label to be checked.
+     * @param checkVisited
+     *            <tt>true</tt> to check that the label has been visited.
+     * @param msg
+     *            a message to be used in case of error.
      */
-    void checkLabel(
-        final Label label,
-        final boolean checkVisited,
-        final String msg)
-    {
+    void checkLabel(final Label label, final boolean checkVisited,
+            final String msg) {
         if (label == null) {
             throw new IllegalArgumentException("Invalid " + msg
                     + " (must not be null)");
         }
         if (checkVisited && labels.get(label) == null) {

@@ -1647,11 +1479,12 @@
     }
 
     /**
      * Checks that the given label is not a label used only for debug purposes.
      *
-     * @param label the label to be checked.
+     * @param label
+     *            the label to be checked.
      */
     private static void checkNonDebugLabel(final Label label) {
         Field f = getLabelStatusField();
         int status = 0;
         try {

@@ -1658,11 +1491,12 @@
             status = f == null ? 0 : ((Integer) f.get(label)).intValue();
         } catch (IllegalAccessException e) {
             throw new Error("Internal error");
         }
         if ((status & 0x01) != 0) {
-            throw new IllegalArgumentException("Labels used for debug info cannot be reused for control flow");
+            throw new IllegalArgumentException(
+                    "Labels used for debug info cannot be reused for control flow");
         }
     }
 
     /**
      * Returns the Field object corresponding to the Label.status field.

@@ -1680,11 +1514,12 @@
     }
 
     /**
      * Returns the field of the Label class whose name is given.
      *
-     * @param name a field name.
+     * @param name
+     *            a field name.
      * @return the field of the Label class whose name is given, or null.
      */
     private static Field getLabelField(final String name) {
         try {
             Field f = Label.class.getDeclaredField(name);