code: private synchronized void reloadFromUserControlledList() {
          File file = getConfigFile();
          if (!file.exists()) {
              if ((whitelistSignaturesFromUserControlledList != null && whitelistSignaturesFromUserControlledList.isEmpty()) ||
                      (blacklistSignaturesFromUserControlledList != null && blacklistSignaturesFromUserControlledList.isEmpty())) {
                  LOGGER.log(Level.INFO, "No whitelist source file found at " + file + " so resetting user-controlled whitelist");
              }
              whitelistSignaturesFromUserControlledList = new HashSet<>();
              blacklistSignaturesFromUserControlledList = new HashSet<>();
              return;
          }
  
          LOGGER.log(Level.INFO, "Whitelist source file found at " + file);
  
          try {
              whitelistSignaturesFromUserControlledList = new HashSet<>();
              blacklistSignaturesFromUserControlledList = new HashSet<>();
      
              parseFileIntoList(
                      FileUtils.readLines(file, StandardCharsets.UTF_8),
                      whitelistSignaturesFromUserControlledList,
                      blacklistSignaturesFromUserControlledList
              );
          } catch (IOException e) {
              LOGGER.log(Level.WARNING, "Failed to load " + file.getAbsolutePath(), e);
          }
      }
docs: Loads the data from the disk into this object.
  
  <p>
  The constructor of the derived class must call this method.
  (If we do that in the base class, the derived class won't
  get a chance to set default values.)