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