< prev index next >

src/hotspot/share/runtime/reflection.cpp

Print this page




 949   }
 950   return ch();
 951 }
 952 
 953 
 954 oop Reflection::new_field(fieldDescriptor* fd, TRAPS) {
 955   Symbol*  field_name = fd->name();
 956   oop name_oop = StringTable::intern(field_name, CHECK_NULL);
 957   Handle name = Handle(THREAD, name_oop);
 958   Symbol*  signature  = fd->signature();
 959   InstanceKlass* holder = fd->field_holder();
 960   Handle type = new_type(signature, holder, CHECK_NULL);
 961   Handle rh  = java_lang_reflect_Field::create(CHECK_NULL);
 962 
 963   java_lang_reflect_Field::set_clazz(rh(), fd->field_holder()->java_mirror());
 964   java_lang_reflect_Field::set_slot(rh(), fd->index());
 965   java_lang_reflect_Field::set_name(rh(), name());
 966   java_lang_reflect_Field::set_type(rh(), type());
 967   // Note the ACC_ANNOTATION bit, which is a per-class access flag, is never set here.
 968   int modifiers = fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS;



 969   if (fd->is_flattened()) {
 970     java_lang_reflect_Field::set_modifiers(rh(), modifiers | JVM_ACC_FIELD_FLATTENED);
 971   } else {
 972     java_lang_reflect_Field::set_modifiers(rh(), modifiers);
 973   }
 974 
 975   java_lang_reflect_Field::set_override(rh(), false);
 976   if (java_lang_reflect_Field::has_signature_field() &&
 977       fd->has_generic_signature()) {
 978     Symbol*  gs = fd->generic_signature();
 979     Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL);
 980     java_lang_reflect_Field::set_signature(rh(), sig());
 981   }
 982   if (java_lang_reflect_Field::has_annotations_field()) {
 983     typeArrayOop an_oop = Annotations::make_java_array(fd->annotations(), CHECK_NULL);
 984     java_lang_reflect_Field::set_annotations(rh(), an_oop);
 985   }
 986   if (java_lang_reflect_Field::has_type_annotations_field()) {
 987     typeArrayOop an_oop = Annotations::make_java_array(fd->type_annotations(), CHECK_NULL);
 988     java_lang_reflect_Field::set_type_annotations(rh(), an_oop);
 989   }
 990   return rh();
 991 }
 992 
 993 oop Reflection::new_parameter(Handle method, int index, Symbol* sym,
 994                               int flags, TRAPS) {




 949   }
 950   return ch();
 951 }
 952 
 953 
 954 oop Reflection::new_field(fieldDescriptor* fd, TRAPS) {
 955   Symbol*  field_name = fd->name();
 956   oop name_oop = StringTable::intern(field_name, CHECK_NULL);
 957   Handle name = Handle(THREAD, name_oop);
 958   Symbol*  signature  = fd->signature();
 959   InstanceKlass* holder = fd->field_holder();
 960   Handle type = new_type(signature, holder, CHECK_NULL);
 961   Handle rh  = java_lang_reflect_Field::create(CHECK_NULL);
 962 
 963   java_lang_reflect_Field::set_clazz(rh(), fd->field_holder()->java_mirror());
 964   java_lang_reflect_Field::set_slot(rh(), fd->index());
 965   java_lang_reflect_Field::set_name(rh(), name());
 966   java_lang_reflect_Field::set_type(rh(), type());
 967   // Note the ACC_ANNOTATION bit, which is a per-class access flag, is never set here.
 968   int modifiers = fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS;
 969   if (fd->is_flattenable()) {
 970     modifiers |= JVM_ACC_FLATTENABLE;
 971   }
 972   if (fd->is_flattened()) {
 973     modifiers |= JVM_ACC_FIELD_FLATTENED;


 974   }
 975   java_lang_reflect_Field::set_modifiers(rh(), modifiers);
 976   java_lang_reflect_Field::set_override(rh(), false);
 977   if (java_lang_reflect_Field::has_signature_field() &&
 978       fd->has_generic_signature()) {
 979     Symbol*  gs = fd->generic_signature();
 980     Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL);
 981     java_lang_reflect_Field::set_signature(rh(), sig());
 982   }
 983   if (java_lang_reflect_Field::has_annotations_field()) {
 984     typeArrayOop an_oop = Annotations::make_java_array(fd->annotations(), CHECK_NULL);
 985     java_lang_reflect_Field::set_annotations(rh(), an_oop);
 986   }
 987   if (java_lang_reflect_Field::has_type_annotations_field()) {
 988     typeArrayOop an_oop = Annotations::make_java_array(fd->type_annotations(), CHECK_NULL);
 989     java_lang_reflect_Field::set_type_annotations(rh(), an_oop);
 990   }
 991   return rh();
 992 }
 993 
 994 oop Reflection::new_parameter(Handle method, int index, Symbol* sym,
 995                               int flags, TRAPS) {


< prev index next >