anchor.diff:        this.name, this.commands, this.concurrencyMode);
   }
   
  -class _DefaultProjectDependencyGraphCommand
  -    implements ProjectDependencyGraphCommand {
  -  final String name;
  -  final ProjectDependencyGraphFunction function;
  +class _DefaultProjectDependencyGraphCommand<T>
  +    implements ProjectDependencyGraphCommand<T> {
  +  final String name;
  +  final ProjectDependencyGraphFunction<T> function;
   
     _DefaultProjectDependencyGraphCommand(this.name, this.function);
   
     @override
  -  Future process(DependencyGraph graph, Directory rootDirectory,
  +  Future<T> process(DependencyGraph graph, Directory rootDirectory,
         ProjectFilter filter) async {
       _log.info('Executing command "$name"');
       final stopWatch = new Stopwatch();
  
positive.code: /// A command that operates on a [DependencyGraph]. Unlike the other commands,
  /// a ProjectDependencyGraphCommand is for tasks that require interacting with
  /// several projects at once
  ProjectDependencyGraphCommand dependencyGraphCommand(
          String name, ProjectDependencyGraphFunction function) =>
      new _DefaultProjectDependencyGraphCommand(name, function);
  
  ExecutorAwareProjectCommand executorAwareCommand(
          String name, ExecutorAwareProjectFunction function) =>
      new _DefaultExecutorAwareProjectCommand(name, function);
  
  /// Some function applied to a [Project]
  typedef Future<T> ProjectFunction<T>(Project project);
  
negative.code:   _DefaultExecutorAwareProjectCommand(this.name, this.function);
  
    @override
    Future<T> process(CommandExecutor executor, {ProjectFilter filter}) async {
      _log.info('Executing command "$name"');
      final stopWatch = new Stopwatch();
      stopWatch.start();
  