code: private <M extends PMessage<M, F>, F extends PField> Pair<M, Set<String>> checkAndParseInternal(@Nonnull Path configFile,
                                                                                                      @Nullable M parent,
                                                                                                      String... includeStack) throws ProvidenceConfigException {
          try {
              // So we map actual loaded files by the absolute canonical location.
              String canonicalFile = readCanonicalPath(configFile).toString();
              List<String> stackList = new ArrayList<>();
              Collections.addAll(stackList, includeStack);
  
              if (Arrays.binarySearch(includeStack, canonicalFile) >= 0) {
                  stackList.add(canonicalFile);
                  throw new ProvidenceConfigException("Circular includes detected: " + String.join(
                          " -> ",
                          stackList.stream()
                                   .map(p -> new File(p).getName())
                                   .collect(Collectors.toList())));
              }
  
              stackList.add(canonicalFile);
  
              return parseConfigRecursively(configFile, parent, stackList.toArray(new String[0]));
          } catch (IOException e) {
              if (e instanceof ProvidenceConfigException) {
                  ProvidenceConfigException pce = (ProvidenceConfigException) e;
                  if (pce.getFile() == null) {
                      pce.setFile(configFile.getFileName()
                                            .toString());
                  }
                  throw pce;
              }
              if (e instanceof TokenizerException) {
                  TokenizerException te = (TokenizerException) e;
                  if (te.getFile() == null) {
                      te.setFile(configFile.getFileName()
                                           .toString());
                  }
                  throw new ProvidenceConfigException(te);
              }
              throw new ProvidenceConfigException(e, e.getMessage()).setFile(configFile.getFileName()
                                                                                       .toString());
          }
      }
docs: --- private