code: private void validateMsgJsDoc(Node n,
        JSDocInfo info) {
      if (info == null) {
        return;
      }
  
      if (info.getDescription() != null || info.isHidden() || info.getMeaning() != null) {
        boolean descOkay = false;
        switch (n.getToken()) {
          case ASSIGN:
          case VAR:
          case LET:
          case CONST:
            descOkay = isValidMsgName(n.getFirstChild());
            break;
          case STRING_KEY:
            descOkay = isValidMsgName(n);
            break;
          case GETPROP:
            if (n.isFromExterns() && n.isQualifiedName()) {
              descOkay = isValidMsgName(n);
            }
            break;
          default:
            break;
        }
        if (!descOkay) {
          report(n, MISPLACED_MSG_ANNOTATION);
        }
      }
    }
docs: Checks that annotations for messages ({@code @desc}, {@code @hidden},
  and {@code @meaning})
  are in the proper place, namely on names starting with MSG_ which
  indicates they should be
  extracted for translation. A later pass checks that the right side is
  a call to goog.getMsg.