anchor.diff:  Logger _log = new Logger('jefe.project.command.multiproject');
   
   typedef Future<T> SingleProjectCommandFactory<T>(JefeProject project);
  +typedef Future<T> SingleProjectCommand<S, T>(S single);
  +typedef Callable<T> _Processor<T>(ProjectFunction/*<T>*/ command,
  +    {ProjectFilter filter, Combiner/*<T>*/ combine});
   
   /**
    * TODO: we could build a default mode into JefeProject / JefeProjectGraph etc
  
positive.code:  */
  
  class MultiProjectCommandSupport<C> {
    final JefeProjectGraph _projectGraph;
  
    final SingleProjectCommandFactory<C> _factory;
  
  
negative.code:         _processor/*<T>*/(mode ?? CommandConcurrencyMode.concurrentCommand);
  
      return executeTask/*<T>*/(
          taskDescription, processor(command, filter: filter, combine: combine));
    }
  
  //  Future/*<T>*/ processDepthFirst/*<T>*/(ProjectFunction/*<T>*/ command,
  //          {ProjectFilter filter, Combiner/*<T>*/ combine}) =>
  //      graph.processDepthFirst(command, filter: filter, combine: combine);
  
    Callable/*<T>*/ _concurrentProcessor/*<T>*/(ProjectFunction/*<T>*/ command,
        {ProjectFilter filter, Combiner/*<T>*/ combine}) {
      return () =>
          graph.processAllConcurrently(command, filter: filter, combine: combine);
    }
  
    Callable/*<T>*/ _serialProcessor/*<T>*/(ProjectFunction/*<T>*/ command,
        {ProjectFilter filter, Combiner/*<T>*/ combine}) {
      return () =>
          graph.processDepthFirst(command, filter: filter, combine: combine);
    }
  
  //  Callable/*<T>*/ _singleProjectProcessor/*<T>*/(ProjectFunction/*<T>*/ command,
  //      {ProjectFilter filter, Combiner/*<T>*/ combine}) {
  //    return () {
  //      final project = graph as JefeProject;
  //      if (!filter(project)) {
  //        return new Future.value();
  //      }
  //      return command(project);
  //    };
  //  }
  
    _Processor/*<T>*/ _processor/*<T>*/(CommandConcurrencyMode mode) {
  //    if (isSingleProjectMode) {
  //      return _singleProjectProcessor;
  //    }
  
      switch (mode) {
        case CommandConcurrencyMode.serial:
          return _serialProcessor;
        case CommandConcurrencyMode.concurrentCommand:
        case CommandConcurrencyMode.concurrentProject:
        default:
          return _concurrentProcessor;
      }
    }
  }
  
  