docs: @Override
      int guessApproxLength() {
          int total = super.guessApproxLength();
          int size = 0;
          List props;
  
          // Assume 40 bytes per property (string name + value)
          // Each property map may be cached in a transient, or in the base JMF (or both!)
          // If there are no properties, the names may be represented by the EMPTY
          // JMF List, in which case we do NOT want to actually get them.
          // The property will only be flattened 'once' so only count it once.
          if (jmsUserPropertyMap != null) {
              size += jmsUserPropertyMap.size();
          }
          else {
              if (getApi().isNotEMPTYlist(JsApiAccess.JMSPROPERTY_NAME)) {
                  props = (List) getApi().getField(JsApiAccess.JMSPROPERTY_NAME);
                  if (props != null) {
                      size += props.size();
                  }
              }
          }
  
          if (otherUserPropertyMap != null) {
              size += otherUserPropertyMap.size();
          }
          else {
              if (getApi().isNotEMPTYlist(JsApiAccess.OTHERPROPERTY_NAME)) {
                  props = (List) getApi().getField(JsApiAccess.OTHERPROPERTY_NAME);
                  if (props != null) {
                      size += props.size();
                  }
              }
          }
  
          if (jmsSystemPropertyMap != null) {
              size += jmsSystemPropertyMap.size();
          }
          else {
              if (getApi().isNotEMPTYlist(JsApiAccess.SYSTEMPROPERTY_NAME)) {
                  props = (List) getApi().getField(JsApiAccess.SYSTEMPROPERTY_NAME);
                  if (props != null) {
                      size += props.size();
                  }
              }
          }
  
          if (systemContextMap != null) {
              size += systemContextMap.size();
          }
          else {
              if (getApi().isNotEMPTYlist(JsApiAccess.SYSTEMCONTEXT_NAME)) {
                  props = (List) getApi().getField(JsApiAccess.SYSTEMCONTEXT_NAME);
                  if (props != null) {
                      size += props.size();
                  }
              }
          }
  
          if (mqMdSetPropertiesMap != null) {
              size += mqMdSetPropertiesMap.size();
          }
          else {
              // This field usually doesn't exist, so no need for the isNotEMPTY check
              props = (List) getHdr2().getField(JsHdr2Access.MQMDPROPERTIES_MAP_NAME);
              if (props != null) {
                  size += props.size();
              }
          }
  
          total += size * 40;
          return total;
      }