public List compile(CompilerConfiguration config) throws CompilerException {
    File destinationDir = new File(config.getOutputLocation());

    if (!destinationDir.exists()) {
      destinationDir.mkdirs();
    }

    config.setSourceFiles(null);

    String[] sourceFiles = CSharpCompiler.getSourceFiles(config);

    if (sourceFiles.length == 0) {
      return Collections.EMPTY_LIST;
    }

    System.out.println(
        "Compiling "
            + sourceFiles.length
            + " "
            + "source file"
            + (sourceFiles.length == 1 ? "" : "s")
            + " to "
            + destinationDir.getAbsolutePath());

    String[] args = buildCompilerArguments(config, sourceFiles);

    List messages;

    if (config.isFork()) {
      messages =
          compileOutOfProcess(
              config.getWorkingDirectory(),
              config.getBuildDirectory(),
              findExecutable(config),
              args);
    } else {
      throw new CompilerException("This compiler doesn't support in-process compilation.");
    }

    return messages;
  }
 public String[] createCommandLine(CompilerConfiguration config) throws CompilerException {
   return buildCompilerArguments(config, CSharpCompiler.getSourceFiles(config));
 }