src/share/vm/runtime/reflection.cpp

Print this page




 812   if (intern_name) {
 813     // intern_name is only true with UseNewReflection
 814     oop name_oop = StringTable::intern(field_name, CHECK_NULL);
 815     name = Handle(THREAD, name_oop);
 816   } else {
 817     name = java_lang_String::create_from_symbol(field_name, CHECK_NULL);
 818   }
 819   Symbol*  signature  = fd->signature();
 820   KlassHandle  holder    (THREAD, fd->field_holder());
 821   Handle type = new_type(signature, holder, CHECK_NULL);
 822   Handle rh  = java_lang_reflect_Field::create(CHECK_NULL);
 823 
 824   java_lang_reflect_Field::set_clazz(rh(), Klass::cast(fd->field_holder())->java_mirror());
 825   java_lang_reflect_Field::set_slot(rh(), fd->index());
 826   java_lang_reflect_Field::set_name(rh(), name());
 827   java_lang_reflect_Field::set_type(rh(), type());
 828   // Note the ACC_ANNOTATION bit, which is a per-class access flag, is never set here.
 829   java_lang_reflect_Field::set_modifiers(rh(), fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS);
 830   java_lang_reflect_Field::set_override(rh(), false);
 831   if (java_lang_reflect_Field::has_signature_field() &&
 832       fd->generic_signature() != NULL) {
 833     Symbol*  gs = fd->generic_signature();
 834     Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL);
 835     java_lang_reflect_Field::set_signature(rh(), sig());
 836   }
 837   if (java_lang_reflect_Field::has_annotations_field()) {
 838     java_lang_reflect_Field::set_annotations(rh(), fd->annotations());
 839   }
 840   return rh();
 841 }
 842 
 843 
 844 methodHandle Reflection::resolve_interface_call(instanceKlassHandle klass, methodHandle method,
 845                                                 KlassHandle recv_klass, Handle receiver, TRAPS) {
 846   assert(!method.is_null() , "method should not be null");
 847 
 848   CallInfo info;
 849   Symbol*  signature  = method->signature();
 850   Symbol*  name       = method->name();
 851   LinkResolver::resolve_interface_call(info, receiver, recv_klass, klass,
 852                                        name, signature,




 812   if (intern_name) {
 813     // intern_name is only true with UseNewReflection
 814     oop name_oop = StringTable::intern(field_name, CHECK_NULL);
 815     name = Handle(THREAD, name_oop);
 816   } else {
 817     name = java_lang_String::create_from_symbol(field_name, CHECK_NULL);
 818   }
 819   Symbol*  signature  = fd->signature();
 820   KlassHandle  holder    (THREAD, fd->field_holder());
 821   Handle type = new_type(signature, holder, CHECK_NULL);
 822   Handle rh  = java_lang_reflect_Field::create(CHECK_NULL);
 823 
 824   java_lang_reflect_Field::set_clazz(rh(), Klass::cast(fd->field_holder())->java_mirror());
 825   java_lang_reflect_Field::set_slot(rh(), fd->index());
 826   java_lang_reflect_Field::set_name(rh(), name());
 827   java_lang_reflect_Field::set_type(rh(), type());
 828   // Note the ACC_ANNOTATION bit, which is a per-class access flag, is never set here.
 829   java_lang_reflect_Field::set_modifiers(rh(), fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS);
 830   java_lang_reflect_Field::set_override(rh(), false);
 831   if (java_lang_reflect_Field::has_signature_field() &&
 832       fd->has_generic_signature()) {
 833     Symbol*  gs = fd->generic_signature();
 834     Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL);
 835     java_lang_reflect_Field::set_signature(rh(), sig());
 836   }
 837   if (java_lang_reflect_Field::has_annotations_field()) {
 838     java_lang_reflect_Field::set_annotations(rh(), fd->annotations());
 839   }
 840   return rh();
 841 }
 842 
 843 
 844 methodHandle Reflection::resolve_interface_call(instanceKlassHandle klass, methodHandle method,
 845                                                 KlassHandle recv_klass, Handle receiver, TRAPS) {
 846   assert(!method.is_null() , "method should not be null");
 847 
 848   CallInfo info;
 849   Symbol*  signature  = method->signature();
 850   Symbol*  name       = method->name();
 851   LinkResolver::resolve_interface_call(info, receiver, recv_klass, klass,
 852                                        name, signature,