From 3d5e2252740e3e6561ae7812ab41c806fbabd77d Mon Sep 17 00:00:00 2001 From: Skylot <118523+skylot@users.noreply.github.com> Date: Tue, 22 Oct 2024 17:58:51 +0100 Subject: [PATCH] fix: clear temp root dir instead delete (#2312) --- .../main/java/jadx/api/JadxDecompiler.java | 2 +- .../java/jadx/core/utils/files/FileUtils.java | 28 +++++++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java index 4cacd98ec..aabaa886c 100644 --- a/jadx-core/src/main/java/jadx/api/JadxDecompiler.java +++ b/jadx-core/src/main/java/jadx/api/JadxDecompiler.java @@ -178,7 +178,7 @@ public final class JadxDecompiler implements Closeable { closeInputs(); closeLoaders(); args.close(); - FileUtils.deleteTempRootDir(); + FileUtils.clearTempRootDir(); } private void closeInputs() { diff --git a/jadx-core/src/main/java/jadx/core/utils/files/FileUtils.java b/jadx-core/src/main/java/jadx/core/utils/files/FileUtils.java index 6f2719cb9..59320ce8a 100644 --- a/jadx-core/src/main/java/jadx/core/utils/files/FileUtils.java +++ b/jadx-core/src/main/java/jadx/core/utils/files/FileUtils.java @@ -152,7 +152,7 @@ public class FileUtils { } } - private static final SimpleFileVisitor FILE_DELETE_VISITOR = new SimpleFileVisitor() { + private static final SimpleFileVisitor FILE_DELETE_VISITOR = new SimpleFileVisitor<>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { Files.delete(file); @@ -174,8 +174,30 @@ public class FileUtils { } } - public static void deleteTempRootDir() { - deleteDirIfExists(tempRootDir); + public static void clearTempRootDir() { + clearDir(tempRootDir); + } + + public static void clearDir(Path clearDir) { + try { + Files.walkFileTree(clearDir, Collections.emptySet(), Integer.MAX_VALUE, new SimpleFileVisitor<>() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + Files.delete(file); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { + if (!dir.equals(clearDir)) { + Files.delete(dir); + } + return FileVisitResult.CONTINUE; + } + }); + } catch (Exception e) { + throw new JadxRuntimeException("Failed to clear directory " + clearDir, e); + } } public static Path createTempDir(String prefix) {