hotspot/src/share/vm/classfile/moduleEntry.hpp
changeset 46961 c9094b1e5f87
parent 46773 fb17cc9a6847
equal deleted inserted replaced
46959:1863b25339a9 46961:c9094b1e5f87
    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();