src/hotspot/share/classfile/classFileParser.cpp
changeset 53322 8ba5b3c76857
parent 52692 bffef37beacb
child 53333 fd6de53a0d6e
equal deleted inserted replaced
53321:2cdf4a989ee7 53322:8ba5b3c76857
  4482     const jint lh = Klass::instance_layout_helper(ik->size_helper(), true);
  4482     const jint lh = Klass::instance_layout_helper(ik->size_helper(), true);
  4483     ik->set_layout_helper(lh);
  4483     ik->set_layout_helper(lh);
  4484   }
  4484   }
  4485 }
  4485 }
  4486 
  4486 
  4487 // Attach super classes and interface classes to class loader data
       
  4488 static void record_defined_class_dependencies(const InstanceKlass* defined_klass,
       
  4489                                               TRAPS) {
       
  4490   assert(defined_klass != NULL, "invariant");
       
  4491 
       
  4492   ClassLoaderData* const defining_loader_data = defined_klass->class_loader_data();
       
  4493   if (defining_loader_data->is_the_null_class_loader_data()) {
       
  4494       // Dependencies to null class loader data are implicit.
       
  4495       return;
       
  4496   } else {
       
  4497     // add super class dependency
       
  4498     Klass* const super = defined_klass->super();
       
  4499     if (super != NULL) {
       
  4500       defining_loader_data->record_dependency(super);
       
  4501     }
       
  4502 
       
  4503     // add super interface dependencies
       
  4504     const Array<InstanceKlass*>* const local_interfaces = defined_klass->local_interfaces();
       
  4505     if (local_interfaces != NULL) {
       
  4506       const int length = local_interfaces->length();
       
  4507       for (int i = 0; i < length; i++) {
       
  4508         defining_loader_data->record_dependency(local_interfaces->at(i));
       
  4509       }
       
  4510     }
       
  4511   }
       
  4512 }
       
  4513 
       
  4514 // utility methods for appending an array with check for duplicates
  4487 // utility methods for appending an array with check for duplicates
  4515 
  4488 
  4516 static void append_interfaces(GrowableArray<InstanceKlass*>* result,
  4489 static void append_interfaces(GrowableArray<InstanceKlass*>* result,
  4517                               const Array<InstanceKlass*>* const ifs) {
  4490                               const Array<InstanceKlass*>* const ifs) {
  4518   // iterate over new interfaces
  4491   // iterate over new interfaces
  5714     if (!module_entry->set_has_default_read_edges()) {
  5687     if (!module_entry->set_has_default_read_edges()) {
  5715       // We won a potential race
  5688       // We won a potential race
  5716       JvmtiExport::add_default_read_edges(module_handle, THREAD);
  5689       JvmtiExport::add_default_read_edges(module_handle, THREAD);
  5717     }
  5690     }
  5718   }
  5691   }
  5719 
       
  5720   // Update the loader_data graph.
       
  5721   record_defined_class_dependencies(ik, CHECK);
       
  5722 
  5692 
  5723   ClassLoadingService::notify_class_loaded(ik, false /* not shared class */);
  5693   ClassLoadingService::notify_class_loaded(ik, false /* not shared class */);
  5724 
  5694 
  5725   if (!is_internal()) {
  5695   if (!is_internal()) {
  5726     if (log_is_enabled(Info, class, load)) {
  5696     if (log_is_enabled(Info, class, load)) {