anchor.diff:  import 'package:angular/change_detection/dirty_checking_change_detector.dart';
   import 'package:angular/change_detection/watch_group.dart';
   import 'package:benchmark_harness/benchmark_harness.dart';
  +
  +@MirrorsUsed(
  +    targets: const [
  +      'angular.perf.watch_group'
  +    ],
  +    override: '*'
  +)
  +import 'dart:mirrors' show MirrorsUsed;
   
   var _reactionFn = (_, __, ___) => null;
   var _getterCache = new GetterCache({});
  
positive.code:   context.a = new _Obj();
    var watchGrp = new RootWatchGroup(
        new DirtyCheckingChangeDetector(_getterCache), context)
        ..watch(_method('a', 'methodA', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodB', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodC', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodD', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodE', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodF', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodG', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodH', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodI', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodJ', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodK', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodL', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodM', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodN', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodO', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodP', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodQ', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodR', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodS', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodT', [_parse('a')]), _reactionFn);
  
    print('Watch: ${watchGrp.fieldCost}; eval: ${watchGrp.evalCost}');
    time('obj.method?(obj)', () => watchGrp.detectChanges());
  
negative.code:   var s = 19;
    var t = 20;
  
    methodA1(arg0) => a;
    methodB1(arg0) => b;
    methodC1(arg0) => c;
    methodD1(arg0) => d;
    methodE1(arg0) => e;
    methodF1(arg0) => f;
    methodG1(arg0) => g;
    methodH1(arg0) => h;
    methodI1(arg0) => i;
    methodJ1(arg0) => j;
    methodK1(arg0) => k;
    methodL1(arg0) => l;
    methodM1(arg0) => m;
    methodN1(arg0) => n;
    methodO1(arg0) => o;
    methodP1(arg0) => p;
    methodQ1(arg0) => q;
    methodR1(arg0) => r;
    methodS1(arg0) => s;
    methodT1(arg0) => t;
  
    methodA() => a;
    methodB() => b;
    methodC() => c;
    methodD() => d;
    methodE() => e;
    methodF() => f;
    methodG() => g;
    methodH() => h;
    methodI() => i;
    methodJ() => j;
    methodK() => k;
    methodL() => l;
    methodM() => m;
    methodN() => n;
    methodO() => o;
    methodP() => p;
    methodQ() => q;
    methodR() => r;
    methodS() => s;
    methodT() => t;
  
  }
  