これらは, Java の型を表す文字列(Signature String)を扱うためのユーティリティ・クラス.
(なお Signature String とは "[Lfoo;D)I" みたいな文字列のこと)
Java の型を表す文字列(Signature String)を扱うためのユーティリティ・クラス (より正確に言うと, Signature String をパースしてフィールドの型情報を返す関数を納めた名前空間(AllStatic クラス)).
((cite: hotspot/src/share/vm/runtime/fieldType.hpp))
// A FieldType is used to determine the type of a field from a signature string.
((cite: hotspot/src/share/vm/runtime/fieldType.hpp))
class FieldType: public AllStatic {
HotSpot 内の様々な箇所で使用されている (#TODO).
(ciField や ciObjectFactory, SystemDictionary, constantPoolOopDesc, fieldDescriptor, などなど)
定義されている public メソッドは, 以下の通り.
(Signature String を表す Symbol オブジェクトを受け取って何らかの情報を返すメソッドばかり)
((cite: hotspot/src/share/vm/runtime/fieldType.hpp))
// Return basic type
static BasicType basic_type(Symbol* signature);
// Testing
static bool is_array(Symbol* signature) { return signature->utf8_length() > 1 && signature->byte_at(0) == '[' && is_valid_array_signature(signature); }
static bool is_obj(Symbol* signature) {
int sig_length = signature->utf8_length();
// Must start with 'L' and end with ';'
return (sig_length >= 2 &&
(signature->byte_at(0) == 'L') &&
(signature->byte_at(sig_length - 1) == ';'));
}
// Parse field and extract array information. Works for T_ARRAY only.
static BasicType get_array_info(Symbol* signature, FieldArrayInfo& ai, TRAPS);
コメントによると, FieldType は SignatureIterator のサブクラスにした方がいい. あるいは逆でもいい. どちらにせよ, FieldType というデータ構造についてはいつかの時点で考え直す必要がある, とのこと.
((cite: hotspot/src/share/vm/runtime/fieldType.hpp))
// Note: FieldType should be based on the SignatureIterator (or vice versa).
// In any case, this structure should be re-thought at some point.
See: here for details
FieldType クラス用の補助クラス (より正確に言うと FieldType::get_array_info() メソッド用の補助クラス).
配列型を表す Signature String から型情報を取得する作業中に使われる一時オブジェクト(StackObjクラス).
((cite: hotspot/src/share/vm/runtime/fieldType.hpp))
// Information returned by get_array_info, which is scoped to decrement
// reference count if a Symbol is created in the case of T_OBJECT
class FieldArrayInfo : public StackObj {
FieldArrayInfo 型の局所変数を宣言する.
その FieldArrayInfo オブジェクトを FieldType::get_array_info() で初期化する (指定した Signature String の情報が FieldArrayInfo オブジェクト内に格納される).
FieldArrayInfo クラスの各メソッドで配列の型情報にアクセスできる
以下の箇所で(のみ)使用されている.
定義されているフィールドはこれだけ (配列の次元数, 及び配列の要素の型).
((cite: hotspot/src/share/vm/runtime/fieldType.hpp))
int _dimension;
Symbol* _object_key;
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.