< prev index next >
src/hotspot/share/classfile/systemDictionary.cpp
Print this page
*** 253,263 ****
"can not load classes with compiler thread: class=%s, classloader=%s",
class_name->as_C_string(),
class_loader.is_null() ? "null" : class_loader->klass()->name()->as_C_string());
if (FieldType::is_array(class_name)) {
return resolve_array_class_or_null(class_name, class_loader, protection_domain, THREAD);
! } else if (FieldType::is_obj(class_name) || FieldType::is_valuetype(class_name)) {
ResourceMark rm(THREAD);
// Ignore wrapping L and ;. (and Q and ; for value types);
TempNewSymbol name = SymbolTable::new_symbol(class_name->as_C_string() + 1,
class_name->utf8_length() - 2, CHECK_NULL);
return resolve_instance_class_or_null(name, class_loader, protection_domain, THREAD);
--- 253,263 ----
"can not load classes with compiler thread: class=%s, classloader=%s",
class_name->as_C_string(),
class_loader.is_null() ? "null" : class_loader->klass()->name()->as_C_string());
if (FieldType::is_array(class_name)) {
return resolve_array_class_or_null(class_name, class_loader, protection_domain, THREAD);
! } else if (FieldType::is_obj(class_name)) {
ResourceMark rm(THREAD);
// Ignore wrapping L and ;. (and Q and ; for value types);
TempNewSymbol name = SymbolTable::new_symbol(class_name->as_C_string() + 1,
class_name->utf8_length() - 2, CHECK_NULL);
return resolve_instance_class_or_null(name, class_loader, protection_domain, THREAD);
*** 296,334 ****
k = TypeArrayKlass::cast(k)->array_klass(fd.dimension(), CHECK_NULL);
}
return k;
}
- // Temporary Minimal Value Type support code. Attempt to load VCC for DVT descriptor
- Klass* SystemDictionary::resolve_dvt_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS) {
- assert(EnableMVT && FieldType::is_dvt_postfix(class_name), "Invariant");
-
- ResourceMark rm(THREAD);
- // Given a "Q-type" descriptor and EnableMVT, original exception is not so interesting
- CLEAR_PENDING_EXCEPTION;
-
- TempNewSymbol vcc_name = SymbolTable::new_symbol(FieldType::dvt_unmangle_vcc(class_name), CHECK_NULL);
- Klass* vcc = do_resolve_instance_class_or_null(vcc_name, class_loader, protection_domain, CHECK_NULL);
- if (vcc == NULL) {
- return NULL;
- }
- Klass* dvt = do_resolve_instance_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL);
- if ((dvt !=NULL) && dvt->is_value() && (ValueKlass::cast(dvt)->get_vcc_klass() == vcc)) {
- return dvt;
- }
- if (vcc->is_instance_klass() && (!InstanceKlass::cast(vcc)->has_vcc_annotation())) {
- static const char not_vcc_msg[] =
- "Failed to resolve %s, found possible ValueCapableClass name mangle match is not ValueCapableClass annotated: %s";
- size_t buflen = strlen(not_vcc_msg) + class_name->utf8_length() + vcc_name->utf8_length();
- char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen);
- jio_snprintf(buf, buflen, not_vcc_msg, class_name->as_C_string(), vcc_name->as_C_string());
- THROW_MSG_NULL(vmSymbols::java_lang_NoClassDefFoundError(), buf);
- }
- return NULL;
- }
-
-
// Must be called for any super-class or super-interface resolution
// during class definition to allow class circularity checking
// super-interface callers:
// parse_interfaces - for defineClass & jvmtiRedefineClasses
// super-class callers:
--- 296,305 ----
*** 682,694 ****
Klass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
Handle class_loader,
Handle protection_domain,
TRAPS) {
Klass* k = do_resolve_instance_class_or_null(name, class_loader, protection_domain, THREAD);
- if (EnableMVT && (k == NULL) && FieldType::is_dvt_postfix(name)) {
- k = resolve_dvt_or_null(name, class_loader, protection_domain, THREAD);
- }
return k;
}
// Be careful when modifying this code: once you have run
// placeholders()->find_and_add(PlaceholderTable::LOAD_INSTANCE),
--- 653,662 ----
*** 697,707 ****
Klass* SystemDictionary::do_resolve_instance_class_or_null(Symbol* name,
Handle class_loader,
Handle protection_domain,
TRAPS) {
assert(name != NULL && !FieldType::is_array(name) &&
! !FieldType::is_obj(name) && !FieldType::is_valuetype(name), "invalid class name");
EventClassLoad class_load_start_event;
HandleMark hm(THREAD);
--- 665,675 ----
Klass* SystemDictionary::do_resolve_instance_class_or_null(Symbol* name,
Handle class_loader,
Handle protection_domain,
TRAPS) {
assert(name != NULL && !FieldType::is_array(name) &&
! !FieldType::is_obj(name), "invalid class name");
EventClassLoad class_load_start_event;
HandleMark hm(THREAD);
< prev index next >