code: public List<AnnotationNode> visit(AnnotationNode collector, AnnotationNode aliasAnnotationUsage, AnnotatedNode aliasAnnotated, SourceUnit source) {
          List<AnnotationNode> ret =  getTargetAnnotationList(collector, aliasAnnotationUsage, source);
          Set<String> unusedNames = new HashSet<String>(aliasAnnotationUsage.getMembers().keySet());
  
          for (AnnotationNode an: ret) {
              for (String name : aliasAnnotationUsage.getMembers().keySet()) {
                  if (an.getClassNode().hasMethod(name, Parameter.EMPTY_ARRAY)) {
                      unusedNames.remove(name);
                      an.setMember(name, aliasAnnotationUsage.getMember(name));
                  }
              }
          }
  
          if (!unusedNames.isEmpty()) {
              String message = "Annotation collector got unmapped names "+unusedNames.toString()+".";
              addError(message, aliasAnnotationUsage, source);
          }
  
          return ret;
      }
docs: Implementation method of the alias annotation processor. This method will
  get the list of annotations we aliased from the collector and adds it to
  aliasAnnotationUsage. The method will also map all members from
  aliasAnnotationUsage to the aliased nodes. Should a member stay unmapped,
  we will ad an error. Further processing of those members is done by the
  annotations.
  
  @param collector                 reference to the annotation with {@link AnnotationCollector}
  @param aliasAnnotationUsage      reference to the place of usage of the alias
  @param aliasAnnotated            reference to the node that has been annotated by the alias
  @param source                    source unit for error reporting
  @return list of the new AnnotationNodes