示例#1
0
 @Override
 public void visitMaxs(final int maxStack, final int maxLocals) {
     checkStartCode();
     checkEndCode();
     endCode = true;
     for (Label l : usedLabels) {
         if (labels.get(l) == null) {
             throw new IllegalStateException("Undefined label used");
         }
     }
     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");
         }
         if (end.intValue() <= start.intValue()) {
             throw new IllegalStateException(
                     "Emty try catch block handler range");
         }
     }
     checkUnsignedShort(maxStack, "Invalid max stack");
     checkUnsignedShort(maxLocals, "Invalid max locals");
     super.visitMaxs(maxStack, maxLocals);
 }
示例#2
0
 @Override
 public void visitLineNumber(final int line, final Label start) {
     checkStartCode();
     checkEndCode();
     checkUnsignedShort(line, "Invalid line number");
     checkLabel(start, true, "start label");
     super.visitLineNumber(line, start);
 }
示例#3
0
 @Override
 public void visitIincInsn(final int var, final int increment) {
     checkStartCode();
     checkEndCode();
     checkUnsignedShort(var, "Invalid variable index");
     checkSignedShort(increment, "Invalid increment");
     super.visitIincInsn(var, increment);
     ++insnCount;
 }
示例#4
0
 @Override
 public void visitVarInsn(final int opcode, final int var) {
     checkStartCode();
     checkEndCode();
     checkOpcode(opcode, 2);
     checkUnsignedShort(var, "Invalid variable index");
     super.visitVarInsn(opcode, var);
     ++insnCount;
 }
示例#5
0
 @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)");
     }
     super.visitLocalVariable(name, desc, signature, start, end, index);
 }