hotspot/src/share/vm/classfile/systemDictionary.cpp
// Forwards to resolve_instance_class_or_null
klassOop SystemDictionary::resolve_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS) {
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(!THREAD->is_Compiler_thread(), "Can not load classes with the Compiler thread");
{- -------------------------------------------
(1) 結果を取得する.
取得は, 型に応じて以下のように行う.
* 配列クラスの場合:
SystemDictionary::resolve_array_class_or_null() で取得する.
* 配列クラスではない場合
SystemDictionary::resolve_instance_class_or_null() で取得する.
(なお, オブジェクト型のクラスの場合は, 型シグネチャの最初の'L'と最後の';'は除去して呼び出す)
(<= これに引っかからないケース(最後の else のケース)はプリミティブ型のクラスの場合? #TODO)
---------------------------------------- -}
if (FieldType::is_array(class_name)) {
return resolve_array_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL);
} else if (FieldType::is_obj(class_name)) {
ResourceMark rm(THREAD);
// Ignore wrapping L and ;.
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, CHECK_NULL);
} else {
return resolve_instance_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL);
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.