< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page
rev 53275 : 8216307: StackTraceElement::fill_in can use existing Module name and version
Reviewed-by: XXX

*** 2592,2606 **** java_lang_StackTraceElement::set_methodName(element(), methodname); // Fill in module name and version ModuleEntry* module = holder->module(); if (module->is_named()) { ! oop module_name = StringTable::intern(module->name(), CHECK); java_lang_StackTraceElement::set_moduleName(element(), module_name); oop module_version; if (module->version() != NULL) { ! module_version = StringTable::intern(module->version(), CHECK); } else { module_version = NULL; } java_lang_StackTraceElement::set_moduleVersion(element(), module_version); } --- 2592,2615 ---- java_lang_StackTraceElement::set_methodName(element(), methodname); // Fill in module name and version ModuleEntry* module = holder->module(); if (module->is_named()) { ! oop module_name = java_lang_Module::name(module->module()); ! assert(module_name != NULL, "module name is set"); java_lang_StackTraceElement::set_moduleName(element(), module_name); oop module_version; if (module->version() != NULL) { ! oop md = java_lang_Module::module_descriptor(module->module()); ! assert(md != NULL, "module descriptor is set"); ! oop mdv = java_lang_module_ModuleDescriptor::version(md); ! if (mdv != NULL) { ! module_version = java_lang_module_ModuleDescriptor_Version::version(mdv); ! } else { ! module_version = java_lang_module_ModuleDescriptor::raw_version(md); ! } ! assert(module_version != NULL, "module version string is set"); } else { module_version = NULL; } java_lang_StackTraceElement::set_moduleVersion(element(), module_version); }
*** 3101,3110 **** --- 3110,3120 ---- } int java_lang_Module::loader_offset; int java_lang_Module::name_offset; + int java_lang_Module::module_descriptor_offset; int java_lang_Module::_module_entry_offset = -1; Handle java_lang_Module::create(Handle loader, Handle module_name, TRAPS) { assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); return JavaCalls::construct_new_instance(SystemDictionary::Module_klass(),
*** 3112,3122 **** loader, module_name, CHECK_NH); } #define MODULE_FIELDS_DO(macro) \ macro(loader_offset, k, vmSymbols::loader_name(), classloader_signature, false); \ ! macro(name_offset, k, vmSymbols::name_name(), string_signature, false) void java_lang_Module::compute_offsets() { InstanceKlass* k = SystemDictionary::Module_klass(); MODULE_FIELDS_DO(FIELD_COMPUTE_OFFSET); MODULE_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET); --- 3122,3133 ---- loader, module_name, CHECK_NH); } #define MODULE_FIELDS_DO(macro) \ macro(loader_offset, k, vmSymbols::loader_name(), classloader_signature, false); \ ! macro(name_offset, k, vmSymbols::name_name(), string_signature, false); \ ! macro(module_descriptor_offset, k, vmSymbols::descriptor_name(), module_descriptor_signature, false); \ void java_lang_Module::compute_offsets() { InstanceKlass* k = SystemDictionary::Module_klass(); MODULE_FIELDS_DO(FIELD_COMPUTE_OFFSET); MODULE_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
*** 3147,3156 **** --- 3158,3173 ---- void java_lang_Module::set_name(oop module, oop value) { assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); module->obj_field_put(name_offset, value); } + oop java_lang_Module::module_descriptor(oop module) { + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); + assert(java_lang_Module::is_instance(module), "sanity"); + return module->obj_field(module_descriptor_offset); + } + ModuleEntry* java_lang_Module::module_entry(oop module) { assert(_module_entry_offset != -1, "Uninitialized module_entry_offset"); assert(module != NULL, "module can't be null"); assert(oopDesc::is_oop(module), "module must be oop");
*** 3171,3180 **** --- 3188,3257 ---- assert(module != NULL, "module can't be null"); assert(oopDesc::is_oop(module), "module must be oop"); module->address_field_put(_module_entry_offset, (address)module_entry); } + int java_lang_module_ModuleDescriptor::version_offset; + int java_lang_module_ModuleDescriptor::raw_version_offset; + + #define MODULE_DESCRIPTOR_FIELDS_DO(macro) \ + macro(version_offset, k, vmSymbols::version_name(), module_descriptor_version_signature, false); \ + macro(raw_version_offset, k, vmSymbols::raw_version_string_name(), string_signature, false); \ + + void java_lang_module_ModuleDescriptor::compute_offsets() { + InstanceKlass* k = SystemDictionary::ModuleDescriptor_klass(); + MODULE_DESCRIPTOR_FIELDS_DO(FIELD_COMPUTE_OFFSET); + } + + #if INCLUDE_CDS + void java_lang_module_ModuleDescriptor::serialize_offsets(SerializeClosure* f) { + MODULE_DESCRIPTOR_FIELDS_DO(FIELD_SERIALIZE_OFFSET); + } + #endif + + inline bool java_lang_module_ModuleDescriptor::is_instance(oop obj) { + return obj != NULL && obj->klass() == SystemDictionary::ModuleDescriptor_klass(); + } + + oop java_lang_module_ModuleDescriptor::version(oop module_descriptor) { + assert(java_lang_module_ModuleDescriptor::is_instance(module_descriptor), "sanity"); + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); + return module_descriptor->obj_field(version_offset); + } + + oop java_lang_module_ModuleDescriptor::raw_version(oop module_descriptor) { + assert(java_lang_module_ModuleDescriptor::is_instance(module_descriptor), "sanity"); + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); + return module_descriptor->obj_field(raw_version_offset); + } + + int java_lang_module_ModuleDescriptor_Version::version_offset; + + #define MODULE_DESCRIPTOR_VERSION_FIELDS_DO(macro) \ + macro(version_offset, k, vmSymbols::version_name(), string_signature, false); \ + + void java_lang_module_ModuleDescriptor_Version::compute_offsets() { + InstanceKlass* k = SystemDictionary::ModuleDescriptor_Version_klass(); + MODULE_DESCRIPTOR_VERSION_FIELDS_DO(FIELD_COMPUTE_OFFSET); + } + + #if INCLUDE_CDS + void java_lang_module_ModuleDescriptor_Version::serialize_offsets(SerializeClosure* f) { + MODULE_DESCRIPTOR_VERSION_FIELDS_DO(FIELD_SERIALIZE_OFFSET); + } + #endif + + inline bool java_lang_module_ModuleDescriptor_Version::is_instance(oop obj) { + return obj != NULL && obj->klass() == SystemDictionary::ModuleDescriptor_Version_klass(); + } + + oop java_lang_module_ModuleDescriptor_Version::version(oop module_descriptor_version) { + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); + assert(java_lang_module_ModuleDescriptor_Version::is_instance(module_descriptor_version), "sanity"); + return module_descriptor_version->obj_field(version_offset); + } + Handle reflect_ConstantPool::create(TRAPS) { assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); InstanceKlass* k = SystemDictionary::reflect_ConstantPool_klass(); // Ensure it is initialized k->initialize(CHECK_NH);
< prev index next >