Replace use of File by Path in bisect tool.
Change-Id: Ie763b1061d1bff510f3a7cc0f4aa8e8e2947f27c
diff --git a/src/main/java/com/android/tools/r8/bisect/Bisect.java b/src/main/java/com/android/tools/r8/bisect/Bisect.java
index 7a483ad..ca6b334 100644
--- a/src/main/java/com/android/tools/r8/bisect/Bisect.java
+++ b/src/main/java/com/android/tools/r8/bisect/Bisect.java
@@ -16,11 +16,11 @@
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Timing;
import com.google.common.io.CharStreams;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
@@ -91,12 +91,9 @@
// Setup output directory (or write to a temp dir).
Path output;
if (options.output != null) {
- output = options.output.toPath();
+ output = options.output;
} else {
- File temp = File.createTempFile("bisect", "", new File("/tmp"));
- temp.delete();
- temp.mkdir();
- output = temp.toPath();
+ output = Files.createTempDirectory("bisect");
}
ExecutorService executor = Executors.newWorkStealingPool();
@@ -104,9 +101,8 @@
DexApplication goodApp = readApp(options.goodBuild, executor);
DexApplication badApp = readApp(options.badBuild, executor);
- File stateFile = options.stateFile != null
- ? options.stateFile
- : output.resolve("bisect.state").toFile();
+ Path stateFile =
+ options.stateFile != null ? options.stateFile : output.resolve("bisect.state");
// Setup initial (or saved) bisection state.
BisectState state = new BisectState(goodApp, badApp, stateFile);
@@ -168,9 +164,9 @@
throw new CompilationError("Failed to run command " + args);
}
- private DexApplication readApp(File apk, ExecutorService executor)
+ private DexApplication readApp(Path apk, ExecutorService executor)
throws IOException, ExecutionException {
- AndroidApp app = AndroidApp.builder().addProgramFiles(apk.toPath()).build();
+ AndroidApp app = AndroidApp.builder().addProgramFiles(apk).build();
return new ApplicationReader(app, new InternalOptions(), timing).read(executor);
}
diff --git a/src/main/java/com/android/tools/r8/bisect/BisectOptions.java b/src/main/java/com/android/tools/r8/bisect/BisectOptions.java
index 8bd2c90..4f59900 100644
--- a/src/main/java/com/android/tools/r8/bisect/BisectOptions.java
+++ b/src/main/java/com/android/tools/r8/bisect/BisectOptions.java
@@ -4,9 +4,11 @@
package com.android.tools.r8.bisect;
import com.android.tools.r8.errors.CompilationError;
-import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
@@ -21,11 +23,11 @@
public static final String OUTPUT_FLAG = "output";
public static final String COMMAND_FLAG = "command";
- public final File goodBuild;
- public final File badBuild;
- public final File stateFile;
- public final File command;
- public final File output;
+ public final Path goodBuild;
+ public final Path badBuild;
+ public final Path stateFile;
+ public final Path command;
+ public final Path output;
public final Result result;
public enum Result { UNKNOWN, GOOD, BAD }
@@ -76,8 +78,8 @@
}
}
- private BisectOptions(File goodBuild, File badBuild, File stateFile, File command, File output,
- Result result) {
+ private BisectOptions(
+ Path goodBuild, Path badBuild, Path stateFile, Path command, Path output, Result result) {
this.goodBuild = goodBuild;
this.badBuild = badBuild;
this.stateFile = stateFile;
@@ -93,17 +95,17 @@
printHelp(System.out);
return null;
}
- File goodBuild = exists(require(options, parser.goodBuild, BUILD_GOOD_FLAG), BUILD_GOOD_FLAG);
- File badBuild = exists(require(options, parser.badBuild, BUILD_BAD_FLAG), BUILD_BAD_FLAG);
- File stateFile = null;
+ Path goodBuild = exists(require(options, parser.goodBuild, BUILD_GOOD_FLAG), BUILD_GOOD_FLAG);
+ Path badBuild = exists(require(options, parser.badBuild, BUILD_BAD_FLAG), BUILD_BAD_FLAG);
+ Path stateFile = null;
if (options.valueOf(parser.stateFile) != null) {
stateFile = exists(options.valueOf(parser.stateFile), STATE_FLAG);
}
- File command = null;
+ Path command = null;
if (options.valueOf(parser.command) != null) {
command = exists(options.valueOf(parser.command), COMMAND_FLAG);
}
- File output = null;
+ Path output = null;
if (options.valueOf(parser.output) != null) {
output = directoryExists(options.valueOf(parser.output), OUTPUT_FLAG);
}
@@ -129,17 +131,17 @@
throw new CompilationError("Missing required option: --" + flag);
}
- private static File exists(String path, String flag) {
- File file = new File(path);
- if (file.exists()) {
+ private static Path exists(String path, String flag) {
+ Path file = Paths.get(path);
+ if (Files.exists(file)) {
return file;
}
throw new CompilationError("File --" + flag + ": " + file + " does not exist");
}
- private static File directoryExists(String path, String flag) {
- File file = new File(path);
- if (file.exists() && file.isDirectory()) {
+ private static Path directoryExists(String path, String flag) {
+ Path file = Paths.get(path);
+ if (Files.exists(file) && Files.isDirectory(file)) {
return file;
}
throw new CompilationError("File --" + flag + ": " + file + " is not a valid directory");
diff --git a/src/main/java/com/android/tools/r8/bisect/BisectState.java b/src/main/java/com/android/tools/r8/bisect/BisectState.java
index cb3bf6e..5500637 100644
--- a/src/main/java/com/android/tools/r8/bisect/BisectState.java
+++ b/src/main/java/com/android/tools/r8/bisect/BisectState.java
@@ -15,12 +15,11 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.hash.Hashing;
import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
+import java.io.BufferedWriter;
import java.io.IOException;
import java.io.Writer;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
@@ -147,14 +146,14 @@
private final DexApplication badApp;
private final List<DexProgramClass> sortedGoodClasses;
private final Map<DexType, Integer> indexMap;
- private final File stateFile;
+ private final Path stateFile;
private List<Run> runs = new ArrayList<>();
// Computed data
private Range nextRange = null;
- public BisectState(DexApplication goodApp, DexApplication badApp, File stateFile) {
+ public BisectState(DexApplication goodApp, DexApplication badApp, Path stateFile) {
this.badApp = badApp;
this.stateFile = stateFile;
signature = makeSignature(goodApp);
@@ -174,12 +173,12 @@
if (stateFile == null) {
return;
}
- if (!Files.exists(stateFile.toPath())) {
+ if (!Files.exists(stateFile)) {
System.out.println("Assuming initial run for non-existent state file: " + stateFile);
return;
}
List<String> data = new ArrayList<>();
- try (BufferedReader reader = new BufferedReader(new FileReader(stateFile))) {
+ try (BufferedReader reader = Files.newBufferedReader(stateFile)) {
if (!signature.equals(readSignature(reader))) {
throw new CompilationError(
"Bisection state file does not match the reference build signature");
@@ -310,7 +309,7 @@
if (stateFile == null) {
return;
}
- try (FileWriter writer = new FileWriter(stateFile, false)) {
+ try (BufferedWriter writer = Files.newBufferedWriter(stateFile)) {
writer.write(signature);
writer.write("\n");
for (Run run : runs) {
diff --git a/src/test/java/com/android/tools/r8/bisect/BisectTest.java b/src/test/java/com/android/tools/r8/bisect/BisectTest.java
index 5c67c83..dd47a3e 100644
--- a/src/test/java/com/android/tools/r8/bisect/BisectTest.java
+++ b/src/test/java/com/android/tools/r8/bisect/BisectTest.java
@@ -79,7 +79,7 @@
Timing timing = new Timing("bisect-test");
DexApplication appGood = new ApplicationReader(goodInput, options, timing).read();
DexApplication appBad = new ApplicationReader(badInput, options, timing).read();
- BisectState state = new BisectState(appGood, appBad, stateFile.toFile());
+ BisectState state = new BisectState(appGood, appBad, stateFile);
state.read();
if (lastResult != Result.UNKNOWN) {
state.setPreviousResult(lastResult);