71 // If a shared InstanceKlass k is loaded from the class path, let
72 //
73 // index = k->shared_classpath_index():
74 //
75 // FileMap::_shared_path_table[index] identifies the JAR file that contains k.
76 //
77 // k's protection domain is:
78 //
79 // ProtectionDomain pd = _shared_protection_domains[index];
80 //
81 // and k's Package is initialized using
82 //
83 // manifest = _shared_jar_manifests[index];
84 // url = _shared_jar_urls[index];
85 // define_shared_package(class_name, class_loader, manifest, url, CHECK_NH);
86 //
87 // Note that if an element of these 3 _shared_xxx arrays is null, it will be initialized by
88 // the corresponding SystemDictionaryShared::get_shared_xxx() function.
89 Handle manifest = get_shared_jar_manifest(index, CHECK_NH);
90 Handle url = get_shared_jar_url(index, CHECK_NH);
91 int index_offset = index - ClassLoaderExt::app_class_paths_start_index();
92 if (index_offset < PackageEntry::max_index_for_defined_in_class_path()) {
93 if (pkg_entry == nullptr || !pkg_entry->is_defined_by_cds_in_class_path(index_offset)) {
94 // define_shared_package only needs to be called once for each package in a jar specified
95 // in the shared class path.
96 define_shared_package(class_name, class_loader, manifest, url, CHECK_NH);
97 if (pkg_entry != nullptr) {
98 pkg_entry->set_defined_by_cds_in_class_path(index_offset);
99 }
100 }
101 } else {
102 define_shared_package(class_name, class_loader, manifest, url, CHECK_NH);
103 }
104 return get_shared_protection_domain(class_loader, index, url, THREAD);
105 }
106 }
107
108 Handle CDSProtectionDomain::get_package_name(Symbol* class_name, TRAPS) {
109 ResourceMark rm(THREAD);
110 Handle pkgname_string;
111 TempNewSymbol pkg = ClassLoader::package_from_class_name(class_name);
112 if (pkg != nullptr) { // Package prefix found
113 const char* pkgname = pkg->as_klass_external_name();
114 pkgname_string = java_lang_String::create_from_str(pkgname,
115 CHECK_(pkgname_string));
116 }
117 return pkgname_string;
118 }
119
120 PackageEntry* CDSProtectionDomain::get_package_entry_from_class(InstanceKlass* ik, Handle class_loader) {
121 PackageEntry* pkg_entry = ik->package();
122 if (CDSConfig::is_using_full_module_graph() && ik->is_shared() && pkg_entry != nullptr) {
|
71 // If a shared InstanceKlass k is loaded from the class path, let
72 //
73 // index = k->shared_classpath_index():
74 //
75 // FileMap::_shared_path_table[index] identifies the JAR file that contains k.
76 //
77 // k's protection domain is:
78 //
79 // ProtectionDomain pd = _shared_protection_domains[index];
80 //
81 // and k's Package is initialized using
82 //
83 // manifest = _shared_jar_manifests[index];
84 // url = _shared_jar_urls[index];
85 // define_shared_package(class_name, class_loader, manifest, url, CHECK_NH);
86 //
87 // Note that if an element of these 3 _shared_xxx arrays is null, it will be initialized by
88 // the corresponding SystemDictionaryShared::get_shared_xxx() function.
89 Handle manifest = get_shared_jar_manifest(index, CHECK_NH);
90 Handle url = get_shared_jar_url(index, CHECK_NH);
91 if (!CDSConfig::is_loading_packages()) {
92 int index_offset = index - ClassLoaderExt::app_class_paths_start_index();
93 if (index_offset < PackageEntry::max_index_for_defined_in_class_path()) {
94 if (pkg_entry == nullptr || !pkg_entry->is_defined_by_cds_in_class_path(index_offset)) {
95 // define_shared_package only needs to be called once for each package in a jar specified
96 // in the shared class path.
97 define_shared_package(class_name, class_loader, manifest, url, CHECK_NH);
98 if (pkg_entry != nullptr) {
99 pkg_entry->set_defined_by_cds_in_class_path(index_offset);
100 }
101 }
102 } else {
103 define_shared_package(class_name, class_loader, manifest, url, CHECK_NH);
104 }
105 }
106 return get_shared_protection_domain(class_loader, index, url, THREAD);
107 }
108 }
109
110 Handle CDSProtectionDomain::get_package_name(Symbol* class_name, TRAPS) {
111 ResourceMark rm(THREAD);
112 Handle pkgname_string;
113 TempNewSymbol pkg = ClassLoader::package_from_class_name(class_name);
114 if (pkg != nullptr) { // Package prefix found
115 const char* pkgname = pkg->as_klass_external_name();
116 pkgname_string = java_lang_String::create_from_str(pkgname,
117 CHECK_(pkgname_string));
118 }
119 return pkgname_string;
120 }
121
122 PackageEntry* CDSProtectionDomain::get_package_entry_from_class(InstanceKlass* ik, Handle class_loader) {
123 PackageEntry* pkg_entry = ik->package();
124 if (CDSConfig::is_using_full_module_graph() && ik->is_shared() && pkg_entry != nullptr) {
|