877 } else {
878 // klass is an array of primitives, module is java.base
879 module_is_named = true;
880 module_name_phrase = "module ";
881 module_name = JAVA_BASE_NAME;
882 len += JAVA_BASE_NAME_LEN;
883 }
884
885 // 3. class loader's name_and_id
886 ClassLoaderData* cld = class_loader_data();
887 assert(cld != NULL, "class_loader_data should not be null");
888 const char* loader_name_and_id = cld->loader_name_and_id();
889 len += strlen(loader_name_and_id);
890
891 // 4. include parent loader information
892 const char* parent_loader_phrase = "";
893 const char* parent_loader_name_and_id = "";
894 if (include_parent_loader &&
895 !cld->is_builtin_class_loader_data()) {
896 oop parent_loader = java_lang_ClassLoader::parent(class_loader());
897 ClassLoaderData *parent_cld = ClassLoaderData::class_loader_data(parent_loader);
898 assert(parent_cld != NULL, "parent's class loader data should not be null");
899 parent_loader_name_and_id = parent_cld->loader_name_and_id();
900 parent_loader_phrase = ", parent loader ";
901 len += strlen(parent_loader_phrase) + strlen(parent_loader_name_and_id);
902 }
903
904 // Start to construct final full class description string
905 len += ((use_are) ? strlen(" are in ") : strlen(" is in "));
906 len += strlen(module_name_phrase) + strlen(" of loader ");
907
908 char* class_description = NEW_RESOURCE_ARRAY_RETURN_NULL(char, len);
909
910 // Just return the FQN if error when allocating string
911 if (class_description == NULL) {
912 return klass_name;
913 }
914
915 jio_snprintf(class_description, len, "%s %s in %s%s%s%s of loader %s%s%s",
916 klass_name,
917 (use_are) ? "are" : "is",
|
877 } else {
878 // klass is an array of primitives, module is java.base
879 module_is_named = true;
880 module_name_phrase = "module ";
881 module_name = JAVA_BASE_NAME;
882 len += JAVA_BASE_NAME_LEN;
883 }
884
885 // 3. class loader's name_and_id
886 ClassLoaderData* cld = class_loader_data();
887 assert(cld != NULL, "class_loader_data should not be null");
888 const char* loader_name_and_id = cld->loader_name_and_id();
889 len += strlen(loader_name_and_id);
890
891 // 4. include parent loader information
892 const char* parent_loader_phrase = "";
893 const char* parent_loader_name_and_id = "";
894 if (include_parent_loader &&
895 !cld->is_builtin_class_loader_data()) {
896 oop parent_loader = java_lang_ClassLoader::parent(class_loader());
897 ClassLoaderData *parent_cld = SystemDictionary::register_loader(Handle(Thread::current(), parent_loader));
898 assert(parent_cld != NULL, "parent's class loader data should not be null");
899 parent_loader_name_and_id = parent_cld->loader_name_and_id();
900 parent_loader_phrase = ", parent loader ";
901 len += strlen(parent_loader_phrase) + strlen(parent_loader_name_and_id);
902 }
903
904 // Start to construct final full class description string
905 len += ((use_are) ? strlen(" are in ") : strlen(" is in "));
906 len += strlen(module_name_phrase) + strlen(" of loader ");
907
908 char* class_description = NEW_RESOURCE_ARRAY_RETURN_NULL(char, len);
909
910 // Just return the FQN if error when allocating string
911 if (class_description == NULL) {
912 return klass_name;
913 }
914
915 jio_snprintf(class_description, len, "%s %s in %s%s%s%s of loader %s%s%s",
916 klass_name,
917 (use_are) ? "are" : "is",
|