public static Map<DebuggerSession, Map<String, HotSwapFile>> findModifiedClasses(
    List<DebuggerSession> sessions, Map<String, Collection<String>> generatedPaths
  ) {
    final Map<DebuggerSession, Map<String, HotSwapFile>> result = new HashMap<>();
    List<Pair<DebuggerSession, Long>> sessionWithStamps = new ArrayList<>();
    for (DebuggerSession session : sessions) {
      sessionWithStamps.add(new Pair<>(session, getInstance(session.getProject()).getTimeStamp(session)));
    }
    for (Map.Entry<String, Collection<String>> entry : generatedPaths.entrySet()) {
      final File root = new File(entry.getKey());
      for (String relativePath : entry.getValue()) {
        String qualifiedName = getQualifiedName(relativePath, 0);
        if (qualifiedName != null) {
          final HotSwapFile hotswapFile = new HotSwapFile(new File(root, relativePath));
          final long fileStamp = hotswapFile.file.lastModified();

          for (Pair<DebuggerSession, Long> pair : sessionWithStamps) {
            final DebuggerSession session = pair.first;
            if (fileStamp > pair.second) {
              result.computeIfAbsent(session, k -> new HashMap<>()).put(qualifiedName, hotswapFile);
            }
          }
        }
      }
    }
    return result;
  }
public static Map<DebuggerSession, Map<String, HotSwapFile>> findModifiedClasses(
    List<DebuggerSession> sessions, Map<String, Collection<String>> generatedPaths
  )