hotspot/src/share/vm/runtime/reflection.cpp
changeset 22215 579f4a1a4aa6
parent 21729 6fe1dafeb82e
child 22551 9bf46d16dcc6
equal deleted inserted replaced
22214:c551021e75b2 22215:579f4a1a4aa6
   535       (current_class == field_class) ||
   535       (current_class == field_class) ||
   536       access.is_public()) {
   536       access.is_public()) {
   537     return true;
   537     return true;
   538   }
   538   }
   539 
   539 
       
   540   Klass* host_class = current_class;
       
   541   while (host_class->oop_is_instance() &&
       
   542          InstanceKlass::cast(host_class)->is_anonymous()) {
       
   543     Klass* next_host_class = InstanceKlass::cast(host_class)->host_klass();
       
   544     if (next_host_class == NULL)  break;
       
   545     host_class = next_host_class;
       
   546   }
       
   547   if (host_class == field_class) {
       
   548     return true;
       
   549   }
       
   550 
   540   if (access.is_protected()) {
   551   if (access.is_protected()) {
   541     if (!protected_restriction) {
   552     if (!protected_restriction) {
   542       // See if current_class is a subclass of field_class
   553       // See if current_class (or outermost host class) is a subclass of field_class
   543       if (current_class->is_subclass_of(field_class)) {
   554       if (host_class->is_subclass_of(field_class)) {
   544         if (access.is_static() || // static fields are ok, see 6622385
   555         if (access.is_static() || // static fields are ok, see 6622385
   545             current_class == resolved_class ||
   556             current_class == resolved_class ||
   546             field_class == resolved_class ||
   557             field_class == resolved_class ||
   547             current_class->is_subclass_of(resolved_class) ||
   558             host_class->is_subclass_of(resolved_class) ||
   548             resolved_class->is_subclass_of(current_class)) {
   559             resolved_class->is_subclass_of(host_class)) {
   549           return true;
   560           return true;
   550         }
   561         }
   551       }
   562       }
   552     }
   563     }
   553   }
   564   }