1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.modeshape.sequencer.classfile.metadata;
25
26 import java.util.Collections;
27 import java.util.HashMap;
28 import java.util.Map;
29 import java.util.Set;
30 import javassist.bytecode.annotation.Annotation;
31 import net.jcip.annotations.Immutable;
32
33 @Immutable
34 public class AnnotationMetadata {
35
36 private final String annotationClassName;
37 private final Map<String, String> memberValues;
38
39 @SuppressWarnings( "unchecked" )
40 AnnotationMetadata( Annotation annotation ) {
41 this.annotationClassName = annotation.getTypeName();
42
43 Set<Object> memberNames = annotation.getMemberNames();
44 if (memberNames != null) {
45 Map<String, String> members = new HashMap<String, String>(memberNames.size());
46
47 for (Object rawMemberName : memberNames) {
48 String memberName = (String)rawMemberName;
49
50 members.put(memberName, annotation.getMemberValue(memberName).toString());
51 }
52
53 this.memberValues = Collections.unmodifiableMap(members);
54 } else {
55 this.memberValues = Collections.emptyMap();
56 }
57 }
58
59 public String getAnnotationClassName() {
60 return annotationClassName;
61 }
62
63 public Map<String, String> getMemberValues() {
64 return memberValues;
65 }
66
67 @Override
68 public String toString() {
69 StringBuilder buff = new StringBuilder();
70
71 buff.append('@').append(annotationClassName);
72
73 if (!memberValues.isEmpty()) {
74 buff.append('(');
75
76 boolean first = true;
77 for (Map.Entry<String, String> entry : memberValues.entrySet()) {
78 if (first) {
79 first = false;
80 } else {
81 buff.append(", ");
82 }
83 buff.append(entry.getKey()).append('=').append(entry.getValue());
84 }
85
86 buff.append(')');
87 }
88
89 return buff.toString();
90 }
91
92 }