private void proceedBranch(Frame<BasicValue> startFrame, int startIndex, boolean branchValue)
    throws NegationAnalysisFailedException, AnalyzerException {

    Frame<BasicValue> frame = new Frame<>(startFrame);
    int insnIndex = startIndex;

    while (true) {
      AbstractInsnNode insnNode = methodNode.instructions.get(insnIndex);
      switch (insnNode.getType()) {
        case AbstractInsnNode.LABEL, AbstractInsnNode.LINE, AbstractInsnNode.FRAME -> insnIndex = controlFlow.transitions[insnIndex][0];
        default -> {
          if (insnNode.getOpcode() == IRETURN) {
            BasicValue returnValue = frame.pop();
            if (branchValue) {
              trueBranchValue = returnValue;
            }
            else {
              falseBranchValue = returnValue;
            }
            return;
          }
          else {
            checkAssertion(controlFlow.transitions[insnIndex].length == 1);
            frame.execute(insnNode, interpreter);
            insnIndex = controlFlow.transitions[insnIndex][0];
          }
        }
      }
    }
  }
private void proceedBranch(Frame<BasicValue> startFrame, int startIndex, boolean branchValue)