docs: public void containsEntry(@NullableDecl Object key, @NullableDecl Object value) {
      Entry<Object, Object> entry = Maps.immutableEntry(key, value);
      if (!actual().entrySet().contains(entry)) {
        List<Object> keyList = Lists.newArrayList(key);
        List<Object> valueList = Lists.newArrayList(value);
        if (hasMatchingToStringPair(actual().keySet(), keyList)) {
          failWithoutActual(
              simpleFact(
                  lenientFormat(
                      "Not true that %s contains entry <%s (%s)>. However, it does contain keys "
                          + "<%s>.",
                      actualAsString(),
                      entry,
                      objectToTypeName(entry),
                      countDuplicatesAndAddTypeInfo(
                          retainMatchingToString(actual().keySet(), keyList /* itemsToCheck */)))));
        } else if (hasMatchingToStringPair(actual().values(), valueList)) {
          failWithoutActual(
              simpleFact(
                  lenientFormat(
                      "Not true that %s contains entry <%s (%s)>. However, it does contain values "
                          + "<%s>.",
                      actualAsString(),
                      entry,
                      objectToTypeName(entry),
                      countDuplicatesAndAddTypeInfo(
                          retainMatchingToString(actual().values(), valueList /* itemsToCheck */)))));
        } else if (actual().containsKey(key)) {
          Object actualValue = actual().get(key);
          /*
           * In the case of a null expected or actual value, clarify that the key *is* present and
           * *is* expected to be present. That is, get() isn't returning null to indicate that the key
           * is missing, and the user isn't making an assertion that the key is missing.
           */
          StandardSubjectBuilder check = check("get(%s)", key);
          if (value == null || actualValue == null) {
            check = check.withMessage("key is present but with a different value");
          }
          // See the comment on IterableSubject's use of failEqualityCheckForEqualsWithoutDescription.
          check.that(actualValue).failEqualityCheckForEqualsWithoutDescription(value);
        } else if (actual().containsValue(value)) {
          Set<Object> keys = new LinkedHashSet<>();
          for (Entry<?, ?> actualEntry : actual().entrySet()) {
            if (Objects.equal(actualEntry.getValue(), value)) {
              keys.add(actualEntry.getKey());
            }
          }
          failWithoutActual(
              simpleFact(
                  lenientFormat(
                      "Not true that %s contains entry <%s>. "
                          + "However, the following keys are mapped to <%s>: %s",
                      actualAsString(), entry, value, keys)));
        } else {
          failWithActual("expected to contain entry", entry);
        }
      }
    }