docs: function compileGssAsync(
      projectOptions, buildOptions, resolvedInputs, outDirs,
      cssRenamingFileAsync) {
    // If there are no resolved Closure input files: no-op.
    if (resolvedInputs.closure.length == 0) {
      cssRenamingFileAsync.resolve(null);
      return kew.resolve('');
    }
  
    // Spawn GSS compiler in a child process.
    var renamingFile = path.join(outDirs.tmp, 'css_renaming_map.js');
    var gssCompilerArgs = getGssCompilerArgs(projectOptions, buildOptions,
        resolvedInputs, outDirs, renamingFile);
  
    var stderrBehavior = buildOptions.suppressOutput ? 'ignore' : process.stderr;
    var gssCompilation = child_process.spawn(buildOptions.javaCommand,
        gssCompilerArgs, {stdio: ['ignore', 'pipe', stderrBehavior]});
  
    // When it is finished, also resolve CSS renaming file (which JS compilation
    // has to wait on).
    return common.getStdoutString(gssCompilation)
        .then(function(compiledCss) {
          cssRenamingFileAsync.resolve(renamingFile);
          return compiledCss;
        })
        .fail(function(e) { throw new Error('GSS compilation failed: ' + e); });
  }