class AdbFileOperations {

  @NotNull
  public ListenableFuture<Void> createNewDirectoryRunAs(@NotNull String parentPath, @NotNull String directoryName, @Nullable String runAs) {
    return myExecutor.executeAsync(() -> {
      if (directoryName.contains(AdbPathUtil.FILE_SEPARATOR)) {
        throw AdbShellCommandException.create("Directory name \"%s\" contains invalid characters", directoryName);
      }

      // "mkdir" fails if the file/directory already exists
      String remotePath = AdbPathUtil.resolve(parentPath, directoryName);
      String command = getCommand(runAs, "mkdir ").withEscapedPath(remotePath).build();
      AdbShellCommandResult commandResult = AdbShellCommandsUtil.executeCommand(myDevice, command);
      commandResult.throwIfError();

      // All done
      return null;
    });
  }

  public  AdbFileOperations(@NotNull IDevice device, @NotNull AdbDeviceCapabilities deviceCapabilities, @NotNull Executor taskExecutor);

}