hotspot/src/share/vm/runtime/fieldDescriptor.cpp
changeset 10546 e79347eebbc5
parent 7397 5b173b4ca846
child 12772 d317e5e08194
equal deleted inserted replaced
10545:fec876499aae 10546:e79347eebbc5
    40 typeArrayOop fieldDescriptor::annotations() const {
    40 typeArrayOop fieldDescriptor::annotations() const {
    41   instanceKlass* ik = instanceKlass::cast(field_holder());
    41   instanceKlass* ik = instanceKlass::cast(field_holder());
    42   objArrayOop md = ik->fields_annotations();
    42   objArrayOop md = ik->fields_annotations();
    43   if (md == NULL)
    43   if (md == NULL)
    44     return NULL;
    44     return NULL;
    45   assert((index() % instanceKlass::next_offset) == 0, "");
    45   return typeArrayOop(md->obj_at(index()));
    46   return typeArrayOop(md->obj_at(index() / instanceKlass::next_offset));
       
    47 }
    46 }
    48 
    47 
    49 constantTag fieldDescriptor::initial_value_tag() const {
    48 constantTag fieldDescriptor::initial_value_tag() const {
    50   return constants()->tag_at(_initial_value_index);
    49   return constants()->tag_at(initial_value_index());
    51 }
    50 }
    52 
    51 
    53 jint fieldDescriptor::int_initial_value() const {
    52 jint fieldDescriptor::int_initial_value() const {
    54   return constants()->int_at(_initial_value_index);
    53   return constants()->int_at(initial_value_index());
    55 }
    54 }
    56 
    55 
    57 jlong fieldDescriptor::long_initial_value() const {
    56 jlong fieldDescriptor::long_initial_value() const {
    58   return constants()->long_at(_initial_value_index);
    57   return constants()->long_at(initial_value_index());
    59 }
    58 }
    60 
    59 
    61 jfloat fieldDescriptor::float_initial_value() const {
    60 jfloat fieldDescriptor::float_initial_value() const {
    62   return constants()->float_at(_initial_value_index);
    61   return constants()->float_at(initial_value_index());
    63 }
    62 }
    64 
    63 
    65 jdouble fieldDescriptor::double_initial_value() const {
    64 jdouble fieldDescriptor::double_initial_value() const {
    66   return constants()->double_at(_initial_value_index);
    65   return constants()->double_at(initial_value_index());
    67 }
    66 }
    68 
    67 
    69 oop fieldDescriptor::string_initial_value(TRAPS) const {
    68 oop fieldDescriptor::string_initial_value(TRAPS) const {
    70   return constants()->string_at(_initial_value_index, CHECK_0);
    69   return constants()->string_at(initial_value_index(), CHECK_0);
    71 }
    70 }
    72 
    71 
    73 void fieldDescriptor::initialize(klassOop k, int index) {
    72 void fieldDescriptor::initialize(klassOop k, int index) {
    74   instanceKlass* ik = instanceKlass::cast(k);
    73   instanceKlass* ik = instanceKlass::cast(k);
    75   _cp = ik->constants();
    74   _cp = ik->constants();
    76   typeArrayOop fields = ik->fields();
    75   FieldInfo* f = ik->field(index);
       
    76   assert(!f->is_internal(), "regular Java fields only");
    77 
    77 
    78   assert(fields->length() % instanceKlass::next_offset == 0, "Illegal size of field array");
    78   _access_flags = accessFlags_from(f->access_flags());
    79   assert(fields->length() >= index + instanceKlass::next_offset, "Illegal size of field array");
    79   guarantee(f->name_index() != 0 && f->signature_index() != 0, "bad constant pool index for fieldDescriptor");
    80 
       
    81   _access_flags.set_field_flags(fields->ushort_at(index + instanceKlass::access_flags_offset));
       
    82   _name_index = fields->ushort_at(index + instanceKlass::name_index_offset);
       
    83   _signature_index = fields->ushort_at(index + instanceKlass::signature_index_offset);
       
    84   _initial_value_index = fields->ushort_at(index + instanceKlass::initval_index_offset);
       
    85   guarantee(_name_index != 0 && _signature_index != 0, "bad constant pool index for fieldDescriptor");
       
    86   _offset = ik->offset_from_fields( index );
       
    87   _generic_signature_index = fields->ushort_at(index + instanceKlass::generic_signature_offset);
       
    88   _index = index;
    80   _index = index;
    89 }
    81 }
    90 
    82 
    91 #ifndef PRODUCT
    83 #ifndef PRODUCT
    92 
    84 
    93 void fieldDescriptor::print_on(outputStream* st) const {
    85 void fieldDescriptor::print_on(outputStream* st) const {
    94   _access_flags.print_on(st);
    86   access_flags().print_on(st);
    95   constants()->symbol_at(_name_index)->print_value_on(st);
    87   name()->print_value_on(st);
    96   st->print(" ");
    88   st->print(" ");
    97   constants()->symbol_at(_signature_index)->print_value_on(st);
    89   signature()->print_value_on(st);
    98   st->print(" @%d ", offset());
    90   st->print(" @%d ", offset());
    99   if (WizardMode && has_initial_value()) {
    91   if (WizardMode && has_initial_value()) {
   100     st->print("(initval ");
    92     st->print("(initval ");
   101     constantTag t = initial_value_tag();
    93     constantTag t = initial_value_tag();
   102     if (t.is_int()) {
    94     if (t.is_int()) {