anchor.diff:        new FileUriResolver()
       ];
       context.sourceFactory = new SourceFactory(uriResolvers);
  -    Source taskSource =
  +    Source dartDartSource =
           setupSource(path.join('lib', 'src', 'task', 'dart.dart'));
  +    Source taskSource = setupSource(path.join('lib', 'plugin', 'task.dart'));
       Source modelSource = setupSource(path.join('lib', 'task', 'model.dart'));
  +    Source enginePluginSource =
  +        setupSource(path.join('lib', 'src', 'plugin', 'engine_plugin.dart'));
       CompilationUnitElement modelElement = getUnit(modelSource).element;
       InterfaceType analysisTaskType = modelElement.getType('AnalysisTask').type;
       DartType dynamicType = context.typeProvider.dynamicType;
  
positive.code:     context.applyChanges(changeSet);
      return source;
    }
  }
  
  class ResultDescriptorFinder extends GeneralizingAstVisitor {
    final InterfaceType resultDescriptorType;
    final ResultDescriptorFinderCallback callback;
  
    ResultDescriptorFinder(this.resultDescriptorType, this.callback);
  
    @override
    visitIdentifier(Identifier node) {
      Element element = node.staticElement;
      if (element is PropertyAccessorElement &&
          element.isGetter &&
          element.returnType.isSubtypeOf(resultDescriptorType)) {
        callback(element);
      }
    }
  
negative.code:           print('  $task -> $output');
          });
        }
      }
      AstNode enginePluginAst = enginePluginUnitElement.node;
      for (String resultList in resultLists) {
        print('  $resultList [shape=hexagon]');
        TopLevelVariableElement extensionIdVariable = _getExtensionId(resultList);
        findExtensions(enginePluginAst, extensionIdVariable, (String extension) {
          results.add(extension);
          print('  $extension -> $resultList');
        });
      }
      for (String result in results) {
        print('  $result [shape=box]');
  