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:   var s = 19;
    var t = 20;
  
    methodA([arg0]) => a;
    methodB([arg0]) => b;
    methodC([arg0]) => c;
    methodD([arg0]) => d;
    methodE([arg0]) => e;
    methodF([arg0]) => f;
    methodG([arg0]) => g;
    methodH([arg0]) => h;
    methodI([arg0]) => i;
    methodJ([arg0]) => j;
    methodK([arg0]) => k;
    methodL([arg0]) => l;
    methodM([arg0]) => m;
    methodN([arg0]) => n;
    methodO([arg0]) => o;
    methodP([arg0]) => p;
    methodQ([arg0]) => q;
    methodR([arg0]) => r;
    methodS([arg0]) => s;
    methodT([arg0]) => t;
  }
  
negative.code:   context.a = new _Obj();
    var watchGrp = new RootWatchGroup(
        new DirtyCheckingChangeDetector(_getterCache), context)
        ..watch(_method('a', 'methodA1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodB1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodC1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodD1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodE1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodF1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodG1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodH1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodI1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodJ1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodK1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodL1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodM1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodN1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodO1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodP1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodQ1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodR1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodS1', [_parse('a')]), _reactionFn)
        ..watch(_method('a', 'methodT1', [_parse('a')]), _reactionFn);
  
    print('Watch: ${watchGrp.fieldCost}; eval: ${watchGrp.evalCost}');
    time('obj.method?(obj)', () => watchGrp.detectChanges());
  