< prev index next >

src/share/vm/runtime/fieldDescriptor.hpp

Print this page

        

@@ -38,35 +38,78 @@
 class fieldDescriptor VALUE_OBJ_CLASS_SPEC {
  private:
   AccessFlags         _access_flags;
   int                 _index; // the field index
   constantPoolHandle  _cp;
+  u2                   _putAccessor;
+  u2                   _getAccessor;
+  bool                _is_accessor;
+  u2                  _field_name_from_accessor;
+  FieldInfo*          _accessor_info;
+  Symbol*             _sig_for_accessor;
+  
 
   // update the access_flags for the field in the klass
   void update_klass_field_access_flag() {
     InstanceKlass* ik = field_holder();
     ik->field(index())->set_access_flags(_access_flags.as_short());
   }
 
   FieldInfo* field() const {
+    if (_is_accessor) {
+      return _accessor_info;
+    }else {
     InstanceKlass* ik = field_holder();
     return ik->field(_index);
   }
+  }
 
  public:
   fieldDescriptor() {
     DEBUG_ONLY(_index = badInt);
+    _is_accessor = false;
+    _index = -1;
+    _accessor_info = NULL;
   }
   fieldDescriptor(InstanceKlass* ik, int index) {
     DEBUG_ONLY(_index = badInt);
     reinitialize(ik, index);
   }
+  
+  void set_sig_for_accessor(Symbol* sig) {
+      this->_sig_for_accessor = sig;
+  }
+  
+  void set_field_name_from_accessor(u2 field_name_from_accessor) {
+    this->_field_name_from_accessor = field_name_from_accessor;
+  }
+  
+  bool is_accessor() {
+    return _is_accessor;
+  }
+  
+  u2 get_get_accessor() {
+    return _getAccessor;
+  }
+  
+  u2 get_put_accessor() {
+    return _putAccessor;
+  }
+  
+  void set_get_accessor(u2 index) {
+    _getAccessor = index;
+  }
+  
+  void set_put_accessor(u2 index) {
+    _putAccessor = index;
+  }
+  
   Symbol* name() const {
-    return field()->name(_cp);
+    return _is_accessor ? constants()->symbol_at(_field_name_from_accessor) :  field()->name(_cp);
   }
   Symbol* signature() const {
-    return field()->signature(_cp);
+    return _is_accessor ? _sig_for_accessor : field()->signature(_cp);
   }
   InstanceKlass* field_holder()   const    { return _cp->pool_holder(); }
   ConstantPool* constants()       const    { return _cp(); }
   AccessFlags access_flags()      const    { return _access_flags; }
   oop loader()                    const;

@@ -118,10 +161,11 @@
     update_klass_field_access_flag();
   }
 
   // Initialization
   void reinitialize(InstanceKlass* ik, int index);
+  void reinitialize_accessor(InstanceKlass* ik);
 
   // Print
   void print() { print_on(tty); }
   void print_on(outputStream* st) const         PRODUCT_RETURN;
   void print_on_for(outputStream* st, oop obj)  PRODUCT_RETURN;
< prev index next >