< prev index next >

src/hotspot/share/runtime/reflection.cpp

Print this page




 881 
 882   if (exception_types.is_null()) return NULL;
 883 
 884   Symbol*  method_name = method->name();
 885   oop name_oop = StringTable::intern(method_name, CHECK_NULL);
 886   Handle name = Handle(THREAD, name_oop);
 887   if (name == NULL) return NULL;
 888 
 889   const int modifiers = method->access_flags().as_int() & JVM_RECOGNIZED_METHOD_MODIFIERS;
 890 
 891   Handle mh = java_lang_reflect_Method::create(CHECK_NULL);
 892 
 893   java_lang_reflect_Method::set_clazz(mh(), holder->java_mirror());
 894   java_lang_reflect_Method::set_slot(mh(), slot);
 895   java_lang_reflect_Method::set_name(mh(), name());
 896   java_lang_reflect_Method::set_return_type(mh(), return_type());
 897   java_lang_reflect_Method::set_parameter_types(mh(), parameter_types());
 898   java_lang_reflect_Method::set_exception_types(mh(), exception_types());
 899   java_lang_reflect_Method::set_modifiers(mh(), modifiers);
 900   java_lang_reflect_Method::set_override(mh(), false);
 901   if (java_lang_reflect_Method::has_signature_field() &&
 902       method->generic_signature() != NULL) {
 903     Symbol*  gs = method->generic_signature();
 904     Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL);
 905     java_lang_reflect_Method::set_signature(mh(), sig());
 906   }
 907   if (java_lang_reflect_Method::has_annotations_field()) {
 908     typeArrayOop an_oop = Annotations::make_java_array(method->annotations(), CHECK_NULL);
 909     java_lang_reflect_Method::set_annotations(mh(), an_oop);
 910   }
 911   if (java_lang_reflect_Method::has_parameter_annotations_field()) {
 912     typeArrayOop an_oop = Annotations::make_java_array(method->parameter_annotations(), CHECK_NULL);
 913     java_lang_reflect_Method::set_parameter_annotations(mh(), an_oop);
 914   }
 915   if (java_lang_reflect_Method::has_annotation_default_field()) {
 916     typeArrayOop an_oop = Annotations::make_java_array(method->annotation_default(), CHECK_NULL);
 917     java_lang_reflect_Method::set_annotation_default(mh(), an_oop);
 918   }
 919   if (java_lang_reflect_Method::has_type_annotations_field()) {
 920     typeArrayOop an_oop = Annotations::make_java_array(method->type_annotations(), CHECK_NULL);
 921     java_lang_reflect_Method::set_type_annotations(mh(), an_oop);
 922   }
 923   return mh();
 924 }
 925 
 926 
 927 oop Reflection::new_constructor(const methodHandle& method, TRAPS) {
 928   assert(method()->is_initializer(), "should call new_method instead");
 929 
 930   InstanceKlass* holder = method->method_holder();
 931   int slot = method->method_idnum();
 932 
 933   Symbol*  signature  = method->signature();
 934   int parameter_count = ArgumentCount(signature).size();
 935   objArrayHandle parameter_types = get_parameter_types(method, parameter_count, NULL, CHECK_NULL);
 936   if (parameter_types.is_null()) return NULL;
 937 
 938   objArrayHandle exception_types = get_exception_types(method, CHECK_NULL);
 939   if (exception_types.is_null()) return NULL;
 940 
 941   const int modifiers = method->access_flags().as_int() & JVM_RECOGNIZED_METHOD_MODIFIERS;
 942 
 943   Handle ch = java_lang_reflect_Constructor::create(CHECK_NULL);
 944 
 945   java_lang_reflect_Constructor::set_clazz(ch(), holder->java_mirror());
 946   java_lang_reflect_Constructor::set_slot(ch(), slot);
 947   java_lang_reflect_Constructor::set_parameter_types(ch(), parameter_types());
 948   java_lang_reflect_Constructor::set_exception_types(ch(), exception_types());
 949   java_lang_reflect_Constructor::set_modifiers(ch(), modifiers);
 950   java_lang_reflect_Constructor::set_override(ch(), false);
 951   if (java_lang_reflect_Constructor::has_signature_field() &&
 952       method->generic_signature() != NULL) {
 953     Symbol*  gs = method->generic_signature();
 954     Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL);
 955     java_lang_reflect_Constructor::set_signature(ch(), sig());
 956   }
 957   if (java_lang_reflect_Constructor::has_annotations_field()) {
 958     typeArrayOop an_oop = Annotations::make_java_array(method->annotations(), CHECK_NULL);
 959     java_lang_reflect_Constructor::set_annotations(ch(), an_oop);
 960   }
 961   if (java_lang_reflect_Constructor::has_parameter_annotations_field()) {
 962     typeArrayOop an_oop = Annotations::make_java_array(method->parameter_annotations(), CHECK_NULL);
 963     java_lang_reflect_Constructor::set_parameter_annotations(ch(), an_oop);
 964   }
 965   if (java_lang_reflect_Constructor::has_type_annotations_field()) {
 966     typeArrayOop an_oop = Annotations::make_java_array(method->type_annotations(), CHECK_NULL);
 967     java_lang_reflect_Constructor::set_type_annotations(ch(), an_oop);
 968   }
 969   return ch();
 970 }
 971 
 972 
 973 oop Reflection::new_field(fieldDescriptor* fd, TRAPS) {
 974   Symbol*  field_name = fd->name();
 975   oop name_oop = StringTable::intern(field_name, CHECK_NULL);
 976   Handle name = Handle(THREAD, name_oop);
 977   Symbol*  signature  = fd->signature();
 978   InstanceKlass* holder = fd->field_holder();
 979   Handle type = new_type(signature, holder, CHECK_NULL);
 980   Handle rh  = java_lang_reflect_Field::create(CHECK_NULL);
 981 
 982   java_lang_reflect_Field::set_clazz(rh(), fd->field_holder()->java_mirror());
 983   java_lang_reflect_Field::set_slot(rh(), fd->index());
 984   java_lang_reflect_Field::set_name(rh(), name());
 985   java_lang_reflect_Field::set_type(rh(), type());
 986   // Note the ACC_ANNOTATION bit, which is a per-class access flag, is never set here.
 987   java_lang_reflect_Field::set_modifiers(rh(), fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS);
 988   java_lang_reflect_Field::set_override(rh(), false);
 989   if (java_lang_reflect_Field::has_signature_field() &&
 990       fd->has_generic_signature()) {
 991     Symbol*  gs = fd->generic_signature();
 992     Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL);
 993     java_lang_reflect_Field::set_signature(rh(), sig());
 994   }
 995   if (java_lang_reflect_Field::has_annotations_field()) {
 996     typeArrayOop an_oop = Annotations::make_java_array(fd->annotations(), CHECK_NULL);
 997     java_lang_reflect_Field::set_annotations(rh(), an_oop);
 998   }
 999   if (java_lang_reflect_Field::has_type_annotations_field()) {
1000     typeArrayOop an_oop = Annotations::make_java_array(fd->type_annotations(), CHECK_NULL);
1001     java_lang_reflect_Field::set_type_annotations(rh(), an_oop);
1002   }
1003   return rh();
1004 }
1005 
1006 oop Reflection::new_parameter(Handle method, int index, Symbol* sym,
1007                               int flags, TRAPS) {
1008 
1009   Handle rh = java_lang_reflect_Parameter::create(CHECK_NULL);
1010 
1011   if(NULL != sym) {
1012     Handle name = java_lang_String::create_from_symbol(sym, CHECK_NULL);
1013     java_lang_reflect_Parameter::set_name(rh(), name());
1014   } else {
1015     java_lang_reflect_Parameter::set_name(rh(), NULL);
1016   }
1017 
1018   java_lang_reflect_Parameter::set_modifiers(rh(), flags);
1019   java_lang_reflect_Parameter::set_executable(rh(), method());
1020   java_lang_reflect_Parameter::set_index(rh(), index);
1021   return rh();
1022 }




 881 
 882   if (exception_types.is_null()) return NULL;
 883 
 884   Symbol*  method_name = method->name();
 885   oop name_oop = StringTable::intern(method_name, CHECK_NULL);
 886   Handle name = Handle(THREAD, name_oop);
 887   if (name == NULL) return NULL;
 888 
 889   const int modifiers = method->access_flags().as_int() & JVM_RECOGNIZED_METHOD_MODIFIERS;
 890 
 891   Handle mh = java_lang_reflect_Method::create(CHECK_NULL);
 892 
 893   java_lang_reflect_Method::set_clazz(mh(), holder->java_mirror());
 894   java_lang_reflect_Method::set_slot(mh(), slot);
 895   java_lang_reflect_Method::set_name(mh(), name());
 896   java_lang_reflect_Method::set_return_type(mh(), return_type());
 897   java_lang_reflect_Method::set_parameter_types(mh(), parameter_types());
 898   java_lang_reflect_Method::set_exception_types(mh(), exception_types());
 899   java_lang_reflect_Method::set_modifiers(mh(), modifiers);
 900   java_lang_reflect_Method::set_override(mh(), false);
 901   if (method->generic_signature() != NULL) {

 902     Symbol*  gs = method->generic_signature();
 903     Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL);
 904     java_lang_reflect_Method::set_signature(mh(), sig());
 905   }

 906   typeArrayOop an_oop = Annotations::make_java_array(method->annotations(), CHECK_NULL);
 907   java_lang_reflect_Method::set_annotations(mh(), an_oop);
 908   an_oop = Annotations::make_java_array(method->parameter_annotations(), CHECK_NULL);


 909   java_lang_reflect_Method::set_parameter_annotations(mh(), an_oop);
 910   an_oop = Annotations::make_java_array(method->annotation_default(), CHECK_NULL);


 911   java_lang_reflect_Method::set_annotation_default(mh(), an_oop);





 912   return mh();
 913 }
 914 
 915 
 916 oop Reflection::new_constructor(const methodHandle& method, TRAPS) {
 917   assert(method()->is_initializer(), "should call new_method instead");
 918 
 919   InstanceKlass* holder = method->method_holder();
 920   int slot = method->method_idnum();
 921 
 922   Symbol*  signature  = method->signature();
 923   int parameter_count = ArgumentCount(signature).size();
 924   objArrayHandle parameter_types = get_parameter_types(method, parameter_count, NULL, CHECK_NULL);
 925   if (parameter_types.is_null()) return NULL;
 926 
 927   objArrayHandle exception_types = get_exception_types(method, CHECK_NULL);
 928   if (exception_types.is_null()) return NULL;
 929 
 930   const int modifiers = method->access_flags().as_int() & JVM_RECOGNIZED_METHOD_MODIFIERS;
 931 
 932   Handle ch = java_lang_reflect_Constructor::create(CHECK_NULL);
 933 
 934   java_lang_reflect_Constructor::set_clazz(ch(), holder->java_mirror());
 935   java_lang_reflect_Constructor::set_slot(ch(), slot);
 936   java_lang_reflect_Constructor::set_parameter_types(ch(), parameter_types());
 937   java_lang_reflect_Constructor::set_exception_types(ch(), exception_types());
 938   java_lang_reflect_Constructor::set_modifiers(ch(), modifiers);
 939   java_lang_reflect_Constructor::set_override(ch(), false);
 940   if (method->generic_signature() != NULL) {

 941     Symbol*  gs = method->generic_signature();
 942     Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL);
 943     java_lang_reflect_Constructor::set_signature(ch(), sig());
 944   }

 945   typeArrayOop an_oop = Annotations::make_java_array(method->annotations(), CHECK_NULL);
 946   java_lang_reflect_Constructor::set_annotations(ch(), an_oop);
 947   an_oop = Annotations::make_java_array(method->parameter_annotations(), CHECK_NULL);


 948   java_lang_reflect_Constructor::set_parameter_annotations(ch(), an_oop);





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

 970     Symbol*  gs = fd->generic_signature();
 971     Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL);
 972     java_lang_reflect_Field::set_signature(rh(), sig());
 973   }

 974   typeArrayOop an_oop = Annotations::make_java_array(fd->annotations(), CHECK_NULL);
 975   java_lang_reflect_Field::set_annotations(rh(), an_oop);





 976   return rh();
 977 }
 978 
 979 oop Reflection::new_parameter(Handle method, int index, Symbol* sym,
 980                               int flags, TRAPS) {
 981 
 982   Handle rh = java_lang_reflect_Parameter::create(CHECK_NULL);
 983 
 984   if(NULL != sym) {
 985     Handle name = java_lang_String::create_from_symbol(sym, CHECK_NULL);
 986     java_lang_reflect_Parameter::set_name(rh(), name());
 987   } else {
 988     java_lang_reflect_Parameter::set_name(rh(), NULL);
 989   }
 990 
 991   java_lang_reflect_Parameter::set_modifiers(rh(), flags);
 992   java_lang_reflect_Parameter::set_executable(rh(), method());
 993   java_lang_reflect_Parameter::set_index(rh(), index);
 994   return rh();
 995 }


< prev index next >