< prev index next >
src/hotspot/share/oops/instanceKlass.hpp
Print this page
rev 58760 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: alanb, cjplummer, coleenp, dholmes, dlong, forax, jlahoda, psandoz, plevart, vromero
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, jan.lahoda@oracle.com, amy.lu@oracle.com
*** 193,203 ****
// The NestHost attribute. The class info index for the class
// that is the nest-host of this class. This data has not been validated.
jushort _nest_host_index;
! // Resolved nest-host klass: either true nest-host or self if we are not nested.
// By always being set it makes nest-member access checks simpler.
InstanceKlass* _nest_host;
// The contents of the Record attribute.
Array<RecordComponent*>* _record_components;
--- 193,206 ----
// The NestHost attribute. The class info index for the class
// that is the nest-host of this class. This data has not been validated.
jushort _nest_host_index;
! // Resolved nest-host klass: either true nest-host or self if we are not
! // nested, or an error occurred resolving or validating the nominated
! // nest-host. Can also be set directly by JDK API's that establish nest
! // relationships.
// By always being set it makes nest-member access checks simpler.
InstanceKlass* _nest_host;
// The contents of the Record attribute.
Array<RecordComponent*>* _record_components;
*** 467,476 ****
--- 470,481 ----
void set_nest_members(Array<u2>* m) { _nest_members = m; }
// nest-host index
jushort nest_host_index() const { return _nest_host_index; }
void set_nest_host_index(u2 i) { _nest_host_index = i; }
+ // dynamic nest member support
+ void set_nest_host(InstanceKlass* host, TRAPS);
// record components
Array<RecordComponent*>* record_components() const { return _record_components; }
void set_record_components(Array<RecordComponent*>* record_components) {
_record_components = record_components;
*** 480,492 ****
private:
// Called to verify that k is a member of this nest - does not look at k's nest-host
bool has_nest_member(InstanceKlass* k, TRAPS) const;
public:
! // Returns nest-host class, resolving and validating it if needed
! // Returns NULL if an exception occurs during loading, or validation fails
! InstanceKlass* nest_host(Symbol* validationException, TRAPS);
// Check if this klass is a nestmate of k - resolves this nest-host and k's
bool has_nestmate_access_to(InstanceKlass* k, TRAPS);
enum InnerClassAttributeOffset {
// From http://mirror.eng/products/jdk/1.1/docs/guide/innerclasses/spec/innerclasses.doc10.html#18814
--- 485,501 ----
private:
// Called to verify that k is a member of this nest - does not look at k's nest-host
bool has_nest_member(InstanceKlass* k, TRAPS) const;
public:
! // Used to construct informative IllegalAccessError messages at a higher level,
! // if there was an issue resolving or validating the nest host.
! // Returns NULL if there was no error.
! const char* nest_host_error(TRAPS);
! // Returns nest-host class, resolving and validating it if needed.
! // Returns NULL if resolution is not possible from the calling context.
! InstanceKlass* nest_host(TRAPS);
// Check if this klass is a nestmate of k - resolves this nest-host and k's
bool has_nestmate_access_to(InstanceKlass* k, TRAPS);
enum InnerClassAttributeOffset {
// From http://mirror.eng/products/jdk/1.1/docs/guide/innerclasses/spec/innerclasses.doc10.html#18814
*** 810,821 ****
_misc_flags &= ~_misc_has_passed_fingerprint_check;
}
}
bool supers_have_passed_fingerprint_checks();
! static bool should_store_fingerprint(bool is_unsafe_anonymous);
! bool should_store_fingerprint() const { return should_store_fingerprint(is_unsafe_anonymous()); }
bool has_stored_fingerprint() const;
uint64_t get_stored_fingerprint() const;
void store_fingerprint(uint64_t fingerprint);
bool is_scratch_class() const {
--- 819,830 ----
_misc_flags &= ~_misc_has_passed_fingerprint_check;
}
}
bool supers_have_passed_fingerprint_checks();
! static bool should_store_fingerprint(bool is_hidden_or_anonymous);
! bool should_store_fingerprint() const { return should_store_fingerprint(is_hidden() || is_unsafe_anonymous()); }
bool has_stored_fingerprint() const;
uint64_t get_stored_fingerprint() const;
void store_fingerprint(uint64_t fingerprint);
bool is_scratch_class() const {
< prev index next >