@Override
  protected GocodeServerInstance doCreateServerInstance(IOperationMonitor om)
      throws CommonException, OperationCancellation {
    Path gocodePath = getServerPath();

    ArrayList2<String> commandLine = new ArrayList2<String>();
    commandLine.add(gocodePath.toString());
    commandLine.add("-s");
    if (GocodeCompletionOperation.USE_TCP) {
      commandLine.add("-sock=tcp");
    }

    LangCore.logInfo(
        "Starting gocode server: "
            + DebugPlugin.renderArguments(commandLine.toArray(String.class), null));

    ProcessBuilder pb = new ProcessBuilder(commandLine);

    IToolOperationMonitor opMonitor =
        toolMgr.startNewOperation(ProcessStartKind.ENGINE_SERVER, true, false);
    String prefixText = "==== Starting gocode server ====\n";

    gocodeSetEnableBuiltins(gocodePath, om, opMonitor, prefixText);

    ExternalProcessNotifyingHelper process =
        toolMgr.new RunToolTask(opMonitor, prefixText, null, pb, om).startProcess();

    return new GocodeServerInstance(gocodePath, process);
  }
  private static void execute(String commandLine, String[] expectedArgs, String expectedRendered)
      throws Exception {
    String[] arguments = DebugPlugin.parseArguments(commandLine);
    assertEquals(
        "unexpected parseArguments result;", //$NON-NLS-1$
        Arrays.asList(expectedArgs).toString(),
        Arrays.asList(arguments).toString());

    runCommandLine(commandLine, arguments);

    String rendered = DebugPlugin.renderArguments(arguments, null);
    assertEquals("unexpected renderArguments result;", expectedRendered, rendered); // $NON-NLS-1$

    if (!commandLine.equals(rendered)) {
      String[] arguments2 = DebugPlugin.parseArguments(rendered);
      assertEquals(
          "parsing rendered command line doesn't yield original arguments;", //$NON-NLS-1$
          Arrays.asList(expectedArgs).toString(),
          Arrays.asList(arguments2).toString());
    }

    String[] splitArguments = DebugPlugin.splitArguments(commandLine);
    assertEquals(expectedArgs.length, splitArguments.length);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < splitArguments.length; i++) {
      if (i > 0) {
        sb.append(" "); // $NON-NLS-1$
      }
      sb.append(splitArguments[i]);
    }
    assertEquals(commandLine, sb.toString());
  }
 public String getProgramArgumentsString() {
   return DebugPlugin.renderArguments(programArguments, null);
 }