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 } |