handlers.set(handlerIdx); for (AbstractInsnNode p = tcb.start.getNext(); p != tcb.end; p = p.getNext()) {
@Override public void transform() { AtomicInteger count = new AtomicInteger(); long current = System.currentTimeMillis(); getClassWrappers().parallelStream().filter(classWrapper -> !excluded(classWrapper)).forEach(classWrapper -> classWrapper.methods.parallelStream().filter(methodWrapper -> !excluded(methodWrapper) && hasInstructions(methodWrapper.methodNode)).forEach(methodWrapper -> { MethodNode methodNode = methodWrapper.methodNode; for (AbstractInsnNode insn : methodNode.instructions.toArray()) { if (insn.getOpcode() == GOTO) { JumpInsnNode gotoJump = (JumpInsnNode) insn; AbstractInsnNode insnAfterTarget = gotoJump.label.getNext(); if (insnAfterTarget != null && insnAfterTarget.getOpcode() == GOTO) { JumpInsnNode secGoto = (JumpInsnNode) insnAfterTarget; gotoJump.label = secGoto.label; count.incrementAndGet(); } } } })); LoggerUtils.stdOut(String.format("Normalized %d GOTO->GOTO sequences. [%dms]", count.get(), tookThisLong(current))); }
@Override public void transform() { AtomicInteger count = new AtomicInteger(); long current = System.currentTimeMillis(); getClassWrappers().parallelStream().filter(classWrapper -> !excluded(classWrapper)).forEach(classWrapper -> classWrapper.methods.parallelStream().filter(methodWrapper -> !excluded(methodWrapper) && hasInstructions(methodWrapper.methodNode)).forEach(methodWrapper -> { MethodNode methodNode = methodWrapper.methodNode; for (AbstractInsnNode insn : methodNode.instructions.toArray()) { if (insn.getOpcode() == GOTO) { JumpInsnNode gotoJump = (JumpInsnNode) insn; AbstractInsnNode insnAfterTarget = gotoJump.label.getNext(); if (insnAfterTarget != null && BytecodeUtils.isReturn(insnAfterTarget.getOpcode())) { methodNode.instructions.set(insn, new InsnNode(insnAfterTarget.getOpcode())); count.incrementAndGet(); } } } })); LoggerUtils.stdOut(String.format("Normalized %d GOTO->RETURN sequences. [%dms]", count.get(), tookThisLong(current))); }