72 err_msg("Invalid module name: %s", 73 module_name != NULL ? module_name : "NULL")); 74 } 75 return module_name; 76 } 77 78 static const char* get_module_version(jstring version) { 79 if (version == NULL) { 80 return NULL; 81 } 82 return java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(version)); 83 } 84 85 static ModuleEntryTable* get_module_entry_table(Handle h_loader, TRAPS) { 86 // This code can be called during start-up, before the classLoader's classLoader data got 87 // created. So, call register_loader() to make sure the classLoader data gets created. 88 ClassLoaderData *loader_cld = SystemDictionary::register_loader(h_loader, CHECK_NULL); 89 return loader_cld->modules(); 90 } 91 92 static PackageEntryTable* get_package_entry_table(Handle h_loader, TRAPS) { 93 // This code can be called during start-up, before the classLoader's classLoader data got 94 // created. So, call register_loader() to make sure the classLoader data gets created. 95 ClassLoaderData *loader_cld = SystemDictionary::register_loader(h_loader, CHECK_NULL); 96 return loader_cld->packages(); 97 } 98 99 static ModuleEntry* get_module_entry(jobject module, TRAPS) { 100 Handle module_h(THREAD, JNIHandles::resolve(module)); 101 if (!java_lang_reflect_Module::is_instance(module_h())) { 102 THROW_MSG_NULL(vmSymbols::java_lang_IllegalArgumentException(), 103 "module is not an instance of type java.lang.reflect.Module"); 104 } 105 return java_lang_reflect_Module::module_entry(module_h(), CHECK_NULL); 106 } 107 108 static PackageEntry* get_package_entry(ModuleEntry* module_entry, const char* package_name, TRAPS) { 109 ResourceMark rm(THREAD); 110 if (package_name == NULL) return NULL; 111 TempNewSymbol pkg_symbol = SymbolTable::new_symbol(package_name, CHECK_NULL); 461 "module is not an instance of type java.lang.reflect.Module"); 462 } 463 464 // Ensure that this is an unnamed module 465 oop name = java_lang_reflect_Module::name(module_handle()); 466 if (name != NULL) { 467 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), 468 "boot loader's unnamed module's java.lang.reflect.Module has a name"); 469 } 470 471 // Validate java_base's loader is the boot loader. 472 oop loader = java_lang_reflect_Module::loader(module_handle()); 473 if (loader != NULL) { 474 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), 475 "Class loader must be the boot class loader"); 476 } 477 Handle h_loader(THREAD, loader); 478 479 log_debug(modules)("set_bootloader_unnamed_module(): recording unnamed module for boot loader"); 480 481 // Ensure the boot loader's PackageEntryTable has been created 482 ModuleEntryTable* module_table = get_module_entry_table(h_loader, CHECK); 483 484 // Set java.lang.reflect.Module for the boot loader's unnamed module 485 ModuleEntry* unnamed_module = module_table->unnamed_module(); 486 assert(unnamed_module != NULL, "boot loader's unnamed ModuleEntry not defined"); 487 unnamed_module->set_module(ClassLoaderData::the_null_class_loader_data()->add_handle(module_handle)); 488 // Store pointer to the ModuleEntry in the unnamed module's java.lang.reflect.Module object. 489 java_lang_reflect_Module::set_module_entry(module_handle(), unnamed_module); 490 } 491 492 void Modules::add_module_exports(jobject from_module, const char* package_name, jobject to_module, TRAPS) { 493 if (package_name == NULL) { 494 THROW_MSG(vmSymbols::java_lang_NullPointerException(), 495 "package is null"); 496 } 497 if (from_module == NULL) { 498 THROW_MSG(vmSymbols::java_lang_NullPointerException(), 499 "from_module is null"); 500 } 501 ModuleEntry* from_module_entry = get_module_entry(from_module, CHECK); 502 if (from_module_entry == NULL) { 503 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), 504 "from_module cannot be found"); 505 } | 72 err_msg("Invalid module name: %s", 73 module_name != NULL ? module_name : "NULL")); 74 } 75 return module_name; 76 } 77 78 static const char* get_module_version(jstring version) { 79 if (version == NULL) { 80 return NULL; 81 } 82 return java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(version)); 83 } 84 85 static ModuleEntryTable* get_module_entry_table(Handle h_loader, TRAPS) { 86 // This code can be called during start-up, before the classLoader's classLoader data got 87 // created. So, call register_loader() to make sure the classLoader data gets created. 88 ClassLoaderData *loader_cld = SystemDictionary::register_loader(h_loader, CHECK_NULL); 89 return loader_cld->modules(); 90 } 91 92 static ModuleEntry* get_unnamed_module(Handle h_loader, TRAPS) { 93 // This code can be called during start-up, before the classLoader's classLoader data got 94 // created. So, call register_loader() to make sure the classLoader data gets created. 95 ClassLoaderData *loader_cld = SystemDictionary::register_loader(h_loader, CHECK_NULL); 96 return loader_cld->unnamed_module(); 97 } 98 99 static PackageEntryTable* get_package_entry_table(Handle h_loader, TRAPS) { 100 // This code can be called during start-up, before the classLoader's classLoader data got 101 // created. So, call register_loader() to make sure the classLoader data gets created. 102 ClassLoaderData *loader_cld = SystemDictionary::register_loader(h_loader, CHECK_NULL); 103 return loader_cld->packages(); 104 } 105 106 static ModuleEntry* get_module_entry(jobject module, TRAPS) { 107 Handle module_h(THREAD, JNIHandles::resolve(module)); 108 if (!java_lang_reflect_Module::is_instance(module_h())) { 109 THROW_MSG_NULL(vmSymbols::java_lang_IllegalArgumentException(), 110 "module is not an instance of type java.lang.reflect.Module"); 111 } 112 return java_lang_reflect_Module::module_entry(module_h(), CHECK_NULL); 113 } 114 115 static PackageEntry* get_package_entry(ModuleEntry* module_entry, const char* package_name, TRAPS) { 116 ResourceMark rm(THREAD); 117 if (package_name == NULL) return NULL; 118 TempNewSymbol pkg_symbol = SymbolTable::new_symbol(package_name, CHECK_NULL); 468 "module is not an instance of type java.lang.reflect.Module"); 469 } 470 471 // Ensure that this is an unnamed module 472 oop name = java_lang_reflect_Module::name(module_handle()); 473 if (name != NULL) { 474 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), 475 "boot loader's unnamed module's java.lang.reflect.Module has a name"); 476 } 477 478 // Validate java_base's loader is the boot loader. 479 oop loader = java_lang_reflect_Module::loader(module_handle()); 480 if (loader != NULL) { 481 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), 482 "Class loader must be the boot class loader"); 483 } 484 Handle h_loader(THREAD, loader); 485 486 log_debug(modules)("set_bootloader_unnamed_module(): recording unnamed module for boot loader"); 487 488 // Set java.lang.Module for the boot loader's unnamed module 489 ModuleEntry* unnamed_module = get_unnamed_module(h_loader, CHECK); 490 assert(unnamed_module != NULL, "boot loader's unnamed ModuleEntry not defined"); 491 unnamed_module->set_module(ClassLoaderData::the_null_class_loader_data()->add_handle(module_handle)); 492 // Store pointer to the ModuleEntry in the unnamed module's java.lang.reflect.Module object. 493 java_lang_reflect_Module::set_module_entry(module_handle(), unnamed_module); 494 } 495 496 void Modules::add_module_exports(jobject from_module, const char* package_name, jobject to_module, TRAPS) { 497 if (package_name == NULL) { 498 THROW_MSG(vmSymbols::java_lang_NullPointerException(), 499 "package is null"); 500 } 501 if (from_module == NULL) { 502 THROW_MSG(vmSymbols::java_lang_NullPointerException(), 503 "from_module is null"); 504 } 505 ModuleEntry* from_module_entry = get_module_entry(from_module, CHECK); 506 if (from_module_entry == NULL) { 507 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), 508 "from_module cannot be found"); 509 } |