771 |
771 |
772 // Initialize static fields |
772 // Initialize static fields |
773 InstanceKlass::cast(k())->do_local_static_fields(&initialize_static_field, mirror, CHECK); |
773 InstanceKlass::cast(k())->do_local_static_fields(&initialize_static_field, mirror, CHECK); |
774 } |
774 } |
775 |
775 |
776 // Set the java.lang.reflect.Module module field in the java_lang_Class mirror |
776 // Set the java.lang.Module module field in the java_lang_Class mirror |
777 void java_lang_Class::set_mirror_module_field(KlassHandle k, Handle mirror, Handle module, TRAPS) { |
777 void java_lang_Class::set_mirror_module_field(KlassHandle k, Handle mirror, Handle module, TRAPS) { |
778 if (module.is_null()) { |
778 if (module.is_null()) { |
779 // During startup, the module may be NULL only if java.base has not been defined yet. |
779 // During startup, the module may be NULL only if java.base has not been defined yet. |
780 // Put the class on the fixup_module_list to patch later when the java.lang.reflect.Module |
780 // Put the class on the fixup_module_list to patch later when the java.lang.Module |
781 // for java.base is known. |
781 // for java.base is known. |
782 assert(!Universe::is_module_initialized(), "Incorrect java.lang.reflect.Module pre module system initialization"); |
782 assert(!Universe::is_module_initialized(), "Incorrect java.lang.Module pre module system initialization"); |
783 |
783 |
784 bool javabase_was_defined = false; |
784 bool javabase_was_defined = false; |
785 { |
785 { |
786 MutexLocker m1(Module_lock, THREAD); |
786 MutexLocker m1(Module_lock, THREAD); |
787 // Keep list of classes needing java.base module fixup |
787 // Keep list of classes needing java.base module fixup |
2802 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2802 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2803 param->obj_field_put(executable_offset, value); |
2803 param->obj_field_put(executable_offset, value); |
2804 } |
2804 } |
2805 |
2805 |
2806 |
2806 |
2807 int java_lang_reflect_Module::loader_offset; |
2807 int java_lang_Module::loader_offset; |
2808 int java_lang_reflect_Module::name_offset; |
2808 int java_lang_Module::name_offset; |
2809 int java_lang_reflect_Module::_module_entry_offset = -1; |
2809 int java_lang_Module::_module_entry_offset = -1; |
2810 |
2810 |
2811 Handle java_lang_reflect_Module::create(Handle loader, Handle module_name, TRAPS) { |
2811 Handle java_lang_Module::create(Handle loader, Handle module_name, TRAPS) { |
2812 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2812 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2813 |
2813 |
2814 Symbol* name = vmSymbols::java_lang_reflect_Module(); |
2814 Symbol* name = vmSymbols::java_lang_Module(); |
2815 Klass* k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH); |
2815 Klass* k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH); |
2816 instanceKlassHandle klass (THREAD, k); |
2816 instanceKlassHandle klass (THREAD, k); |
2817 |
2817 |
2818 Handle jlrmh = klass->allocate_instance_handle(CHECK_NH); |
2818 Handle jlmh = klass->allocate_instance_handle(CHECK_NH); |
2819 JavaValue result(T_VOID); |
2819 JavaValue result(T_VOID); |
2820 JavaCalls::call_special(&result, jlrmh, KlassHandle(THREAD, klass()), |
2820 JavaCalls::call_special(&result, jlmh, KlassHandle(THREAD, klass()), |
2821 vmSymbols::object_initializer_name(), |
2821 vmSymbols::object_initializer_name(), |
2822 vmSymbols::java_lang_reflect_module_init_signature(), |
2822 vmSymbols::java_lang_module_init_signature(), |
2823 loader, module_name, CHECK_NH); |
2823 loader, module_name, CHECK_NH); |
2824 return jlrmh; |
2824 return jlmh; |
2825 } |
2825 } |
2826 |
2826 |
2827 void java_lang_reflect_Module::compute_offsets() { |
2827 void java_lang_Module::compute_offsets() { |
2828 Klass* k = SystemDictionary::reflect_Module_klass(); |
2828 Klass* k = SystemDictionary::Module_klass(); |
2829 if(NULL != k) { |
2829 if(NULL != k) { |
2830 compute_offset(loader_offset, k, vmSymbols::loader_name(), vmSymbols::classloader_signature()); |
2830 compute_offset(loader_offset, k, vmSymbols::loader_name(), vmSymbols::classloader_signature()); |
2831 compute_offset(name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature()); |
2831 compute_offset(name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature()); |
2832 MODULE_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET); |
2832 MODULE_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET); |
2833 } |
2833 } |
2834 } |
2834 } |
2835 |
2835 |
2836 |
2836 |
2837 oop java_lang_reflect_Module::loader(oop module) { |
2837 oop java_lang_Module::loader(oop module) { |
2838 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2838 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2839 return module->obj_field(loader_offset); |
2839 return module->obj_field(loader_offset); |
2840 } |
2840 } |
2841 |
2841 |
2842 void java_lang_reflect_Module::set_loader(oop module, oop value) { |
2842 void java_lang_Module::set_loader(oop module, oop value) { |
2843 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2843 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2844 module->obj_field_put(loader_offset, value); |
2844 module->obj_field_put(loader_offset, value); |
2845 } |
2845 } |
2846 |
2846 |
2847 oop java_lang_reflect_Module::name(oop module) { |
2847 oop java_lang_Module::name(oop module) { |
2848 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2848 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2849 return module->obj_field(name_offset); |
2849 return module->obj_field(name_offset); |
2850 } |
2850 } |
2851 |
2851 |
2852 void java_lang_reflect_Module::set_name(oop module, oop value) { |
2852 void java_lang_Module::set_name(oop module, oop value) { |
2853 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2853 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2854 module->obj_field_put(name_offset, value); |
2854 module->obj_field_put(name_offset, value); |
2855 } |
2855 } |
2856 |
2856 |
2857 ModuleEntry* java_lang_reflect_Module::module_entry(oop module, TRAPS) { |
2857 ModuleEntry* java_lang_Module::module_entry(oop module, TRAPS) { |
2858 assert(_module_entry_offset != -1, "Uninitialized module_entry_offset"); |
2858 assert(_module_entry_offset != -1, "Uninitialized module_entry_offset"); |
2859 assert(module != NULL, "module can't be null"); |
2859 assert(module != NULL, "module can't be null"); |
2860 assert(module->is_oop(), "module must be oop"); |
2860 assert(module->is_oop(), "module must be oop"); |
2861 |
2861 |
2862 ModuleEntry* module_entry = (ModuleEntry*)module->address_field(_module_entry_offset); |
2862 ModuleEntry* module_entry = (ModuleEntry*)module->address_field(_module_entry_offset); |
2863 if (module_entry == NULL) { |
2863 if (module_entry == NULL) { |
2864 // If the inject field containing the ModuleEntry* is null then return the |
2864 // If the inject field containing the ModuleEntry* is null then return the |
2865 // class loader's unnamed module. |
2865 // class loader's unnamed module. |
2866 oop loader = java_lang_reflect_Module::loader(module); |
2866 oop loader = java_lang_Module::loader(module); |
2867 Handle h_loader = Handle(THREAD, loader); |
2867 Handle h_loader = Handle(THREAD, loader); |
2868 ClassLoaderData* loader_cld = SystemDictionary::register_loader(h_loader, CHECK_NULL); |
2868 ClassLoaderData* loader_cld = SystemDictionary::register_loader(h_loader, CHECK_NULL); |
2869 return loader_cld->modules()->unnamed_module(); |
2869 return loader_cld->modules()->unnamed_module(); |
2870 } |
2870 } |
2871 return module_entry; |
2871 return module_entry; |
2872 } |
2872 } |
2873 |
2873 |
2874 void java_lang_reflect_Module::set_module_entry(oop module, ModuleEntry* module_entry) { |
2874 void java_lang_Module::set_module_entry(oop module, ModuleEntry* module_entry) { |
2875 assert(_module_entry_offset != -1, "Uninitialized module_entry_offset"); |
2875 assert(_module_entry_offset != -1, "Uninitialized module_entry_offset"); |
2876 assert(module != NULL, "module can't be null"); |
2876 assert(module != NULL, "module can't be null"); |
2877 assert(module->is_oop(), "module must be oop"); |
2877 assert(module->is_oop(), "module must be oop"); |
2878 module->address_field_put(_module_entry_offset, (address)module_entry); |
2878 module->address_field_put(_module_entry_offset, (address)module_entry); |
2879 } |
2879 } |