< prev index next >

src/share/vm/oops/instanceKlass.cpp

Print this page




2240   } else {
2241     if (name->utf8_length() <= 0) {
2242       return NULL;
2243     }
2244     ResourceMark rm;
2245     const char* package_name = ClassLoader::package_from_name((const char*) name->as_C_string());
2246     if (package_name == NULL) {
2247       return NULL;
2248     }
2249     Symbol* pkg_name = SymbolTable::new_symbol(package_name, THREAD);
2250     return pkg_name;
2251   }
2252 }
2253 
2254 ModuleEntry* InstanceKlass::module() const {
2255   if (!in_unnamed_package()) {
2256     return _package_entry->module();
2257   }
2258   const Klass* host = host_klass();
2259   if (host == NULL) {
2260     return class_loader_data()->modules()->unnamed_module();
2261   }
2262   return host->class_loader_data()->modules()->unnamed_module();
2263 }
2264 
2265 void InstanceKlass::set_package(ClassLoaderData* loader_data, TRAPS) {
2266 
2267   // ensure java/ packages only loaded by boot or platform builtin loaders
2268   Handle class_loader(THREAD, loader_data->class_loader());
2269   check_prohibited_package(name(), class_loader, CHECK);
2270 
2271   TempNewSymbol pkg_name = package_from_name(name(), CHECK);
2272 
2273   if (pkg_name != NULL && loader_data != NULL) {
2274 
2275     // Find in class loader's package entry table.
2276     _package_entry = loader_data->packages()->lookup_only(pkg_name);
2277 
2278     // If the package name is not found in the loader's package
2279     // entry table, it is an indication that the package has not
2280     // been defined. Consider it defined within the unnamed module.
2281     if (_package_entry == NULL) {
2282       ResourceMark rm;
2283 
2284       if (!ModuleEntryTable::javabase_defined()) {
2285         // Before java.base is defined during bootstrapping, define all packages in
2286         // the java.base module.  If a non-java.base package is erroneously placed
2287         // in the java.base module it will be caught later when java.base
2288         // is defined by ModuleEntryTable::verify_javabase_packages check.
2289         assert(ModuleEntryTable::javabase_moduleEntry() != NULL, JAVA_BASE_NAME " module is NULL");
2290         _package_entry = loader_data->packages()->lookup(pkg_name, ModuleEntryTable::javabase_moduleEntry());
2291       } else {
2292         assert(loader_data->modules()->unnamed_module() != NULL, "unnamed module is NULL");
2293         _package_entry = loader_data->packages()->lookup(pkg_name,
2294                                                          loader_data->modules()->unnamed_module());
2295       }
2296 
2297       // A package should have been successfully created
2298       assert(_package_entry != NULL, "Package entry for class %s not found, loader %s",
2299              name()->as_C_string(), loader_data->loader_name());
2300     }
2301 
2302     if (log_is_enabled(Debug, modules)) {
2303       ResourceMark rm;
2304       ModuleEntry* m = _package_entry->module();
2305       log_trace(modules)("Setting package: class: %s, package: %s, loader: %s, module: %s",
2306                          external_name(),
2307                          pkg_name->as_C_string(),
2308                          loader_data->loader_name(),
2309                          (m->is_named() ? m->name()->as_C_string() : UNNAMED_MODULE));
2310     }
2311   } else {
2312     ResourceMark rm;
2313     log_trace(modules)("Setting package: class: %s, package: unnamed, loader: %s, module: %s",
2314                        external_name(),




2240   } else {
2241     if (name->utf8_length() <= 0) {
2242       return NULL;
2243     }
2244     ResourceMark rm;
2245     const char* package_name = ClassLoader::package_from_name((const char*) name->as_C_string());
2246     if (package_name == NULL) {
2247       return NULL;
2248     }
2249     Symbol* pkg_name = SymbolTable::new_symbol(package_name, THREAD);
2250     return pkg_name;
2251   }
2252 }
2253 
2254 ModuleEntry* InstanceKlass::module() const {
2255   if (!in_unnamed_package()) {
2256     return _package_entry->module();
2257   }
2258   const Klass* host = host_klass();
2259   if (host == NULL) {
2260     return class_loader_data()->unnamed_module();
2261   }
2262   return host->class_loader_data()->unnamed_module();
2263 }
2264 
2265 void InstanceKlass::set_package(ClassLoaderData* loader_data, TRAPS) {
2266 
2267   // ensure java/ packages only loaded by boot or platform builtin loaders
2268   Handle class_loader(THREAD, loader_data->class_loader());
2269   check_prohibited_package(name(), class_loader, CHECK);
2270 
2271   TempNewSymbol pkg_name = package_from_name(name(), CHECK);
2272 
2273   if (pkg_name != NULL && loader_data != NULL) {
2274 
2275     // Find in class loader's package entry table.
2276     _package_entry = loader_data->packages()->lookup_only(pkg_name);
2277 
2278     // If the package name is not found in the loader's package
2279     // entry table, it is an indication that the package has not
2280     // been defined. Consider it defined within the unnamed module.
2281     if (_package_entry == NULL) {
2282       ResourceMark rm;
2283 
2284       if (!ModuleEntryTable::javabase_defined()) {
2285         // Before java.base is defined during bootstrapping, define all packages in
2286         // the java.base module.  If a non-java.base package is erroneously placed
2287         // in the java.base module it will be caught later when java.base
2288         // is defined by ModuleEntryTable::verify_javabase_packages check.
2289         assert(ModuleEntryTable::javabase_moduleEntry() != NULL, JAVA_BASE_NAME " module is NULL");
2290         _package_entry = loader_data->packages()->lookup(pkg_name, ModuleEntryTable::javabase_moduleEntry());
2291       } else {
2292         assert(loader_data->unnamed_module() != NULL, "unnamed module is NULL");
2293         _package_entry = loader_data->packages()->lookup(pkg_name,
2294                                                          loader_data->unnamed_module());
2295       }
2296 
2297       // A package should have been successfully created
2298       assert(_package_entry != NULL, "Package entry for class %s not found, loader %s",
2299              name()->as_C_string(), loader_data->loader_name());
2300     }
2301 
2302     if (log_is_enabled(Debug, modules)) {
2303       ResourceMark rm;
2304       ModuleEntry* m = _package_entry->module();
2305       log_trace(modules)("Setting package: class: %s, package: %s, loader: %s, module: %s",
2306                          external_name(),
2307                          pkg_name->as_C_string(),
2308                          loader_data->loader_name(),
2309                          (m->is_named() ? m->name()->as_C_string() : UNNAMED_MODULE));
2310     }
2311   } else {
2312     ResourceMark rm;
2313     log_trace(modules)("Setting package: class: %s, package: unnamed, loader: %s, module: %s",
2314                        external_name(),


< prev index next >