667 member_class == resolved_class ||
668 host_class->is_subclass_of(resolved_class) ||
669 resolved_class->is_subclass_of(host_class)) {
670 return true;
671 }
672 }
673 }
674 }
675
676 // package access
677 if (!access.is_private() && is_same_class_package(current_class, member_class)) {
678 return true;
679 }
680
681 // private access between different classes needs a nestmate check, but
682 // not for unsafe anonymous classes - so check host_class
683 if (access.is_private() && host_class == current_class) {
684 if (current_class->is_instance_klass() && member_class->is_instance_klass() ) {
685 InstanceKlass* cur_ik = const_cast<InstanceKlass*>(InstanceKlass::cast(current_class));
686 InstanceKlass* field_ik = const_cast<InstanceKlass*>(InstanceKlass::cast(member_class));
687 // Nestmate access checks may require resolution and validation of the nest-host.
688 // It is up to the caller to check for pending exceptions and handle appropriately.
689 bool access = cur_ik->has_nestmate_access_to(field_ik, CHECK_false);
690 if (access) {
691 guarantee(resolved_class->is_subclass_of(member_class), "must be!");
692 return true;
693 }
694 }
695 }
696
697 // Allow all accesses from jdk/internal/reflect/MagicAccessorImpl subclasses to
698 // succeed trivially.
699 if (current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
700 return true;
701 }
702
703 // Check for special relaxations
704 return can_relax_access_check_for(current_class, member_class, classloader_only);
705 }
706
707 bool Reflection::is_same_class_package(const Klass* class1, const Klass* class2) {
708 return InstanceKlass::cast(class1)->is_same_class_package(class2);
709 }
|
667 member_class == resolved_class ||
668 host_class->is_subclass_of(resolved_class) ||
669 resolved_class->is_subclass_of(host_class)) {
670 return true;
671 }
672 }
673 }
674 }
675
676 // package access
677 if (!access.is_private() && is_same_class_package(current_class, member_class)) {
678 return true;
679 }
680
681 // private access between different classes needs a nestmate check, but
682 // not for unsafe anonymous classes - so check host_class
683 if (access.is_private() && host_class == current_class) {
684 if (current_class->is_instance_klass() && member_class->is_instance_klass() ) {
685 InstanceKlass* cur_ik = const_cast<InstanceKlass*>(InstanceKlass::cast(current_class));
686 InstanceKlass* field_ik = const_cast<InstanceKlass*>(InstanceKlass::cast(member_class));
687 bool access = cur_ik->has_nestmate_access_to(field_ik, THREAD);
688 if (access) {
689 guarantee(resolved_class->is_subclass_of(member_class), "must be!");
690 return true;
691 }
692 }
693 }
694
695 // Allow all accesses from jdk/internal/reflect/MagicAccessorImpl subclasses to
696 // succeed trivially.
697 if (current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
698 return true;
699 }
700
701 // Check for special relaxations
702 return can_relax_access_check_for(current_class, member_class, classloader_only);
703 }
704
705 bool Reflection::is_same_class_package(const Klass* class1, const Klass* class2) {
706 return InstanceKlass::cast(class1)->is_same_class_package(class2);
707 }
|