docs: @Nullable
    @VisibleForTesting
    static String getClosest(Iterable<String> allNames, String wrongName) {
      // only suggest matches that are closer than this.  This magic heuristic is based on what llvm
      // and javac do
      int shortest = (wrongName.length() + 2) / 3 + 1;
      String closestName = null;
      for (String otherName : allNames) {
        if (otherName.equals(wrongName)) {
          throw new IllegalArgumentException("'" + wrongName + "' is contained in " + allNames);
        }
        int distance = distance(otherName, wrongName, shortest);
        if (distance < shortest) {
          shortest = distance;
          closestName = otherName;
          if (distance == 0) {
            return closestName;
          }
        }
      }
      return closestName;
    }