Mercurial > hg > truffle
comparison src/share/vm/oops/annotations.hpp @ 7457:35431a769282
8004823: Add VM support for type annotation reflection
Reviewed-by: dholmes, coleenp
Contributed-by: joel.franck@oracle.com
author | stefank |
---|---|
date | Thu, 20 Dec 2012 10:22:19 +0100 |
parents | da91efe96a93 |
children | 16fb9f942703 |
comparison
equal
deleted
inserted
replaced
7456:7d42f3b08300 | 7457:35431a769282 |
---|---|
36 class outputStream; | 36 class outputStream; |
37 | 37 |
38 typedef Array<u1> AnnotationArray; | 38 typedef Array<u1> AnnotationArray; |
39 | 39 |
40 // Class to hold the various types of annotations. The only metadata that points | 40 // Class to hold the various types of annotations. The only metadata that points |
41 // to this is InstanceKlass. | 41 // to this is InstanceKlass, or another Annotations instance if this is a |
42 // a type_annotation instance. | |
42 | 43 |
43 class Annotations: public MetaspaceObj { | 44 class Annotations: public MetaspaceObj { |
44 | 45 |
45 // Annotations for this class, or null if none. | 46 // Annotations for this class, or null if none. |
46 AnnotationArray* _class_annotations; | 47 AnnotationArray* _class_annotations; |
56 Array<AnnotationArray*>* _methods_parameter_annotations; | 57 Array<AnnotationArray*>* _methods_parameter_annotations; |
57 // Annotation objects (byte arrays) for methods' default values, or null if no | 58 // Annotation objects (byte arrays) for methods' default values, or null if no |
58 // such annotations. | 59 // such annotations. |
59 // Index is the idnum, which is initially the same as the methods array index. | 60 // Index is the idnum, which is initially the same as the methods array index. |
60 Array<AnnotationArray*>* _methods_default_annotations; | 61 Array<AnnotationArray*>* _methods_default_annotations; |
62 // Type annotations for this class, or null if none. | |
63 Annotations* _type_annotations; | |
61 | 64 |
62 // Constructor where some some values are known to not be null | 65 // Constructor where some some values are known to not be null |
63 Annotations(Array<AnnotationArray*>* fa, Array<AnnotationArray*>* ma, | 66 Annotations(Array<AnnotationArray*>* fa, Array<AnnotationArray*>* ma, |
64 Array<AnnotationArray*>* mpa, Array<AnnotationArray*>* mda) : | 67 Array<AnnotationArray*>* mpa, Array<AnnotationArray*>* mda) : |
65 _class_annotations(NULL), | 68 _class_annotations(NULL), |
66 _fields_annotations(fa), | 69 _fields_annotations(fa), |
67 _methods_annotations(ma), | 70 _methods_annotations(ma), |
68 _methods_parameter_annotations(mpa), | 71 _methods_parameter_annotations(mpa), |
69 _methods_default_annotations(mda) {} | 72 _methods_default_annotations(mda), |
73 _type_annotations(NULL) {} | |
70 | 74 |
71 public: | 75 public: |
72 // Allocate instance of this class | 76 // Allocate instance of this class |
73 static Annotations* allocate(ClassLoaderData* loader_data, TRAPS); | 77 static Annotations* allocate(ClassLoaderData* loader_data, TRAPS); |
74 static Annotations* allocate(ClassLoaderData* loader_data, | 78 static Annotations* allocate(ClassLoaderData* loader_data, |
79 void deallocate_contents(ClassLoaderData* loader_data); | 83 void deallocate_contents(ClassLoaderData* loader_data); |
80 DEBUG_ONLY(bool on_stack() { return false; }) // for template | 84 DEBUG_ONLY(bool on_stack() { return false; }) // for template |
81 static int size() { return sizeof(Annotations) / wordSize; } | 85 static int size() { return sizeof(Annotations) / wordSize; } |
82 | 86 |
83 // Constructor to initialize to null | 87 // Constructor to initialize to null |
84 Annotations() : _class_annotations(NULL), _fields_annotations(NULL), | 88 Annotations() : _class_annotations(NULL), |
89 _fields_annotations(NULL), | |
85 _methods_annotations(NULL), | 90 _methods_annotations(NULL), |
86 _methods_parameter_annotations(NULL), | 91 _methods_parameter_annotations(NULL), |
87 _methods_default_annotations(NULL) {} | 92 _methods_default_annotations(NULL), |
93 _type_annotations(NULL) {} | |
88 | 94 |
89 AnnotationArray* class_annotations() const { return _class_annotations; } | 95 AnnotationArray* class_annotations() const { return _class_annotations; } |
90 Array<AnnotationArray*>* fields_annotations() const { return _fields_annotations; } | 96 Array<AnnotationArray*>* fields_annotations() const { return _fields_annotations; } |
91 Array<AnnotationArray*>* methods_annotations() const { return _methods_annotations; } | 97 Array<AnnotationArray*>* methods_annotations() const { return _methods_annotations; } |
92 Array<AnnotationArray*>* methods_parameter_annotations() const { return _methods_parameter_annotations; } | 98 Array<AnnotationArray*>* methods_parameter_annotations() const { return _methods_parameter_annotations; } |
93 Array<AnnotationArray*>* methods_default_annotations() const { return _methods_default_annotations; } | 99 Array<AnnotationArray*>* methods_default_annotations() const { return _methods_default_annotations; } |
100 Annotations* type_annotations() const { return _type_annotations; } | |
94 | 101 |
95 void set_class_annotations(AnnotationArray* md) { _class_annotations = md; } | 102 void set_class_annotations(AnnotationArray* md) { _class_annotations = md; } |
96 void set_fields_annotations(Array<AnnotationArray*>* md) { _fields_annotations = md; } | 103 void set_fields_annotations(Array<AnnotationArray*>* md) { _fields_annotations = md; } |
97 void set_methods_annotations(Array<AnnotationArray*>* md) { _methods_annotations = md; } | 104 void set_methods_annotations(Array<AnnotationArray*>* md) { _methods_annotations = md; } |
98 void set_methods_parameter_annotations(Array<AnnotationArray*>* md) { _methods_parameter_annotations = md; } | 105 void set_methods_parameter_annotations(Array<AnnotationArray*>* md) { _methods_parameter_annotations = md; } |
99 void set_methods_default_annotations(Array<AnnotationArray*>* md) { _methods_default_annotations = md; } | 106 void set_methods_default_annotations(Array<AnnotationArray*>* md) { _methods_default_annotations = md; } |
107 void set_type_annotations(Annotations* annos) { _type_annotations = annos; } | |
100 | 108 |
101 // Redefine classes support | 109 // Redefine classes support |
102 AnnotationArray* get_method_annotations_of(int idnum) | 110 AnnotationArray* get_method_annotations_of(int idnum) |
103 { return get_method_annotations_from(idnum, _methods_annotations); } | 111 { return get_method_annotations_from(idnum, _methods_annotations); } |
104 | 112 |
127 static typeArrayOop make_java_array(AnnotationArray* annotations, TRAPS); | 135 static typeArrayOop make_java_array(AnnotationArray* annotations, TRAPS); |
128 | 136 |
129 inline AnnotationArray* get_method_annotations_from(int idnum, Array<AnnotationArray*>* annos); | 137 inline AnnotationArray* get_method_annotations_from(int idnum, Array<AnnotationArray*>* annos); |
130 void set_annotations(Array<AnnotationArray*>* md, Array<AnnotationArray*>** md_p) { *md_p = md; } | 138 void set_annotations(Array<AnnotationArray*>* md, Array<AnnotationArray*>** md_p) { *md_p = md; } |
131 | 139 |
140 bool is_klass() const { return false; } | |
132 private: | 141 private: |
133 void set_methods_annotations_of(instanceKlassHandle ik, | 142 void set_methods_annotations_of(instanceKlassHandle ik, |
134 int idnum, AnnotationArray* anno, | 143 int idnum, AnnotationArray* anno, |
135 Array<AnnotationArray*>** md_p, TRAPS); | 144 Array<AnnotationArray*>** md_p, TRAPS); |
136 | 145 |