パッケージ org.springframework.asm
クラス ClassReader
java.lang.ObjectSE
org.springframework.asm.ClassReader
Java 仮想マシン仕様(JVMS)で定義されているように、
ClassVisitor
に ClassFile 構造を訪問させるパーサー。このクラスは、ClassFile コンテンツを解析し、発生したフィールド、メソッド、バイトコード命令ごとに、指定された ClassVisitor
の適切な訪問メソッドを呼び出します。- 作成者:
- Eric Bruneton, Eugene Kuleshov
- 関連事項:
フィールドサマリー
修飾子と型フィールド説明final byte[]
使用すべきではありません。static final int
スタックマップフレームを展開するフラグ。final int
ClassFile の access_flags フィールドのバイト単位のオフセット。static final int
コード属性をスキップするためのフラグ。static final int
SourceFile、SourceDebugExtension、LocalVariableTable、LocalVariableTypeTable、LineNumberTable、MethodParameters 属性をスキップするためのフラグ。static final int
StackMap および StackMapTable 属性をスキップするためのフラグ。コンストラクターのサマリー
コンストラクター説明ClassReader
(byte[] classFile) 新しいClassReader
オブジェクトを構築します。ClassReader
(byte[] classFileBuffer, int classFileOffset, int classFileLength) 新しいClassReader
オブジェクトを構築します。ClassReader
(InputStreamSE inputStream) 新しいClassReader
オブジェクトを構築します。ClassReader
(StringSE className) 新しいClassReader
オブジェクトを構築します。メソッドのサマリー
修飾子と型メソッド説明void
accept
(ClassVisitor classVisitor, int parsingOptions) このClassReader
のコンストラクターに渡された JVMS ClassFile 構造体を、指定された訪問者に訪問させます。void
accept
(ClassVisitor classVisitor, Attribute[] attributePrototypes, int parsingOptions) このClassReader
のコンストラクターに渡された JVMS ClassFile 構造体を、指定された訪問者に訪問させます。int
クラスのアクセスフラグを返します(Opcodes
を参照)。クラスの内部名を返します(Type.getInternalName()
を参照)。StringSE[]
実装されたインターフェースの内部名を返します(Type.getInternalName()
を参照)。int
getItem
(int constantPoolEntryIndex) このClassReader
の JVMS 'cp_info' 構造の開始オフセットを返します(つまりint
クラスの定数プールテーブルのエントリ数を返します。int
クラスの定数プールテーブルに含まれる文字列の最大長の控えめな見積もりを返します。スーパークラスの内部名を返します (Type.getInternalName()
を参照)。int
readByte
(int offset) このClassReader
のバイト値を読み取ります。protected void
readBytecodeInstructionOffset
(int bytecodeOffset) accept(ClassVisitor,int)
で次にアクセスする命令のバイトコードオフセットを処理します。readClass
(int offset, char[] charBuffer) このClassReader
の CONSTANT_Class 定数プールエントリを読み取ります。readConst
(int constantPoolEntryIndex, char[] charBuffer) このClassReader
の数値または文字列定数プールエントリを読み取ります。int
readInt
(int offset) このClassReader
の signed int 値を読み取ります。protected Label
指定されたバイトコードオフセットに対応するラベルを返します。long
readLong
(int offset) このClassReader
の符号付き long 値を読み取ります。readModule
(int offset, char[] charBuffer) このClassReader
の CONSTANT_Module 定数プールエントリを読み取ります。readPackage
(int offset, char[] charBuffer) このClassReader
の CONSTANT_Package 定数プールエントリを読み取ります。short
readShort
(int offset) このClassReader
の符号付き short 値を読み取ります。int
readUnsignedShort
(int offset) このClassReader
の符号なし short 値を読み取ります。readUTF8
(int offset, char[] charBuffer) このClassReader
の CONSTANT_Utf8 定数プールエントリを読み取ります。
フィールドの詳細
SKIP_CODE
public static final int SKIP_CODEコード属性をスキップするためのフラグ。このフラグが設定されている場合、コード属性は解析も訪問もされません。- 関連事項:
SKIP_DEBUG
public static final int SKIP_DEBUGSourceFile、SourceDebugExtension、LocalVariableTable、LocalVariableTypeTable、LineNumberTable、MethodParameters 属性をスキップするためのフラグ。このフラグが設定されている場合、これらの属性は解析も訪問もされません(つまり、ClassVisitor.visitSource(java.lang.String, java.lang.String)
、MethodVisitor.visitLocalVariable(java.lang.String, java.lang.String, java.lang.String, org.springframework.asm.Label, org.springframework.asm.Label, int)
、MethodVisitor.visitLineNumber(int, org.springframework.asm.Label)
、MethodVisitor.visitParameter(java.lang.String, int)
は呼び出されません)。- 関連事項:
SKIP_FRAMES
public static final int SKIP_FRAMESStackMap および StackMapTable 属性をスキップするためのフラグ。このフラグが設定されている場合、これらの属性は解析も訪問もされません(つまり、MethodVisitor.visitFrame(int, int, java.lang.Object[], int, java.lang.Object[])
は呼び出されません)。このフラグは、ClassWriter.COMPUTE_FRAMES
オプションが使用されている場合に役立ちます。無視されて最初から再計算されるフレームにアクセスするのを回避します。- 関連事項:
EXPAND_FRAMES
public static final int EXPAND_FRAMESスタックマップフレームを展開するフラグ。デフォルトでは、スタックマップフレームは元の形式でアクセスされます(つまり、バージョンが V1_6 未満のクラスの場合は「展開」され、他のクラスの場合は「圧縮」されます)。このフラグが設定されている場合、スタックマップフレームは常に拡張形式でアクセスされます(このオプションは、ClassReader および ClassWriter に解凍 / 圧縮ステップを追加し、パフォーマンスを大幅に低下させます)。- 関連事項:
b
使用すべきではありません。代わりにreadByte(int)
および他の読み取り方法を使用してください。このフィールドは最終的に削除されます。解析される JVMS ClassFile 構造を含むバイト配列。header
public final int headerClassFile の access_flags フィールドのバイト単位のオフセット。
コンストラクターの詳細
ClassReader
public ClassReader(byte[] classFile) 新しいClassReader
オブジェクトを構築します。- パラメーター:
classFile
- 読み取る JVMS ClassFile 構造。
ClassReader
public ClassReader(byte[] classFileBuffer, int classFileOffset, int classFileLength) 新しいClassReader
オブジェクトを構築します。- パラメーター:
classFileBuffer
- 読み取る JVMS ClassFile 構造を含むバイト配列。classFileOffset
- 読み取られる ClassFile の最初のバイトの byteBuffer 内のオフセット。classFileLength
- 読み取る ClassFile の長さ(バイト)。
ClassReader
新しいClassReader
オブジェクトを構築します。- パラメーター:
inputStream
- 読み取る JVMS ClassFile 構造の入力ストリームこの入力ストリームには、ClassFile 構造自体のみを含める必要があります。現在の位置から最後まで読み取られます。- 例外:
IOExceptionSE
- 読み込み中に問題が発生した場合。
ClassReader
新しいClassReader
オブジェクトを構築します。- パラメーター:
className
- 読み取るクラスの完全修飾名。ClassFile 構造は、現在のクラスローダーのClassLoader.getSystemResourceAsStream(java.lang.String)
SE で取得されます。- 例外:
IOExceptionSE
- 読み取り中に例外が発生した場合。
メソッドの詳細
getAccess
public int getAccess()クラスのアクセスフラグを返します(Opcodes
を参照)。バイトコードが 1.5 の前にあり、これらのフラグが属性で表されている場合、この値は非推奨フラグと合成フラグを反映しない場合があります。- 戻り値:
- クラスアクセスフラグ。
- 関連事項:
getClassName
クラスの内部名を返します(Type.getInternalName()
を参照)。- 戻り値:
- 内部クラス名。
- 関連事項:
getSuperName
スーパークラスの内部名を返します (Type.getInternalName()
を参照)。インターフェースの場合、スーパークラスはObject
SE です。- 戻り値:
- スーパークラスの内部名。
Object
SE クラスの場合は null。 - 関連事項:
getInterfaces
実装されたインターフェースの内部名を返します(Type.getInternalName()
を参照)。- 戻り値:
- 直接実装されたインターフェースの内部名。継承された実装インターフェースは返されません。
- 関連事項:
accept
このClassReader
のコンストラクターに渡された JVMS ClassFile 構造体を、指定された訪問者に訪問させます。- パラメーター:
classVisitor
- このクラスを訪問しなければならない訪問者。parsingOptions
- このクラスの解析に使用するオプション。SKIP_CODE
、SKIP_DEBUG
、SKIP_FRAMES
またはEXPAND_FRAMES
の 1 つ以上。
accept
このClassReader
のコンストラクターに渡された JVMS ClassFile 構造体を、指定された訪問者に訪問させます。- パラメーター:
classVisitor
- このクラスを訪問しなければならない訪問者。attributePrototypes
- クラスの訪問中に解析する必要がある属性のプロトタイプ。型がプロトタイプの型と等しくない属性は解析されません。そのバイト配列値は変更されずに ClassWriter に渡されます。 この値に定数プールへの参照が含まれている場合、またはリーダーとライター間のクラスアダプターによって変換されたクラス要素との構文リンクまたはセマンティックリンクがある場合、これにより破損する可能性があります。parsingOptions
- このクラスの解析に使用するオプション。SKIP_CODE
、SKIP_DEBUG
、SKIP_FRAMES
またはEXPAND_FRAMES
の 1 つ以上。
readBytecodeInstructionOffset
protected void readBytecodeInstructionOffset(int bytecodeOffset) accept(ClassVisitor,int)
で次にアクセスする命令のバイトコードオフセットを処理します。このメソッドは、命令の直前、関連するラベルとスタックマップフレーム (存在する場合) の前に呼び出されます。このメソッドのデフォルトの実装では何も行われません。サブクラスは、このメソッドをオーバーライドして可変フィールドに引数を格納することができます。これにより、MethodVisitor
インスタンスは、アクセスされた各命令のバイトコードオフセットを取得できます (その場合、可変データに関連する通常の並行性の課題に対処する必要があります)。- パラメーター:
bytecodeOffset
- 次にアクセスされる命令のバイトコードオフセット。
readLabel
指定されたバイトコードオフセットに対応するラベルを返します。このメソッドのデフォルトの実装は、指定されたオフセットがまだ作成されていない場合は、そのラベルを作成します。- パラメーター:
bytecodeOffset
- メソッド内のバイトコードオフセット。labels
- すでに作成されたラベル。オフセットでインデックス付けされます。bytecodeOffset のラベルがすでに存在する場合、このメソッドは新しいラベルを作成してはいけません。それ以外の場合は、新しいラベルをこの配列に格納する必要があります。- 戻り値:
- 非 null ラベル。labels[bytecodeOffset] と等しい必要があります。
getItemCount
public int getItemCount()クラスの定数プールテーブルのエントリ数を返します。- 戻り値:
- クラスの定数プールテーブル内のエントリの数。
getItem
public int getItem(int constantPoolEntryIndex) このClassReader
の JVMS 'cp_info' 構造(つまり、定数プールエントリ)の開始オフセットに 1 を加えた値を返します。 このメソッドはAttribute
サブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
constantPoolEntryIndex
- クラスの定数プールテーブルの定数プールエントリのインデックス。- 戻り値:
- 対応する JVMS 'cp_info' 構造のこの
ClassReader
の開始オフセット + 1
getMaxStringLength
public int getMaxStringLength()クラスの定数プールテーブルに含まれる文字列の最大長の控えめな見積もりを返します。- 戻り値:
- クラスの定数プールテーブルに含まれる文字列の最大長の控えめな見積もり。
readByte
public int readByte(int offset) このClassReader
のバイト値を読み取ります。 このメソッドはAttribute
サブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
offset
- このClassReader
で読み取る値の開始オフセット- 戻り値:
- 読み取られた値。
readUnsignedShort
public int readUnsignedShort(int offset) このClassReader
の符号なし short 値を読み取ります。 このメソッドはAttribute
サブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
offset
- このClassReader
で読み取られる値の開始インデックス- 戻り値:
- 読み取られた値。
readShort
public short readShort(int offset) このClassReader
の符号付き short 値を読み取ります。 このメソッドはAttribute
サブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
offset
- このClassReader
で読み取る値の開始オフセット- 戻り値:
- 読み取られた値。
readInt
public int readInt(int offset) このClassReader
の signedint 値を読み取ります。 このメソッドはAttribute
サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。- パラメーター:
offset
- このClassReader
で読み取る値の開始オフセット- 戻り値:
- 読み取られた値。
readLong
public long readLong(int offset) このClassReader
の符号付き long 値を読み取ります。 このメソッドはAttribute
サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。- パラメーター:
offset
- このClassReader
で読み取る値の開始オフセット- 戻り値:
- 読み取られた値。
readUTF8
このClassReader
の CONSTANT_Utf8 定数プールエントリを読み取ります。 このメソッドはAttribute
サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。- パラメーター:
offset
- このClassReader
の符号なしショート値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Utf8 エントリのインデックスです。charBuffer
- 文字列の読み取りに使用されるバッファ。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。- 戻り値:
- 指定された CONSTANT_Utf8 エントリに対応する文字列。
readClass
このClassReader
の CONSTANT_Class 定数プールエントリを読み取ります。 このメソッドはAttribute
サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。- パラメーター:
offset
- このClassReader
の符号なしショート値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Class エントリのインデックスです。charBuffer
- アイテムの読み取りに使用されるバッファー。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。- 戻り値:
- 指定された CONSTANT_Class エントリに対応する文字列。
readModule
このClassReader
の CONSTANT_Module 定数プールエントリを読み取ります。 このメソッドはAttribute
サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。- パラメーター:
offset
- このClassReader
の符号なしショート値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Module エントリのインデックスです。charBuffer
- アイテムの読み取りに使用されるバッファー。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。- 戻り値:
- 指定された CONSTANT_Module エントリに対応する文字列。
readPackage
このClassReader
の CONSTANT_Package 定数プールエントリを読み取ります。 このメソッドはAttribute
サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。- パラメーター:
offset
- このClassReader
の符号なしショート値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Package エントリのインデックスです。charBuffer
- アイテムの読み取りに使用されるバッファー。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。- 戻り値:
- 指定された CONSTANT_Package エントリに対応する文字列。
readConst
このClassReader
の数値または文字列定数プールエントリを読み取ります。 このメソッドはAttribute
サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。- パラメーター:
constantPoolEntryIndex
- クラスの定数プール内の CONSTANT_Integer、CONSTANT_Float、CONSTANT_Long、CONSTANT_Double、CONSTANT_Class、CONSTANT_String、CONSTANT_MethodType、CONSTANT_MethodHandle、CONSTANT_Dynamic エントリのインデックス。charBuffer
- 文字列の読み取りに使用されるバッファ。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。- 戻り値:
- 指定された定数プールエントリに対応する
Integer
SE、Float
SE、Long
SE、Double
SE、String
SE、Type
、Handle
、ConstantDynamic
。
readByte(int)
およびその他の読み取り方法を使用してください。