4567 ClassLoaderData* const defining_loader_data = defined_klass->class_loader_data();
4568 if (defining_loader_data->is_the_null_class_loader_data()) {
4569 // Dependencies to null class loader data are implicit.
4570 return;
4571 } else {
4572 // add super class dependency
4573 Klass* const super = defined_klass->super();
4574 if (super != NULL) {
4575 defining_loader_data->record_dependency(super, CHECK);
4576 }
4577
4578 // add super interface dependencies
4579 const Array<Klass*>* const local_interfaces = defined_klass->local_interfaces();
4580 if (local_interfaces != NULL) {
4581 const int length = local_interfaces->length();
4582 for (int i = 0; i < length; i++) {
4583 defining_loader_data->record_dependency(local_interfaces->at(i), CHECK);
4584 }
4585 }
4586
4587 for (FieldStream st((InstanceKlass*)defined_klass, false, false); !st.eos(); st.next()) {
4588 Symbol* signature = st.signature();
4589 if (signature->starts_with("Q")) {
4590 Klass* klass = SystemDictionary::resolve_or_fail(signature,
4591 Handle(THREAD, defined_klass->class_loader()),
4592 Handle(THREAD, defined_klass->protection_domain()), true, CHECK);
4593 assert(klass != NULL, "Sanity check");
4594 assert(klass->access_flags().is_value_type(), "Value type expected");
4595 defining_loader_data->record_dependency(klass, CHECK);
4596 }
4597 }
4598 }
4599 }
4600
4601 // utility methods for appending an array with check for duplicates
4602
4603 static void append_interfaces(GrowableArray<Klass*>* result,
4604 const Array<Klass*>* const ifs) {
4605 // iterate over new interfaces
4606 for (int i = 0; i < ifs->length(); i++) {
4607 Klass* const e = ifs->at(i);
4608 assert(e->is_klass() && InstanceKlass::cast(e)->is_interface(), "just checking");
4609 // add new interface
4610 result->append_if_missing(e);
5727
5728 // Valhalla shady value type conversion
5729 if (_parsed_annotations->is_value_capable_class()) {
5730 ik->create_value_capable_class(Handle(THREAD, _loader_data->class_loader()),
5731 _protection_domain, CHECK);
5732 }
5733
5734 // Add read edges to the unnamed modules of the bootstrap and app class loaders.
5735 if (changed_by_loadhook && !module_handle.is_null() && module_entry->is_named() &&
5736 !module_entry->has_default_read_edges()) {
5737 if (!module_entry->set_has_default_read_edges()) {
5738 // We won a potential race
5739 JvmtiExport::add_default_read_edges(module_handle, THREAD);
5740 }
5741 }
5742
5743 // Update the loader_data graph.
5744 record_defined_class_dependencies(ik, CHECK);
5745
5746 for(int i = 0; i < ik->java_fields_count(); i++) {
5747 if (ik->field_signature(i)->starts_with("Q")) {
5748 Klass* klass = SystemDictionary::resolve_or_fail(ik->field_signature(i),
5749 Handle(THREAD, ik->class_loader()),
5750 Handle(THREAD, ik->protection_domain()), true, CHECK);
5751 assert(klass != NULL, "Sanity check");
5752 assert(klass->access_flags().is_value_type(), "Value type expected");
5753 ik->set_value_field_klass(i, klass);
5754 }
5755 }
5756
5757 ClassLoadingService::notify_class_loaded(ik, false /* not shared class */);
5758
5759 if (!is_internal()) {
5760 if (log_is_enabled(Info, class, load)) {
5761 ResourceMark rm;
5762 const char* module_name = (module_entry->name() == NULL) ? UNNAMED_MODULE : module_entry->name()->as_C_string();
5763 ik->print_class_load_logging(_loader_data, module_name, _stream);
5764 }
5765
5766 if (log_is_enabled(Debug, class, resolve)) {
5767 ResourceMark rm;
|
4567 ClassLoaderData* const defining_loader_data = defined_klass->class_loader_data();
4568 if (defining_loader_data->is_the_null_class_loader_data()) {
4569 // Dependencies to null class loader data are implicit.
4570 return;
4571 } else {
4572 // add super class dependency
4573 Klass* const super = defined_klass->super();
4574 if (super != NULL) {
4575 defining_loader_data->record_dependency(super, CHECK);
4576 }
4577
4578 // add super interface dependencies
4579 const Array<Klass*>* const local_interfaces = defined_klass->local_interfaces();
4580 if (local_interfaces != NULL) {
4581 const int length = local_interfaces->length();
4582 for (int i = 0; i < length; i++) {
4583 defining_loader_data->record_dependency(local_interfaces->at(i), CHECK);
4584 }
4585 }
4586
4587 for(int i = 0; i < defined_klass->java_fields_count(); i++) {
4588 if (defined_klass->field_signature(i)->starts_with("Q") && (((defined_klass->field_access_flags(i) & JVM_ACC_STATIC)) == 0)) {
4589 Klass* klass = SystemDictionary::resolve_or_fail(defined_klass->field_signature(i),
4590 Handle(THREAD, defined_klass->class_loader()),
4591 Handle(THREAD, defined_klass->protection_domain()), true, CHECK);
4592 assert(klass != NULL, "Sanity check");
4593 assert(klass->access_flags().is_value_type(), "Value type expected");
4594 defining_loader_data->record_dependency(klass, CHECK);
4595 }
4596 }
4597 }
4598 }
4599
4600 // utility methods for appending an array with check for duplicates
4601
4602 static void append_interfaces(GrowableArray<Klass*>* result,
4603 const Array<Klass*>* const ifs) {
4604 // iterate over new interfaces
4605 for (int i = 0; i < ifs->length(); i++) {
4606 Klass* const e = ifs->at(i);
4607 assert(e->is_klass() && InstanceKlass::cast(e)->is_interface(), "just checking");
4608 // add new interface
4609 result->append_if_missing(e);
5726
5727 // Valhalla shady value type conversion
5728 if (_parsed_annotations->is_value_capable_class()) {
5729 ik->create_value_capable_class(Handle(THREAD, _loader_data->class_loader()),
5730 _protection_domain, CHECK);
5731 }
5732
5733 // Add read edges to the unnamed modules of the bootstrap and app class loaders.
5734 if (changed_by_loadhook && !module_handle.is_null() && module_entry->is_named() &&
5735 !module_entry->has_default_read_edges()) {
5736 if (!module_entry->set_has_default_read_edges()) {
5737 // We won a potential race
5738 JvmtiExport::add_default_read_edges(module_handle, THREAD);
5739 }
5740 }
5741
5742 // Update the loader_data graph.
5743 record_defined_class_dependencies(ik, CHECK);
5744
5745 for(int i = 0; i < ik->java_fields_count(); i++) {
5746 if (ik->field_signature(i)->starts_with("Q") && (((ik->field_access_flags(i) & JVM_ACC_STATIC)) == 0)) {
5747 Klass* klass = SystemDictionary::resolve_or_fail(ik->field_signature(i),
5748 Handle(THREAD, ik->class_loader()),
5749 Handle(THREAD, ik->protection_domain()), true, CHECK);
5750 assert(klass != NULL, "Sanity check");
5751 assert(klass->access_flags().is_value_type(), "Value type expected");
5752 ik->set_value_field_klass(i, klass);
5753 }
5754 }
5755
5756 ClassLoadingService::notify_class_loaded(ik, false /* not shared class */);
5757
5758 if (!is_internal()) {
5759 if (log_is_enabled(Info, class, load)) {
5760 ResourceMark rm;
5761 const char* module_name = (module_entry->name() == NULL) ? UNNAMED_MODULE : module_entry->name()->as_C_string();
5762 ik->print_class_load_logging(_loader_data, module_name, _stream);
5763 }
5764
5765 if (log_is_enabled(Debug, class, resolve)) {
5766 ResourceMark rm;
|