code: @Requires({
      "parent != null",
      "annotation != null",
      "owner != null",
      "p != null"
    })
    protected void visitAnnotation(
        Element parent, AnnotationMirror annotation,
        boolean primary, ClassName owner, ElementModel p) {
      if (utils.isContractAnnotation(annotation)) {
        ContractAnnotationModel model =
            createContractModel(parent, annotation, primary, owner);
        if (model != null) {
          p.addEnclosedElement(model);
        }
      }
    }
docs: Visits an annotation and adds a corresponding node to the
  specified Element.
  
  Despite the name, this method is not inherited through any
  visitor interface. It is not intended for external calls.
  
  @param parent the target of the annotation
  @param annotation the annotation
  @param primary whether this is a primary contract annotation
  @param owner the owner of this annotation
  @param p the element to add the created annotation to
  
  @see ContractAnnotationModel