code: private ClassIndex indexForPath(Path path) {
          if (isJRTMarkerFile(path)) {
              FileSystem jrtfs = FileSystems.getFileSystem(URI.create("jrt:/"));
              Path modules = jrtfs.getPath("modules");
              return PATH_TO_INDEX.compute(path, (p, index) -> {
                  try {
                      long lastModified = Files.getLastModifiedTime(modules).toMillis();
                      if (index == null || index.timestamp != lastModified) {
                          try (DirectoryStream<Path> stream = Files.newDirectoryStream(modules)) {
                              index = doIndex(lastModified, path, stream);
                          }
                      }
                      return index;
                  } catch (IOException ex) {
                      proc.debug(ex, "SourceCodeAnalysisImpl.indexesForPath(" + path.toString() + ")");
                      return new ClassIndex(-1, path, Collections.emptySet(), Collections.emptyMap());
                  }
              });
          } else if (!Files.isDirectory(path)) {
              if (Files.exists(path)) {
                  return PATH_TO_INDEX.compute(path, (p, index) -> {
                      try {
                          long lastModified = Files.getLastModifiedTime(p).toMillis();
                          if (index == null || index.timestamp != lastModified) {
                              ClassLoader cl = SourceCodeAnalysisImpl.class.getClassLoader();
  
                              try (FileSystem zip = FileSystems.newFileSystem(path, cl)) {
                                  index = doIndex(lastModified, path, zip.getRootDirectories());
                              }
                          }
                          return index;
                      } catch (IOException ex) {
                          proc.debug(ex, "SourceCodeAnalysisImpl.indexesForPath(" + path.toString() + ")");
                          return new ClassIndex(-1, path, Collections.emptySet(), Collections.emptyMap());
                      }
                  });
              } else {
                  return new ClassIndex(-1, path, Collections.emptySet(), Collections.emptyMap());
              }
          } else {
              return PATH_TO_INDEX.compute(path, (p, index) -> {
                  //no persistence for directories, as we cannot check timestamps:
                  if (index == null) {
                      index = doIndex(-1, path, Arrays.asList(p));
                  }
                  return index;
              });
          }
      }
docs: if an index exists for the given entry, the existing index is kept unless the timestamp is modified