anchor.diff:        eventListener
       ]);
   
  -    this
  -        .compileElement
  -        .view
  -        .createMethod
  +    compileElement.view.createMethod
           .addStmt(new o.ExpressionStatement(listenExpr));
     }
   
  
positive.code: List<CompileEventListener> collectEventListeners(List<BoundEventAst> hostEvents,
      List<DirectiveAst> dirs, CompileElement compileElement) {
    List<CompileEventListener> eventListeners = [];
    hostEvents.forEach((hostEvent) {
      compileElement.view.bindings
          .add(new CompileBinding(compileElement, hostEvent));
      var listener = CompileEventListener.getOrCreate(
          compileElement, hostEvent.name, eventListeners);
      listener.addAction(hostEvent, null, null);
    });
    var i = -1;
    dirs.forEach((directiveAst) {
      i++;
      var directiveInstance = compileElement.directiveInstances[i];
      directiveAst.hostEvents.forEach((hostEvent) {
        compileElement.view.bindings
            .add(new CompileBinding(compileElement, hostEvent));
        var listener = CompileEventListener.getOrCreate(
            compileElement, hostEvent.name, eventListeners);
        listener.addAction(hostEvent, directiveAst.directive, directiveInstance);
      });
    });
    eventListeners.forEach((listener) => listener.finishMethod());
    return eventListeners;
  }
  
  void bindDirectiveOutputs(DirectiveAst directiveAst,
      o.Expression directiveInstance, List<CompileEventListener> eventListeners) {
    directiveAst.directive.outputs.forEach((observablePropName, eventName) {
      eventListeners
          .where((listener) => listener.eventName == eventName)
          .toList()
          .forEach((listener) {
        listener.listenToDirective(directiveInstance, observablePropName);
      });
    });
  }
  
  void bindRenderOutputs(List<CompileEventListener> eventListeners) {
    eventListeners.forEach((listener) => listener.listenToRenderer());
  }
  
  o.Expression convertStmtIntoExpression(o.Statement stmt) {
  
negative.code:   return null;
  }
  
  final RegExp _eventNameRegExp = new RegExp(r'[^a-zA-Z_]');
  
  String sanitizeEventName(String name) {
    return name.replaceAll(_eventNameRegExp, '_');
  }
  