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) { |