8363816: Refactor array name creation

Reviewed-by: shade, ccheung, dholmes
This commit is contained in:
Coleen Phillimore 2025-07-23 14:48:49 +00:00
parent 743c821289
commit 38cd860daa
2 changed files with 26 additions and 19 deletions

View File

@ -53,6 +53,26 @@ ObjArrayKlass* ObjArrayKlass::allocate_klass(ClassLoaderData* loader_data, int n
return new (loader_data, size, THREAD) ObjArrayKlass(n, k, name);
}
Symbol* ObjArrayKlass::create_element_klass_array_name(JavaThread* current, Klass* element_klass) {
ResourceMark rm(current);
char* name_str = element_klass->name()->as_C_string();
int len = element_klass->name()->utf8_length();
char* new_str = NEW_RESOURCE_ARRAY_IN_THREAD(current, char, len + 4);
int idx = 0;
new_str[idx++] = JVM_SIGNATURE_ARRAY;
if (element_klass->is_instance_klass()) { // it could be an array or simple type
new_str[idx++] = JVM_SIGNATURE_CLASS;
}
memcpy(&new_str[idx], name_str, len * sizeof(char));
idx += len;
if (element_klass->is_instance_klass()) {
new_str[idx++] = JVM_SIGNATURE_ENDCLASS;
}
new_str[idx] = '\0';
return SymbolTable::new_symbol(new_str);
}
ObjArrayKlass* ObjArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_data,
int n, Klass* element_klass, TRAPS) {
@ -79,25 +99,7 @@ ObjArrayKlass* ObjArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_da
}
// Create type name for klass.
Symbol* name = nullptr;
{
ResourceMark rm(THREAD);
char *name_str = element_klass->name()->as_C_string();
int len = element_klass->name()->utf8_length();
char *new_str = NEW_RESOURCE_ARRAY(char, len + 4);
int idx = 0;
new_str[idx++] = JVM_SIGNATURE_ARRAY;
if (element_klass->is_instance_klass()) { // it could be an array or simple type
new_str[idx++] = JVM_SIGNATURE_CLASS;
}
memcpy(&new_str[idx], name_str, len * sizeof(char));
idx += len;
if (element_klass->is_instance_klass()) {
new_str[idx++] = JVM_SIGNATURE_ENDCLASS;
}
new_str[idx++] = '\0';
name = SymbolTable::new_symbol(new_str);
}
Symbol* name = create_element_klass_array_name(THREAD, element_klass);
// Initialize instance variables
ObjArrayKlass* oak = ObjArrayKlass::allocate_klass(loader_data, n, element_klass, name, CHECK_NULL);

View File

@ -52,6 +52,11 @@ class ObjArrayKlass : public ArrayKlass {
static ObjArrayKlass* allocate_klass(ClassLoaderData* loader_data, int n, Klass* k, Symbol* name, TRAPS);
objArrayOop allocate_instance(int length, TRAPS);
protected:
// Create array_name for element klass
static Symbol* create_element_klass_array_name(JavaThread* current, Klass* element_klass);
public:
// For dummy objects
ObjArrayKlass() {}