code: private static void handleEqualityComparison(
        boolean equalTo,
        Node leftNode,
        Node rightNode,
        SubNodeValues inputs,
        Updates thenUpdates,
        Updates elseUpdates) {
      Nullness leftVal = inputs.valueOfSubNode(leftNode);
      Nullness rightVal = inputs.valueOfSubNode(rightNode);
      Nullness equalBranchValue = leftVal.greatestLowerBound(rightVal);
      Updates equalBranchUpdates = equalTo ? thenUpdates : elseUpdates;
      Updates notEqualBranchUpdates = equalTo ? elseUpdates : thenUpdates;
      AccessPath leftOperand = AccessPath.fromNodeIfTrackable(leftNode);
      AccessPath rightOperand = AccessPath.fromNodeIfTrackable(rightNode);
  
      if (leftOperand != null) {
        equalBranchUpdates.set(leftOperand, equalBranchValue);
        notEqualBranchUpdates.set(
            leftOperand, leftVal.greatestLowerBound(rightVal.deducedValueWhenNotEqual()));
      }
  
      if (rightOperand != null) {
        equalBranchUpdates.set(rightOperand, equalBranchValue);
        notEqualBranchUpdates.set(
            rightOperand, rightVal.greatestLowerBound(leftVal.deducedValueWhenNotEqual()));
      }
    }
docs: Refines the {@code Nullness} of {@code LocalVariableNode}s used in an equality comparison using
  the greatest lower bound.
  
  @param equalTo whether the comparison is == (false for !=)
  @param leftNode the left-hand side of the comparison
  @param rightNode the right-hand side of the comparison
  @param inputs access to nullness values of the left and right nodes
  @param thenUpdates the local variables whose nullness values should be updated if the
  comparison returns {@code true}
  @param elseUpdates the local variables whose nullness values should be updated if the
  comparison returns {@code false}