< prev index next >

src/share/vm/classfile/classFileParser.cpp

Print this page

        

@@ -1715,10 +1715,25 @@
           group_index = 0; // default contended group
         }
       }
       coll->set_contended_group(group_index);
     }
+    // The Accessor-Annotation specifies the field name it
+    // belongs to. The index of the symbol is later stored in 
+    // the method.
+    if (id == AnnotationCollector::_method_Accessor_Method) {
+      u2 group_index = 0; 
+      if (count == 1
+          && s_size == (index - index0)  // match size
+          && s_tag_val == *(abase + tag_off)
+          && member == vmSymbols::value_name()) {
+        group_index = Bytes::get_Java_u2(abase + s_con_off);
+        if (_cp->symbol_at(group_index)->utf8_length() != 0) {
+          coll->set_accessor_field_name(group_index);
+        }
+      }
+    }
   }
 }
 
 ClassFileParser::AnnotationCollector::ID
 ClassFileParser::AnnotationCollector::annotation_index(ClassLoaderData* loader_data,

@@ -1755,10 +1770,13 @@
     return _method_LambdaForm_Hidden;
   case vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_internal_HotSpotIntrinsicCandidate_signature):
     if (_location != _in_method)  break;  // only allow for methods
     if (!privileged)              break;  // only allow in privileged code
     return _method_HotSpotIntrinsicCandidate;
+  case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_reflect_Accessor_signature):
+    if (_location != _in_method)  break;  // only allow for methods
+    return _method_Accessor_Method;
 #if INCLUDE_JVMCI
   case vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_vm_ci_hotspot_Stable_signature):
     if (_location != _in_field)   break;  // only allow for fields
     if (!privileged)              break;  // only allow in privileged code
     return _field_Stable;

@@ -1802,10 +1820,13 @@
     m->set_intrinsic_id(vmIntrinsics::_compiledLambdaForm);
   if (has_annotation(_method_LambdaForm_Hidden))
     m->set_hidden(true);
   if (has_annotation(_method_HotSpotIntrinsicCandidate) && !m->is_synthetic())
     m->set_intrinsic_candidate(true);
+  if (is_accessor()) {
+    m->set_accessor_field_name(accessor_field_name());
+  }
 }
 
 void ClassFileParser::ClassAnnotationCollector::apply_to(instanceKlassHandle k) {
   k->set_is_contended(is_contended());
 }
< prev index next >