src/hotspot/share/classfile/modules.cpp
changeset 54847 59ea39bb2809
parent 53664 2f4c2bc90b22
child 58177 4932dce35882
equal deleted inserted replaced
54846:e4049522b074 54847:59ea39bb2809
   109 }
   109 }
   110 
   110 
   111 static PackageEntry* get_package_entry(ModuleEntry* module_entry, const char* package_name, TRAPS) {
   111 static PackageEntry* get_package_entry(ModuleEntry* module_entry, const char* package_name, TRAPS) {
   112   ResourceMark rm(THREAD);
   112   ResourceMark rm(THREAD);
   113   if (package_name == NULL) return NULL;
   113   if (package_name == NULL) return NULL;
   114   TempNewSymbol pkg_symbol = SymbolTable::new_symbol(package_name, CHECK_NULL);
   114   TempNewSymbol pkg_symbol = SymbolTable::new_symbol(package_name);
   115   PackageEntryTable* package_entry_table = module_entry->loader_data()->packages();
   115   PackageEntryTable* package_entry_table = module_entry->loader_data()->packages();
   116   assert(package_entry_table != NULL, "Unexpected null package entry table");
   116   assert(package_entry_table != NULL, "Unexpected null package entry table");
   117   return package_entry_table->lookup_only(pkg_symbol);
   117   return package_entry_table->lookup_only(pkg_symbol);
   118 }
   118 }
   119 
   119 
   146 
   146 
   147   // Obtain java.base's module version
   147   // Obtain java.base's module version
   148   const char* module_version = get_module_version(version);
   148   const char* module_version = get_module_version(version);
   149   TempNewSymbol version_symbol;
   149   TempNewSymbol version_symbol;
   150   if (module_version != NULL) {
   150   if (module_version != NULL) {
   151     version_symbol = SymbolTable::new_symbol(module_version, CHECK);
   151     version_symbol = SymbolTable::new_symbol(module_version);
   152   } else {
   152   } else {
   153     version_symbol = NULL;
   153     version_symbol = NULL;
   154   }
   154   }
   155 
   155 
   156   // Obtain java.base's location
   156   // Obtain java.base's location
   158   TempNewSymbol location_symbol = NULL;
   158   TempNewSymbol location_symbol = NULL;
   159   if (location != NULL) {
   159   if (location != NULL) {
   160     module_location =
   160     module_location =
   161       java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(location));
   161       java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(location));
   162     if (module_location != NULL) {
   162     if (module_location != NULL) {
   163       location_symbol = SymbolTable::new_symbol(module_location, CHECK);
   163       location_symbol = SymbolTable::new_symbol(module_location);
   164     }
   164     }
   165   }
   165   }
   166 
   166 
   167 
   167 
   168   // Check that the packages are syntactically ok.
   168   // Check that the packages are syntactically ok.
   171     const char *package_name = packages[x];
   171     const char *package_name = packages[x];
   172     if (!Modules::verify_package_name(package_name)) {
   172     if (!Modules::verify_package_name(package_name)) {
   173       THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
   173       THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
   174                 err_msg("Invalid package name: %s for module: " JAVA_BASE_NAME, package_name));
   174                 err_msg("Invalid package name: %s for module: " JAVA_BASE_NAME, package_name));
   175     }
   175     }
   176     Symbol* pkg_symbol = SymbolTable::new_symbol(package_name, CHECK);
   176     Symbol* pkg_symbol = SymbolTable::new_symbol(package_name);
   177     pkg_list->append(pkg_symbol);
   177     pkg_list->append(pkg_symbol);
   178   }
   178   }
   179 
   179 
   180   // Validate java_base's loader is the boot loader.
   180   // Validate java_base's loader is the boot loader.
   181   oop loader = java_lang_Module::loader(module_handle());
   181   oop loader = java_lang_Module::loader(module_handle());
   343       char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len);
   343       char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len);
   344       jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, pkg_name);
   344       jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, pkg_name);
   345       THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), message);
   345       THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), message);
   346     }
   346     }
   347 
   347 
   348     Symbol* pkg_symbol = SymbolTable::new_symbol(package_name, CHECK);
   348     Symbol* pkg_symbol = SymbolTable::new_symbol(package_name);
   349     pkg_list->append(pkg_symbol);
   349     pkg_list->append(pkg_symbol);
   350   }
   350   }
   351 
   351 
   352   ModuleEntryTable* module_table = get_module_entry_table(h_loader);
   352   ModuleEntryTable* module_table = get_module_entry_table(h_loader);
   353   assert(module_table != NULL, "module entry table shouldn't be null");
   353   assert(module_table != NULL, "module entry table shouldn't be null");
   354 
   354 
   355   // Create symbol* entry for module name.
   355   // Create symbol* entry for module name.
   356   TempNewSymbol module_symbol = SymbolTable::new_symbol(module_name, CHECK);
   356   TempNewSymbol module_symbol = SymbolTable::new_symbol(module_name);
   357 
   357 
   358   bool dupl_modules = false;
   358   bool dupl_modules = false;
   359 
   359 
   360   // Create symbol* entry for module version.
   360   // Create symbol* entry for module version.
   361   TempNewSymbol version_symbol;
   361   TempNewSymbol version_symbol;
   362   if (module_version != NULL) {
   362   if (module_version != NULL) {
   363     version_symbol = SymbolTable::new_symbol(module_version, CHECK);
   363     version_symbol = SymbolTable::new_symbol(module_version);
   364   } else {
   364   } else {
   365     version_symbol = NULL;
   365     version_symbol = NULL;
   366   }
   366   }
   367 
   367 
   368   // Create symbol* entry for module location.
   368   // Create symbol* entry for module location.
   370   TempNewSymbol location_symbol = NULL;
   370   TempNewSymbol location_symbol = NULL;
   371   if (location != NULL) {
   371   if (location != NULL) {
   372     module_location =
   372     module_location =
   373       java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(location));
   373       java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(location));
   374     if (module_location != NULL) {
   374     if (module_location != NULL) {
   375       location_symbol = SymbolTable::new_symbol(module_location, CHECK);
   375       location_symbol = SymbolTable::new_symbol(module_location);
   376     }
   376     }
   377   }
   377   }
   378 
   378 
   379   PackageEntryTable* package_table = NULL;
   379   PackageEntryTable* package_table = NULL;
   380   PackageEntry* existing_pkg = NULL;
   380   PackageEntry* existing_pkg = NULL;
   655   assert(package_name != NULL, "the package_name should not be NULL");
   655   assert(package_name != NULL, "the package_name should not be NULL");
   656 
   656 
   657   if (strlen(package_name) == 0) {
   657   if (strlen(package_name) == 0) {
   658     return NULL;
   658     return NULL;
   659   }
   659   }
   660   TempNewSymbol package_sym = SymbolTable::new_symbol(package_name, CHECK_NULL);
   660   TempNewSymbol package_sym = SymbolTable::new_symbol(package_name);
   661   const PackageEntry* const pkg_entry =
   661   const PackageEntry* const pkg_entry =
   662     get_package_entry_by_name(package_sym, h_loader, THREAD);
   662     get_package_entry_by_name(package_sym, h_loader, THREAD);
   663   const ModuleEntry* const module_entry = (pkg_entry != NULL ? pkg_entry->module() : NULL);
   663   const ModuleEntry* const module_entry = (pkg_entry != NULL ? pkg_entry->module() : NULL);
   664 
   664 
   665   if (module_entry != NULL && module_entry->module() != NULL && module_entry->is_named()) {
   665   if (module_entry != NULL && module_entry->module() != NULL && module_entry->is_named()) {