anchor.diff:  ) {
     final eventListeners = <CompileEventListener>[];
     for (final hostEvent in hostEvents) {
  -    final listener = CompileEventListener.getOrCreate(
  +    final listener = CompileEventListener._getOrCreate(
         compileElement,
         hostEvent.name,
         eventListeners,
       );
  -    listener._addAction(hostEvent, null, null, analyzedClass);
  +    listener._addAction(hostEvent, null, analyzedClass);
     }
     for (var i = 0, len = dirs.length; i < len; i++) {
       final directiveAst = dirs[i];
  
positive.code:       continue;
      }
      for (final hostEvent in directiveAst.hostEvents) {
        final listener = CompileEventListener.getOrCreate(
          compileElement,
          hostEvent.name,
          eventListeners,
        );
        listener._addAction(
          hostEvent,
          directiveAst.directive,
          compileElement.directiveInstances[i],
          analyzedClass,
        );
  
negative.code:   /// add a new one if it doesn't exist yet.
    /// TODO: try using Map, this code is quadratic and assumes typical event
    /// lists are very small.
    static CompileEventListener _getOrCreate(CompileElement compileElement,
        String eventName, List<CompileEventListener> targetEventListeners) {
      for (var existingListener in targetEventListeners) {
        if (existingListener.eventName == eventName) return existingListener;
  