docs: @Requires({
      "parent != null",
      "annotation != null",
      "owner != null",
      "utils.isContractAnnotation(annotation)"
    })
    @Ensures("result != null")
    private ContractAnnotationModel createBlankContractModel(Element parent,
        AnnotationMirror annotation, boolean primary, ClassName owner) {
      ElementKind kind = utils.getAnnotationKindForName(annotation);
  
      boolean virtual;
      TypeName returnType;
      switch (parent.getKind()) {
        default:
          virtual =
              parent.getKind()
              != javax.lang.model.element.ElementKind.INTERFACE;
          returnType = null;
          break;
        case CONSTRUCTOR:
        case METHOD:
          virtual =
              parent.getEnclosingElement().getKind()
              != javax.lang.model.element.ElementKind.INTERFACE;
          ExecutableElement method = (ExecutableElement) parent;
          switch (method.getReturnType().getKind()) {
            case VOID:
              /* For void methods. */
              returnType = utils.getTypeNameForType(method.getReturnType());
              break;
            case NONE:
              /* For constructors. */
              returnType = null;
              break;
            case PACKAGE:
              /* Should not happen. */
              throw new RuntimeException(
                  "ExecutableElement has PACKAGE return type");
            default:
              returnType = utils.getTypeNameForType(
                  utils.typeUtils.erasure(method.getReturnType()));
          }
      }
  
      return new ContractAnnotationModel(kind, primary, virtual,
                                         owner, returnType);
    }