anchor.diff:    final TemplateContext templateContext;
     final String elementName;
     final List<ng.DirectiveAst> boundDirectives;
  +  // TODO(leonsenft): remove when @i18n is enabled by default.
  +  final bool i18nEnabled;
  +  final I18nMetadataBundle i18nMetadata;
     final bool isTemplate;
     final SelectorMatcher _ngContentIndexMatcher;
     final int _wildcardNgContentIndex;
  
positive.code:     // We return the directives in the same order that they are present in the
      // Component, not the order that they match in the html.
      return directives.where(matchedDirectives.contains).toList();
    }
  
    static SelectorMatcher _selectorMatcher(
  
negative.code:       this.templateContext,
        this.elementName,
        this.boundDirectives,
        this.i18nEnabled,
        this.i18nMetadata,
        this.isTemplate,
        this._ngContentIndexMatcher,
        this._wildcardNgContentIndex);
  
    _ParseContext.forRoot(this.templateContext, this.i18nEnabled)
        : elementName = '',
          boundDirectives = const [],
          i18nMetadata = null,
          isTemplate = false,
          _ngContentIndexMatcher = null,
          _wildcardNgContentIndex = null;
  
    factory _ParseContext.forContainer(
        ast.ContainerAst element, _ParseContext parent) {
      return _ParseContext._(
          parent.templateContext,
          '',
          const [],
          parent.i18nEnabled,
          _maybeParseI18nMetadata(element.annotations, parent),
          false,
          parent._ngContentIndexMatcher,
          parent._wildcardNgContentIndex);
    }
  
    factory _ParseContext.forElement(
        ast.ElementAst element, _ParseContext parent) {
      var templateContext = parent.templateContext;
      var boundDirectives = _toAst(
          _matchElementDirectives(templateContext.directives, element),
          element.sourceSpan,
  