anchor.diff:    if (!await new File.fromUri(analyzer).exists()) {
       throw "Couldn't find '$analyzerPath' in '${dartSdk.toFilePath()}'";
     }
  -  List<String> arguments = new List<String>.from(
  +  List<String> arguments = <String>[
  +      "--packages=${testRoot.resolve('.packages').toFilePath()}",
  +      "--package-warnings",
  +      "--format=machine",
  +  ];
  +  arguments.addAll(
         descriptions.map(
             (TestDescription desciption) => desciption.uri.toFilePath()));
     arguments
  -      ..add(Platform.script.resolve("../lib/reify_transformer.dart")
  +      ..add(testRoot.resolve("../lib/reify_transformer.dart")
               .toFilePath())
  -      ..add(Platform.script.resolve("../bin/dartk.dart")
  +      ..add(testRoot.resolve("../bin/dartk.dart")
               .toFilePath())
  -      ..add(Platform.script.resolve("../bin/repl.dart")
  +      ..add(testRoot.resolve("../bin/repl.dart")
               .toFilePath())
  -      ..add(Platform.script.toFilePath());
  -  print("Running analyzer");
  +      ..add(testRoot.resolve("log_analyzer.dart")
  +            .toFilePath());
  +  print("Running analyzer on $arguments");
     Stopwatch sw = new Stopwatch()..start();
     Process process = await Process.start(
  -      "./run_analyzer.sh", arguments,
  +      dartSdk.resolve("bin/dartanalyzer").toFilePath(),
  +      arguments,
         environment: {"DART_SDK": dartSdk.toFilePath()});
     process.stdin.close();
  -  bool hasStdout = false;
  -  bool hasStderr = false;
  -  Future stdoutFuture = process.stdout.listen((data) {
  -    stdout.add(data);
  -    hasStdout = true;
  -  }).asFuture();
  -  Future stderrFuture = process.stderr.listen((data) {
  -    stderr.add(data);
  -    hasStderr = true;
  -  }).asFuture();
  -  int exitCode = await process.exitCode;
  -  await stdoutFuture;
  -  await stderrFuture;
  -  if (exitCode != 0) {
  -    throw "Non-zero exit code ($exitCode) from analyzer.";
  -  }
  -  if (hasStdout || hasStderr) {
  +  Future stdoutFuture = parseAnalyzerOutput(process.stdout).toList();
  +  Future stderrFuture = parseAnalyzerOutput(process.stderr).toList();
  +  await process.exitCode;
  +  List<AnalyzerDiagnostic> diagnostics = <AnalyzerDiagnostic>[];
  +  diagnostics.addAll(await stdoutFuture);
  +  diagnostics.addAll(await stderrFuture);
  +  bool hasOutput = false;
  +  for (AnalyzerDiagnostic diagnostic in diagnostics) {
  +    if (diagnostic.uri.path.contains("/third_party")) continue;
  +    hasOutput = true;
  +    print(diagnostic);
  +  }
  +  if (hasOutput) {
       throw "Non-empty output from analyzer.";
     }
     sw.stop();
  
positive.code:   }
    await analyzeTests(unitTests);
    StringBuffer sb = new StringBuffer();
    sb.writeln("library testa_combined;\n");
    sb.writeln("import '${Platform.script.path}' show runTests;\n");
    for (TestDescription description in unitTests) {
      String shortName = description.shortName.replaceAll("/", "__");
      sb.writeln(
  
negative.code:         "show main;");
    }
    sb.writeln("\nvoid main() {");
    sb.writeln("  Directory.current = '${testRoot.resolve('..').toFilePath()}';");
    sb.writeln("  runTests(<String, Function> {");
    for (TestDescription description in unitTests) {
      String shortName = description.shortName.replaceAll("/", "__");
  