@java.lang.Override
  public int hashCode() {
    if (memoizedHashCode != 0) {
      return memoizedHashCode;
    }
    int hash = 41;
    hash = (19 * hash) + getDescriptor().hashCode();
    hash = (37 * hash) + NAME_FIELD_NUMBER;
    hash = (53 * hash) + getName().hashCode();
    hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER;
    hash = (53 * hash) + getDescription().hashCode();
    hash = (37 * hash) + STATE_FIELD_NUMBER;
    hash = (53 * hash) + state_;
    hash = (37 * hash) + REVISION_ID_FIELD_NUMBER;
    hash = (53 * hash) + getRevisionId().hashCode();
    if (hasCreateTime()) {
      hash = (37 * hash) + CREATE_TIME_FIELD_NUMBER;
      hash = (53 * hash) + getCreateTime().hashCode();
    }
    if (hasUpdateTime()) {
      hash = (37 * hash) + UPDATE_TIME_FIELD_NUMBER;
      hash = (53 * hash) + getUpdateTime().hashCode();
    }
    if (hasRevisionCreateTime()) {
      hash = (37 * hash) + REVISION_CREATE_TIME_FIELD_NUMBER;
      hash = (53 * hash) + getRevisionCreateTime().hashCode();
    }
    if (!internalGetLabels().getMap().isEmpty()) {
      hash = (37 * hash) + LABELS_FIELD_NUMBER;
      hash = (53 * hash) + internalGetLabels().hashCode();
    }
    hash = (37 * hash) + SERVICE_ACCOUNT_FIELD_NUMBER;
    hash = (53 * hash) + getServiceAccount().hashCode();
    hash = (37 * hash) + CRYPTO_KEY_NAME_FIELD_NUMBER;
    hash = (53 * hash) + getCryptoKeyName().hashCode();
    if (hasStateError()) {
      hash = (37 * hash) + STATE_ERROR_FIELD_NUMBER;
      hash = (53 * hash) + getStateError().hashCode();
    }
    hash = (37 * hash) + CALL_LOG_LEVEL_FIELD_NUMBER;
    hash = (53 * hash) + callLogLevel_;
    if (!internalGetUserEnvVars().getMap().isEmpty()) {
      hash = (37 * hash) + USER_ENV_VARS_FIELD_NUMBER;
      hash = (53 * hash) + internalGetUserEnvVars().hashCode();
    }
    hash = (37 * hash) + EXECUTION_HISTORY_LEVEL_FIELD_NUMBER;
    hash = (53 * hash) + executionHistoryLevel_;
    if (getAllKmsKeysCount() > 0) {
      hash = (37 * hash) + ALL_KMS_KEYS_FIELD_NUMBER;
      hash = (53 * hash) + getAllKmsKeysList().hashCode();
    }
    if (getAllKmsKeysVersionsCount() > 0) {
      hash = (37 * hash) + ALL_KMS_KEYS_VERSIONS_FIELD_NUMBER;
      hash = (53 * hash) + getAllKmsKeysVersionsList().hashCode();
    }
    hash = (37 * hash) + CRYPTO_KEY_VERSION_FIELD_NUMBER;
    hash = (53 * hash) + getCryptoKeyVersion().hashCode();
    if (!internalGetTags().getMap().isEmpty()) {
      hash = (37 * hash) + TAGS_FIELD_NUMBER;
      hash = (53 * hash) + internalGetTags().hashCode();
    }
    switch (sourceCodeCase_) {
      case 10:
        hash = (37 * hash) + SOURCE_CONTENTS_FIELD_NUMBER;
        hash = (53 * hash) + getSourceContents().hashCode();
        break;
      case 0:
      default:
    }
    hash = (29 * hash) + getUnknownFields().hashCode();
    memoizedHashCode = hash;
    return hash;
  }
<pre>
Optional. Input only. Immutable. Tags associated with this workflow.
</pre>

<code>
map&lt;string, string&gt; tags = 19 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL];
</code>
java-workflows/proto-google-cloud-workflows-v1/src/main/java/com/google/cloud/workflows/v1/Workflow.java