< prev index next >

src/share/vm/classfile/classFileParser.hpp

Print this page




 114     _inner_classes = NULL;
 115     _local_interfaces = NULL;
 116     _transitive_interfaces = NULL;
 117     _combined_annotations = NULL;
 118     _annotations = _type_annotations = NULL;
 119     _fields_annotations = _fields_type_annotations = NULL;
 120   }
 121 
 122   class AnnotationCollector {
 123   public:
 124     enum Location { _in_field, _in_method, _in_class };
 125     enum ID {
 126       _unknown = 0,
 127       _method_CallerSensitive,
 128       _method_ForceInline,
 129       _method_DontInline,
 130       _method_InjectedProfile,
 131       _method_LambdaForm_Compiled,
 132       _method_LambdaForm_Hidden,
 133       _method_HotSpotIntrinsicCandidate,

 134       _sun_misc_Contended,
 135       _field_Stable,
 136       _annotation_LIMIT
 137     };
 138     const Location _location;
 139     int _annotations_present;
 140     u2 _contended_group;

 141 
 142     AnnotationCollector(Location location)
 143     : _location(location), _annotations_present(0)
 144     {
 145       assert((int)_annotation_LIMIT <= (int)sizeof(_annotations_present) * BitsPerByte, "");
 146     }
 147     // If this annotation name has an ID, report it (or _none).
 148     ID annotation_index(ClassLoaderData* loader_data, Symbol* name);
 149     // Set the annotation name:
 150     void set_annotation(ID id) {
 151       assert((int)id >= 0 && (int)id < (int)_annotation_LIMIT, "oob");
 152       _annotations_present |= nth_bit((int)id);
 153     }
 154 
 155     void remove_annotation(ID id) {
 156       assert((int)id >= 0 && (int)id < (int)_annotation_LIMIT, "oob");
 157       _annotations_present &= ~nth_bit((int)id);
 158     }
 159 
 160     // Report if the annotation is present.
 161     bool has_any_annotations() const { return _annotations_present != 0; }
 162     bool has_annotation(ID id) const { return (nth_bit((int)id) & _annotations_present) != 0; }
 163 
 164     void set_contended_group(u2 group) { _contended_group = group; }
 165     u2 contended_group() const { return _contended_group; }
 166 
 167     bool is_contended() const { return has_annotation(_sun_misc_Contended); }
 168 
 169     void set_stable(bool stable) { set_annotation(_field_Stable); }
 170     bool is_stable() const { return has_annotation(_field_Stable); }






 171   };
 172 
 173   // This class also doubles as a holder for metadata cleanup.
 174   class FieldAnnotationCollector: public AnnotationCollector {
 175     ClassLoaderData* _loader_data;
 176     AnnotationArray* _field_annotations;
 177     AnnotationArray* _field_type_annotations;
 178   public:
 179     FieldAnnotationCollector(ClassLoaderData* loader_data) :
 180                                  AnnotationCollector(_in_field),
 181                                  _loader_data(loader_data),
 182                                  _field_annotations(NULL),
 183                                  _field_type_annotations(NULL) {}
 184     void apply_to(FieldInfo* f);
 185     ~FieldAnnotationCollector();
 186     AnnotationArray* field_annotations()      { return _field_annotations; }
 187     AnnotationArray* field_type_annotations() { return _field_type_annotations; }
 188 
 189     void set_field_annotations(AnnotationArray* a)      { _field_annotations = a; }
 190     void set_field_type_annotations(AnnotationArray* a) { _field_type_annotations = a; }




 114     _inner_classes = NULL;
 115     _local_interfaces = NULL;
 116     _transitive_interfaces = NULL;
 117     _combined_annotations = NULL;
 118     _annotations = _type_annotations = NULL;
 119     _fields_annotations = _fields_type_annotations = NULL;
 120   }
 121 
 122   class AnnotationCollector {
 123   public:
 124     enum Location { _in_field, _in_method, _in_class };
 125     enum ID {
 126       _unknown = 0,
 127       _method_CallerSensitive,
 128       _method_ForceInline,
 129       _method_DontInline,
 130       _method_InjectedProfile,
 131       _method_LambdaForm_Compiled,
 132       _method_LambdaForm_Hidden,
 133       _method_HotSpotIntrinsicCandidate,
 134       _method_Accessor_Method,
 135       _sun_misc_Contended,
 136       _field_Stable,
 137       _annotation_LIMIT
 138     };
 139     const Location _location;
 140           int      _annotations_present;
 141           u2       _contended_group;
 142           u2       _accessor_field_name;
 143 
 144     AnnotationCollector(Location location)
 145     : _location(location), _annotations_present(0)
 146     {
 147       assert((int)_annotation_LIMIT <= (int)sizeof(_annotations_present) * BitsPerByte, "");
 148     }
 149     // If this annotation name has an ID, report it (or _none).
 150     ID annotation_index(ClassLoaderData* loader_data, Symbol* name);
 151     // Set the annotation name:
 152     void set_annotation(ID id) {
 153       assert((int)id >= 0 && (int)id < (int)_annotation_LIMIT, "oob");
 154       _annotations_present |= nth_bit((int)id);
 155     }
 156 
 157     void remove_annotation(ID id) {
 158       assert((int)id >= 0 && (int)id < (int)_annotation_LIMIT, "oob");
 159       _annotations_present &= ~nth_bit((int)id);
 160     }
 161 
 162     // Report if the annotation is present.
 163     bool has_any_annotations() const { return _annotations_present != 0; }
 164     bool has_annotation(ID id) const { return (nth_bit((int)id) & _annotations_present) != 0; }
 165 
 166     void set_contended_group(u2 group) { _contended_group = group; }
 167     u2 contended_group() const { return _contended_group; }
 168 
 169     bool is_contended() const { return has_annotation(_sun_misc_Contended); }
 170 
 171     void set_stable(bool stable) { set_annotation(_field_Stable); }
 172     bool is_stable() const { return has_annotation(_field_Stable); }
 173     
 174     void set_accessor_field_name(u2 fname) { _accessor_field_name = fname; }
 175     u2 accessor_field_name() { return _accessor_field_name; }
 176     
 177     bool is_accessor() const { return has_annotation(_method_Accessor_Method); }
 178     
 179   };
 180 
 181   // This class also doubles as a holder for metadata cleanup.
 182   class FieldAnnotationCollector: public AnnotationCollector {
 183     ClassLoaderData* _loader_data;
 184     AnnotationArray* _field_annotations;
 185     AnnotationArray* _field_type_annotations;
 186   public:
 187     FieldAnnotationCollector(ClassLoaderData* loader_data) :
 188                                  AnnotationCollector(_in_field),
 189                                  _loader_data(loader_data),
 190                                  _field_annotations(NULL),
 191                                  _field_type_annotations(NULL) {}
 192     void apply_to(FieldInfo* f);
 193     ~FieldAnnotationCollector();
 194     AnnotationArray* field_annotations()      { return _field_annotations; }
 195     AnnotationArray* field_type_annotations() { return _field_type_annotations; }
 196 
 197     void set_field_annotations(AnnotationArray* a)      { _field_annotations = a; }
 198     void set_field_type_annotations(AnnotationArray* a) { _field_type_annotations = a; }


< prev index next >