public static JavacRemoteProto.Message.Request createCompilationRequest(Iterable<String> options,
                                                                          Iterable<? extends File> files,
                                                                          Iterable<? extends File> classpath,
                                                                          Iterable<? extends File> platformCp,
                                                                          ModulePath modulePath,
                                                                          Iterable<? extends File> upgradeModulePath,
                                                                          Iterable<? extends File> sourcePath,
                                                                          Map<File, Set<File>> outs,
                                                                          ExternalJavacMessageHandler.WslSupport wslSupport) {
    final JavacRemoteProto.Message.Request.Builder builder = JavacRemoteProto.Message.Request.newBuilder();
    builder.setRequestType(JavacRemoteProto.Message.Request.Type.COMPILE);
    builder.addAllOption(options);
    for (File file : files) {
      builder.addFile(wslSupport.convertPath(file.getPath()));
    }
    for (File file : classpath) {
      builder.addClasspath(wslSupport.convertPath(file.getPath()));
    }
    for (File file : platformCp) {
      builder.addPlatformClasspath(wslSupport.convertPath(file.getPath()));
    }
    for (File file : modulePath.getPath()) {
      final String pathEntry = wslSupport.convertPath(file.getPath());
      builder.addModulePath(pathEntry);
      final String moduleName = modulePath.getModuleName(file);
      if (moduleName != null) {
        builder.putModuleNames(pathEntry, moduleName);
      }
    }
    for (File file : upgradeModulePath) {
      builder.addUpgradeModulePath(wslSupport.convertPath(file.getPath()));
    }
    for (File file : sourcePath) {
      builder.addSourcepath(wslSupport.convertPath(file.getPath()));
    }
    for (Map.Entry<File, Set<File>> entry : outs.entrySet()) {
      final JavacRemoteProto.Message.Request.OutputGroup.Builder groupBuilder = JavacRemoteProto.Message.Request.OutputGroup.newBuilder();
      groupBuilder.setOutputRoot(wslSupport.convertPath(entry.getKey().getPath()));
      for (File srcRoot : entry.getValue()) {
        groupBuilder.addSourceRoot(wslSupport.convertPath(srcRoot.getPath()));
      }
      builder.addOutput(groupBuilder.build());
    }
    return builder.build();
  }
public static JavacRemoteProto.Message.Request createCompilationRequest(Iterable<String> options,
                                                                          Iterable<? extends File> files,
                                                                          Iterable<? extends File> classpath,
                                                                          Iterable<? extends File> platformCp,
                                                                          ModulePath modulePath,
                                                                          Iterable<? extends File> upgradeModulePath,
                                                                          Iterable<? extends File> sourcePath,
                                                                          Map<File, Set<File>> outs,
                                                                          ExternalJavacMessageHandler.WslSupport wslSupport)