< prev index next >

src/hotspot/share/cds/cdsProtectionDomain.cpp

Print this page

 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) {
< prev index next >