docs: private GoogMsgCodeGenInfo genGoogGetMsgCallHelper(String googMsgVarName, MsgNode msgNode) {
  
      // Build the code for the message content.
      // TODO: We could build the msg parts once and save it as a field on the MsgNode or save it some
      // other way, but it would increase memory usage a little bit. It's probably not a big deal,
      // since it's not per-locale, but I'm not going to do this right now since we're trying to
      // decrease memory usage right now. The same memoization possibility also applies to the msg
      // parts with embedded ICU syntax (created in helper buildGoogMsgContentStr()).
      ImmutableList<SoyMsgPart> msgParts = MsgUtils.buildMsgParts(msgNode);
      Expression googMsgContent =
          stringLiteral(buildGoogMsgContentStr(msgParts, msgNode.isPlrselMsg()));
  
      // Build the individual code bits for each placeholder (i.e. "<placeholderName>: <exprCode>")
      // and each plural/select (i.e. "<varName>: <exprCode>").
      GoogMsgPlaceholderCodeGenInfo placeholderInfo =
          new GoogMsgPlaceholderCodeGenInfo(msgNode.isPlrselMsg());
      genGoogMsgCodeForChildren(msgParts, msgNode, placeholderInfo);
      // Generate JS comment (JSDoc) block for the goog.getMsg() call.
      JsDoc.Builder jsDocBuilder = JsDoc.builder();
      if (msgNode.getMeaning() != null) {
        jsDocBuilder.addAnnotation("meaning", msgNode.getMeaning());
      }
      jsDocBuilder.addAnnotation("desc", msgNode.getDesc());
      if (msgNode.isHidden()) {
        jsDocBuilder.addAnnotation("hidden");
      }
  
      // Generate goog.getMsg() call.
      VariableDeclaration.Builder builder =
          VariableDeclaration.builder(googMsgVarName).setJsDoc(jsDocBuilder.build());
      if (msgNode.isPlrselMsg() || placeholderInfo.placeholders.isEmpty()) {
        // For plural/select msgs, we're letting goog.i18n.MessageFormat handle all placeholder
        // replacements, even ones that have nothing to do with plural/select. Therefore, this case
        // is the same as having no placeholder replacements.
        builder.setRhs(GOOG_GET_MSG.call(googMsgContent));
        return new GoogMsgCodeGenInfo(
            builder.build().ref(),
            googMsgVarName,
            msgNode.isPlrselMsg()
                ? placeholderInfo.pluralsAndSelects.putAll(placeholderInfo.placeholders).build()
                : null);
      } else {
        // If there are placeholders, pass them as an arg to goog.getMsg.
        builder.setRhs(GOOG_GET_MSG.call(googMsgContent, placeholderInfo.placeholders.build()));
        return new GoogMsgCodeGenInfo(builder.build().ref(), googMsgVarName, null);
      }
    }