public static AnnotationSpec get(Annotation annotation, boolean includeDefaultValues) { Builder builder = builder(annotation.annotationType()); try { Method[] methods = annotation.annotationType().getDeclaredMethods(); Arrays.sort(methods, Comparator.comparing(Method::getName)); for (Method method : methods) { Object value = method.invoke(annotation); if (!includeDefaultValues) { if (Objects.deepEquals(value, method.getDefaultValue())) { continue; } } if (value.getClass().isArray()) { for (int i = 0; i < Array.getLength(value); i++) { builder.addMemberForValue(method.getName(), Array.get(value, i)); } continue; } if (value instanceof Annotation) { builder.addMember(method.getName(), "$L", get((Annotation) value)); continue; } builder.addMemberForValue(method.getName(), value); } } catch (Exception e) { throw new RuntimeException("Reflecting " + annotation + " failed!", e); } return builder.build(); }
builder.addMemberForValue(method.getName(), Array.get(value, i)); continue; builder.addMemberForValue(method.getName(), value);
builder.addMemberForValue(method.getName(), Array.get(value, i)); continue; builder.addMemberForValue(method.getName(), value);
@Override protected Builder defaultAction(Object o, String name) { return builder.addMemberForValue(name, o); }
@Override protected Builder defaultAction(Object o, String name) { return builder.addMemberForValue(name, o); }
@Override protected Builder defaultAction(Object o, String name) { return builder.addMemberForValue(name, o); }