code: public CondItem genCond(JCTree _tree, boolean markBranches) {
          JCTree inner_tree = TreeInfo.skipParens(_tree);
          if (inner_tree.hasTag(CONDEXPR)) {
              JCConditional tree = (JCConditional)inner_tree;
              CondItem cond = genCond(tree.cond, CRT_FLOW_CONTROLLER);
              if (cond.isTrue()) {
                  code.resolve(cond.trueJumps);
                  CondItem result = genCond(tree.truepart, CRT_FLOW_TARGET);
                  if (markBranches) result.tree = tree.truepart;
                  return result;
              }
              if (cond.isFalse()) {
                  code.resolve(cond.falseJumps);
                  CondItem result = genCond(tree.falsepart, CRT_FLOW_TARGET);
                  if (markBranches) result.tree = tree.falsepart;
                  return result;
              }
              Chain secondJumps = cond.jumpFalse();
              code.resolve(cond.trueJumps);
              CondItem first = genCond(tree.truepart, CRT_FLOW_TARGET);
              if (markBranches) first.tree = tree.truepart;
              Chain falseJumps = first.jumpFalse();
              code.resolve(first.trueJumps);
              Chain trueJumps = code.branch(goto_);
              code.resolve(secondJumps);
              CondItem second = genCond(tree.falsepart, CRT_FLOW_TARGET);
              CondItem result = items.makeCondItem(second.opcode,
                                        Code.mergeChains(trueJumps, second.trueJumps),
                                        Code.mergeChains(falseJumps, second.falseJumps));
              if (markBranches) result.tree = tree.falsepart;
              return result;
          } else {
              CondItem result = genExpr(_tree, syms.booleanType).mkCond();
              if (markBranches) result.tree = _tree;
              return result;
          }
      }
docs: Derived visitor method: generate code for a boolean
  expression in a control-flow context.
  @param _tree         The expression to be visited.
  @param markBranches The flag to indicate that the condition is
  a flow controller so produced conditions
  should contain a proper tree to generate
  CharacterRangeTable branches for them.