docs: private void checkService(String prop, String update) {
      Class<?> cls;
      try {
        cls = Class.forName(prop);
      }
      catch(ClassNotFoundException e) {
        LOG.warning("Service file name is not a class name: " + prop);
        return;
      }
      List<Class<?>> impls = ELKIServiceRegistry.findAllImplementations(cls, false, false);
      HashSet<String> names = new HashSet<>();
      for(Class<?> c2 : impls) {
        names.add(c2.getName());
      }
  
      Matcher m = strip.matcher("");
      try {
        Enumeration<URL> us = getClass().getClassLoader().getResources(ELKIServiceLoader.RESOURCE_PREFIX + cls.getName());
        while(us.hasMoreElements()) {
          URL u = us.nextElement();
          boolean injar = "jar".equals(u.getProtocol());
          try (
              BufferedReader r = new BufferedReader(new InputStreamReader(u.openStream(), StandardCharsets.UTF_8))) {
            for(String line; (line = r.readLine()) != null;) {
              m.reset(line);
              if(!m.matches()) {
                LOG.warning("Line: " + line + " didn't match regexp.");
                continue;
              }
              String stripped = m.group(1);
              if(stripped.length() > 0) {
                String[] parts = stripped.split(" ");
                if(!names.remove(parts[0]) && !injar) {
                  LOG.warning("Name " + parts[0] + " found for property " + prop + " but no class discovered (or listed twice).");
                }
                checkAliases(cls, parts[0], parts);
              }
            }
          }
        }
      }
      catch(IOException e) {
        LOG.exception(e);
      }
      if(!names.isEmpty()) {
        // format for copy & paste to properties file:
        ArrayList<String> sorted = new ArrayList<>(names);
        // TODO: sort by package, then classname
        Collections.sort(sorted);
        if(update == null) {
          StringBuilder message = new StringBuilder().append("Class ").append(prop)//
              .append(" lacks suggestions:").append(FormatUtil.NEWLINE);
          for(String remaining : sorted) {
            message.append(remaining).append(FormatUtil.NEWLINE);
          }
          LOG.warning(message.toString());
          return;
        }
        // Try to automatically update:
        try {
          Files.createDirectories(Paths.get(update + File.separator + ELKIServiceLoader.FILENAME_PREFIX));
          String fname = update + File.separator + ELKIServiceLoader.FILENAME_PREFIX + prop;
          PrintStream pr = new PrintStream(new FileOutputStream(fname, true));
          pr.println(); // In case there was no linefeed at the end.
          for(String remaining : sorted) {
            pr.println(remaining);
          }
          pr.close();
          LOG.warning("Updated service file: " + fname);
        }
        catch(IOException e) {
          LOG.exception(e);
        }
      }
    }