code: private static String encodeAnnotationValue(Object value) {
          // Values of annotation elements must not be "null"
          if (null != value) {
              if (value instanceof String) {
                  return readStringValue(value);
              } else if (value instanceof Number) {
                  return readNumberValue(value);
              } else if (value.getClass().isArray()) {
                  // workaround for ClassCastException: [Ljava.lang.Object; cannot be cast to [I
                  // ignore empty arrays, because it becomes Object[]
                  if (Array.getLength(value) > 0) {
                      return readArrayValue(value);
                  }
                  return null;
              } else if (value instanceof Annotation) {
                  return getAnnotationAsString((Annotation) value);
              } else if (value instanceof Boolean) {
                  return readBooleanValue((Boolean) value);
              } else if (value instanceof Class) {
                  return readClassValue((Class) value);
              }
          }
  
          throw new IllegalArgumentException("Unsupported value for encodeAnnotationValue: " + value);
      }
docs: Returns the string representation of {@code value} or {@code null}, if the element should not be added.
  
  @param value
  @return