1
2
3
4
5
6 package mockit.internal.reflection;
7
8 import static mockit.internal.reflection.ParameterReflection.NO_PARAMETERS;
9
10 import edu.umd.cs.findbugs.annotations.NonNull;
11 import edu.umd.cs.findbugs.annotations.Nullable;
12
13 import java.lang.reflect.InvocationTargetException;
14 import java.lang.reflect.Method;
15
16 public final class AnnotationReflection {
17 private AnnotationReflection() {
18 }
19
20 @NonNull
21 public static String readAnnotationAttribute(@NonNull Object annotationInstance, @NonNull String attributeName) {
22 try {
23 return readAttribute(annotationInstance, attributeName);
24 } catch (NoSuchMethodException e) {
25 throw new RuntimeException(e);
26 }
27 }
28
29 @Nullable
30 public static String readAnnotationAttributeIfAvailable(@NonNull Object annotationInstance,
31 @NonNull String attributeName) {
32 try {
33 return readAttribute(annotationInstance, attributeName);
34 } catch (NoSuchMethodException e) {
35 return null;
36 }
37 }
38
39 @NonNull
40 private static String readAttribute(@NonNull Object annotationInstance, @NonNull String attributeName)
41 throws NoSuchMethodException {
42 try {
43 Method publicMethod = annotationInstance.getClass().getMethod(attributeName, NO_PARAMETERS);
44 return (String) publicMethod.invoke(annotationInstance);
45 } catch (IllegalAccessException | InvocationTargetException e) {
46 throw new RuntimeException(e instanceof InvocationTargetException ? e.getCause() : e);
47 }
48 }
49 }