anchor.diff:        _visitTypes(
           element,
           _directivesProperty,
  -        safeMatcher(isDirective),
           () => new _ComponentVisitor(_library),
         );
   
     List<T> _visitTypes<T>(
       ClassElement element,
       String field,
  -    AnnotationMatcher annotationMatcher,
       ElementVisitor<T> visitor(),
     ) {
       return element.metadata
  -        .where(safeMatcher(hasDirectives))
  +        .where(safeMatcher(isComponent))
           .expand((annotation) => _visitTypesForComponent(
                 coerceList(annotation.computeConstantValue(), field),
  -              safeMatcher(annotationMatcher),
                 visitor,
                 // Only pass the annotation for directives: [ ... ], not other
                 // elements. They also can cause problems if not resolved but it
  
positive.code:     final directive = element.accept(new _ComponentVisitor(_library));
      if (directive != null) {
        if (directive.isComponent) {
          var pipes = _visitPipes(element);
          components.add(new NormalizedComponentWithViewDirectives(
              directive, _visitDirectives(element), pipes));
        } else {
          directives.add(directive);
        }
  
negative.code:   List<CompilePipeMetadata> _visitPipes(ClassElement element) => _visitTypes(
          element,
          'pipes',
          () => new PipeVisitor(_library),
        );
  
  