< prev index next >
src/hotspot/share/classfile/classFileParser.hpp
Print this page
rev 58565 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: duke
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com
@@ -35,10 +35,12 @@
class Annotations;
template <typename T>
class Array;
class ClassFileStream;
class ClassLoaderData;
+class ClassLoadInfo;
+class ClassInstanceInfo;
class CompressedLineNumberWriteStream;
class ConstMethod;
class FieldInfo;
template <typename T>
class GrowableArray;
@@ -107,15 +109,16 @@
private:
// Potentially unaligned pointer to various 16-bit entries in the class file
typedef void unsafe_u2;
const ClassFileStream* _stream; // Actual input stream
- const Symbol* _requested_name;
Symbol* _class_name;
mutable ClassLoaderData* _loader_data;
const InstanceKlass* _unsafe_anonymous_host;
GrowableArray<Handle>* _cp_patches; // overrides for CP entries
+ const bool _is_hidden;
+ const bool _can_access_vm_annotations;
int _num_patched_klasses;
int _max_num_patched_klasses;
int _orig_cp_size;
int _first_patched_klass_resolved_index;
@@ -199,18 +202,22 @@
bool _has_vanilla_constructor;
int _max_bootstrap_specifier_index; // detects BSS values
void parse_stream(const ClassFileStream* const stream, TRAPS);
+ void mangle_hidden_class_name(InstanceKlass* const ik);
+
void post_process_parsed_stream(const ClassFileStream* const stream,
ConstantPool* cp,
TRAPS);
void prepend_host_package_name(const InstanceKlass* unsafe_anonymous_host, TRAPS);
void fix_unsafe_anonymous_class_name(TRAPS);
- void fill_instance_klass(InstanceKlass* ik, bool cf_changed_in_CFLH, TRAPS);
+ void fill_instance_klass(InstanceKlass* ik, bool cf_changed_in_CFLH,
+ const ClassInstanceInfo& cl_inst_info, TRAPS);
+
void set_klass(InstanceKlass* instance);
void set_class_bad_constant_seen(short bad_constant);
short class_bad_constant_seen() { return _bad_constant_seen; }
void set_class_synthetic_flag(bool x) { _synthetic_flag = x; }
@@ -531,19 +538,17 @@
public:
ClassFileParser(ClassFileStream* stream,
Symbol* name,
ClassLoaderData* loader_data,
- Handle protection_domain,
- const InstanceKlass* unsafe_anonymous_host,
- GrowableArray<Handle>* cp_patches,
+ const ClassLoadInfo* cl_info,
Publicity pub_level,
TRAPS);
~ClassFileParser();
- InstanceKlass* create_instance_klass(bool cf_changed_in_CFLH, TRAPS);
+ InstanceKlass* create_instance_klass(bool cf_changed_in_CFLH, const ClassInstanceInfo& cl_inst_info, TRAPS);
const ClassFileStream* clone_stream() const;
void set_klass_to_deallocate(InstanceKlass* klass);
@@ -555,10 +560,11 @@
int itable_size() const { return _itable_size; }
u2 this_class_index() const { return _this_class_index; }
bool is_unsafe_anonymous() const { return _unsafe_anonymous_host != NULL; }
+ bool is_hidden() const { return _is_hidden; }
bool is_interface() const { return _access_flags.is_interface(); }
const InstanceKlass* unsafe_anonymous_host() const { return _unsafe_anonymous_host; }
const GrowableArray<Handle>* cp_patches() const { return _cp_patches; }
ClassLoaderData* loader_data() const { return _loader_data; }
< prev index next >