25 #ifndef SHARE_VM_CLASSFILE_MODULEENTRY_HPP |
25 #ifndef SHARE_VM_CLASSFILE_MODULEENTRY_HPP |
26 #define SHARE_VM_CLASSFILE_MODULEENTRY_HPP |
26 #define SHARE_VM_CLASSFILE_MODULEENTRY_HPP |
27 |
27 |
28 #include "classfile/classLoaderData.hpp" |
28 #include "classfile/classLoaderData.hpp" |
29 #include "classfile/vmSymbols.hpp" |
29 #include "classfile/vmSymbols.hpp" |
|
30 #include "oops/oopHandle.hpp" |
30 #include "oops/symbol.hpp" |
31 #include "oops/symbol.hpp" |
31 #include "prims/jni.h" |
32 #include "prims/jni.h" |
32 #include "runtime/jniHandles.hpp" |
33 #include "runtime/jniHandles.hpp" |
33 #include "runtime/mutexLocker.hpp" |
34 #include "runtime/mutexLocker.hpp" |
34 #include "trace/traceMacros.hpp" |
35 #include "trace/traceMacros.hpp" |
54 // |
55 // |
55 // The Mutex Module_lock is shared between ModuleEntry and PackageEntry, to lock either |
56 // The Mutex Module_lock is shared between ModuleEntry and PackageEntry, to lock either |
56 // data structure. |
57 // data structure. |
57 class ModuleEntry : public HashtableEntry<Symbol*, mtModule> { |
58 class ModuleEntry : public HashtableEntry<Symbol*, mtModule> { |
58 private: |
59 private: |
59 jobject _module; // java.lang.Module |
60 OopHandle _module; // java.lang.Module |
60 jobject _pd; // java.security.ProtectionDomain, cached |
61 OopHandle _pd; // java.security.ProtectionDomain, cached |
61 // for shared classes from this module |
62 // for shared classes from this module |
62 ClassLoaderData* _loader_data; |
63 ClassLoaderData* _loader_data; |
63 GrowableArray<ModuleEntry*>* _reads; // list of modules that are readable by this module |
64 GrowableArray<ModuleEntry*>* _reads; // list of modules that are readable by this module |
64 Symbol* _version; // module version number |
65 Symbol* _version; // module version number |
65 Symbol* _location; // module location |
66 Symbol* _location; // module location |
87 } |
88 } |
88 |
89 |
89 Symbol* name() const { return literal(); } |
90 Symbol* name() const { return literal(); } |
90 void set_name(Symbol* n) { set_literal(n); } |
91 void set_name(Symbol* n) { set_literal(n); } |
91 |
92 |
92 oop module() const { return JNIHandles::resolve(_module); } |
93 oop module() const { return _module.resolve(); } |
93 jobject module_handle() const { return _module; } |
94 OopHandle module_handle() const { return _module; } |
94 void set_module(jobject j) { _module = j; } |
95 void set_module(OopHandle j) { _module = j; } |
95 |
96 |
96 // The shared ProtectionDomain reference is set once the VM loads a shared class |
97 // The shared ProtectionDomain reference is set once the VM loads a shared class |
97 // originated from the current Module. The referenced ProtectionDomain object is |
98 // originated from the current Module. The referenced ProtectionDomain object is |
98 // created by the ClassLoader when loading a class (shared or non-shared) from the |
99 // created by the ClassLoader when loading a class (shared or non-shared) from the |
99 // Module for the first time. This ProtectionDomain object is used for all |
100 // Module for the first time. This ProtectionDomain object is used for all |
100 // classes from the Module loaded by the same ClassLoader. |
101 // classes from the Module loaded by the same ClassLoader. |
101 Handle shared_protection_domain(); |
102 oop shared_protection_domain(); |
102 void set_shared_protection_domain(ClassLoaderData *loader_data, Handle pd); |
103 void set_shared_protection_domain(ClassLoaderData *loader_data, Handle pd); |
103 |
104 |
104 ClassLoaderData* loader_data() const { return _loader_data; } |
105 ClassLoaderData* loader_data() const { return _loader_data; } |
105 void set_loader_data(ClassLoaderData* l) { _loader_data = l; } |
106 void set_loader_data(ClassLoaderData* l) { _loader_data = l; } |
106 |
107 |
244 // Special handling for java.base |
245 // Special handling for java.base |
245 static ModuleEntry* javabase_moduleEntry() { return _javabase_module; } |
246 static ModuleEntry* javabase_moduleEntry() { return _javabase_module; } |
246 static void set_javabase_moduleEntry(ModuleEntry* java_base) { _javabase_module = java_base; } |
247 static void set_javabase_moduleEntry(ModuleEntry* java_base) { _javabase_module = java_base; } |
247 |
248 |
248 static bool javabase_defined() { return ((_javabase_module != NULL) && |
249 static bool javabase_defined() { return ((_javabase_module != NULL) && |
249 (_javabase_module->module_handle() != NULL)); } |
250 (_javabase_module->module() != NULL)); } |
250 static void finalize_javabase(Handle module_handle, Symbol* version, Symbol* location); |
251 static void finalize_javabase(Handle module_handle, Symbol* version, Symbol* location); |
251 static void patch_javabase_entries(Handle module_handle); |
252 static void patch_javabase_entries(Handle module_handle); |
252 |
253 |
253 void print(outputStream* st = tty); |
254 void print(outputStream* st = tty); |
254 void verify(); |
255 void verify(); |