private void dexOutOfProcess(
@NonNull final DexProcessBuilder builder,
@NonNull final DexOptions dexOptions,
@NonNull final ProcessOutputHandler processOutputHandler)
throws ProcessException, InterruptedException {
final String submission = Joiner.on(',').join(builder.getInputs());
mLogger.verbose("Dexing out-of-process : %1$s", submission);
try {
Callable<Void> task = () -> {
JavaProcessInfo javaProcessInfo =
builder.build(mTargetInfo.getBuildTools(), dexOptions);
ProcessResult result =
mJavaProcessExecutor.execute(javaProcessInfo, processOutputHandler);
result.rethrowFailure().assertNormalExitValue();
return null;
};
Stopwatch stopwatch = Stopwatch.createStarted();
if (submission.contains("dependencies.jar")) {
task.call();
} else {
sDexExecutorService.submit(task).get();
}
mLogger.verbose("Dexing %1$s took %2$s.", submission, stopwatch.toString());
} catch (Exception e) {
throw new ProcessException(e);
}
}