code: private static void extractFromReturnDescendant(Builder builder, Node node)
        throws MalformedException {
  
      switch (node.getToken()) {
        case STRING:
          builder.appendStringPart(node.getString());
          break;
        case NAME:
          builder.appendPlaceholderReference(node.getString());
          break;
        case ADD:
          for (Node child : node.children()) {
            extractFromReturnDescendant(builder, child);
          }
          break;
        default:
          throw new MalformedException(
              "STRING, NAME, or ADD node expected; found: " + node.getToken(), node);
      }
    }
docs: Appends value parts to the message builder by traversing the descendants
  of the given RETURN node.
  
  @param builder the message builder
  @param node the node from where we extract a message
  @throws MalformedException if the parsed message is invalid