13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_CLASSFILE_KLASSFACTORY_HPP
26 #define SHARE_CLASSFILE_KLASSFACTORY_HPP
27
28 #include "memory/allocation.hpp"
29 #include "runtime/handles.hpp"
30
31 class ClassFileStream;
32 class ClassLoaderData;
33 template <typename>
34 class GrowableArray;
35 class Klass;
36 class Symbol;
37 class TempNewSymbol;
38
39 /*
40 * KlassFactory is an interface to implementations of the following mapping/function:
41 *
42 * Summary: create a VM internal runtime representation ("Klass")
43 from a bytestream (classfile).
44 *
45 * Input: a named bytestream in the Java class file format (see JVMS, chapter 4).
46 * Output: a VM runtime representation of a Java class
47 *
48 * Pre-conditions:
49 * a non-NULL ClassFileStream* // the classfile bytestream
50 * a non-NULL Symbol* // the name of the class
51 * a non-NULL ClassLoaderData* // the metaspace allocator
52 * (no pending exceptions)
54 * Returns:
55 * if the returned value is non-NULL, that value is an indirection (pointer/handle)
56 * to a Klass. The caller will not have a pending exception.
57 *
58 * On broken invariants and/or runtime errors the returned value will be
59 * NULL (or a NULL handle) and the caller *might* now have a pending exception.
60 *
61 */
62
63 class KlassFactory : AllStatic {
64
65 // approved clients
66 friend class ClassLoader;
67 friend class ClassLoaderExt;
68 friend class SystemDictionary;
69
70 private:
71 static InstanceKlass* create_from_stream(ClassFileStream* stream,
72 Symbol* name,
73 ClassLoaderData* loader_data,
74 Handle protection_domain,
75 const InstanceKlass* unsafe_anonymous_host,
76 GrowableArray<Handle>* cp_patches,
77 TRAPS);
78 public:
79 static InstanceKlass* check_shared_class_file_load_hook(
80 InstanceKlass* ik,
81 Symbol* class_name,
82 Handle class_loader,
83 Handle protection_domain,
84 const ClassFileStream *cfs,
85 TRAPS);
86 };
87
88 #endif // SHARE_CLASSFILE_KLASSFACTORY_HPP
|
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_CLASSFILE_KLASSFACTORY_HPP
26 #define SHARE_CLASSFILE_KLASSFACTORY_HPP
27
28 #include "memory/allocation.hpp"
29 #include "runtime/handles.hpp"
30
31 class ClassFileStream;
32 class ClassLoaderData;
33 class ClassLoadInfo;
34 template <typename>
35 class GrowableArray;
36 class Klass;
37 class Symbol;
38 class TempNewSymbol;
39
40 /*
41 * KlassFactory is an interface to implementations of the following mapping/function:
42 *
43 * Summary: create a VM internal runtime representation ("Klass")
44 from a bytestream (classfile).
45 *
46 * Input: a named bytestream in the Java class file format (see JVMS, chapter 4).
47 * Output: a VM runtime representation of a Java class
48 *
49 * Pre-conditions:
50 * a non-NULL ClassFileStream* // the classfile bytestream
51 * a non-NULL Symbol* // the name of the class
52 * a non-NULL ClassLoaderData* // the metaspace allocator
53 * (no pending exceptions)
55 * Returns:
56 * if the returned value is non-NULL, that value is an indirection (pointer/handle)
57 * to a Klass. The caller will not have a pending exception.
58 *
59 * On broken invariants and/or runtime errors the returned value will be
60 * NULL (or a NULL handle) and the caller *might* now have a pending exception.
61 *
62 */
63
64 class KlassFactory : AllStatic {
65
66 // approved clients
67 friend class ClassLoader;
68 friend class ClassLoaderExt;
69 friend class SystemDictionary;
70
71 private:
72 static InstanceKlass* create_from_stream(ClassFileStream* stream,
73 Symbol* name,
74 ClassLoaderData* loader_data,
75 const ClassLoadInfo& cl_info,
76 TRAPS);
77 public:
78 static InstanceKlass* check_shared_class_file_load_hook(
79 InstanceKlass* ik,
80 Symbol* class_name,
81 Handle class_loader,
82 Handle protection_domain,
83 const ClassFileStream *cfs,
84 TRAPS);
85 };
86
87 #endif // SHARE_CLASSFILE_KLASSFACTORY_HPP
|