in sources/java-incremental-compilation/jvm-inc-builder/src/com/intellij/tools/build/bazel/jvmIncBuilder/StorageManager.java [326:362]
private static void deleteOrMoveRecursively(Path dataDir, Path trashDir) throws IOException {
if (Files.notExists(dataDir)) {
return;
}
Files.walkFileTree(dataDir, new SimpleFileVisitor<>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (!Utils.deleteIfExists(file) && !file.startsWith(trashDir) && Files.exists(file, LinkOption.NOFOLLOW_LINKS)) {
Files.createDirectories(trashDir);
Path tempFile = Files.createTempFile(trashDir, null, null);
Files.move(file, tempFile, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
if (exc != null) {
throw exc;
}
try {
Utils.deleteIfExists(dir);
}
catch (DirectoryNotEmptyException e) {
if (dir.equals(trashDir) || (Files.exists(trashDir) && dir.equals(dataDir))) {
// ignore
}
else {
throw e;
}
}
return FileVisitResult.CONTINUE;
}
});
}