public class ClassReader
extends java.lang.Object
ClassVisitor
に ClassFile 構造を訪問させるパーサー。このクラスは、ClassFile コンテンツを解析し、発生したフィールド、メソッド、バイトコード命令ごとに、指定された ClassVisitor
の適切な訪問メソッドを呼び出します。修飾子と型 | フィールドと説明 |
---|---|
byte[] | b 解析される JVMS ClassFile 構造を含むバイト配列。 |
static int | EXPAND_FRAMES スタックマップフレームを展開するフラグ。 |
int | header ClassFile の access_flags フィールドの b 単位のバイト単位のオフセット。 |
static int | SKIP_CODE コード属性をスキップするためのフラグ。 |
static int | SKIP_DEBUG SourceFile、SourceDebugExtension、LocalVariableTable、LocalVariableTypeTable、および LineNumberTable 属性をスキップするフラグ。 |
static int | SKIP_FRAMES StackMap および StackMapTable 属性をスキップするためのフラグ。 |
コンストラクターと説明 |
---|
ClassReader(byte[] classFile) 新しい ClassReader オブジェクトを構築します。 |
ClassReader(byte[] classFileBuffer, int classFileOffset, int classFileLength) 新しい ClassReader オブジェクトを構築します。 |
ClassReader(java.io.InputStream inputStream) 新しい ClassReader オブジェクトを構築します。 |
ClassReader(java.lang.String className) 新しい ClassReader オブジェクトを構築します。 |
修飾子と型 | メソッドと説明 |
---|---|
void | accept(ClassVisitor classVisitor, Attribute[] attributePrototypes, int parsingOptions) この ClassReader のコンストラクターに渡された JVMS ClassFile 構造体を、指定された訪問者に訪問させます。 |
void | accept(ClassVisitor classVisitor, int parsingOptions) この ClassReader のコンストラクターに渡された JVMS ClassFile 構造体を、指定された訪問者に訪問させます。 |
int | getAccess() クラスのアクセスフラグを返します( Opcodes を参照)。 |
java.lang.String | getClassName() クラスの内部名を返します( Type.getInternalName() を参照)。 |
java.lang.String[] | getInterfaces() 実装されたインターフェースの内部名を返します( Type.getInternalName() を参照)。 |
int | getItem(int constantPoolEntryIndex) JVMS の "cp_info" 構造の b の開始オフセットを返します(つまり |
int | getItemCount() クラスの定数プールテーブルのエントリ数を返します。 |
int | getMaxStringLength() クラスの定数プールテーブルに含まれる文字列の最大長の控えめな見積もりを返します。 |
java.lang.String | getSuperName() スーパークラスの内部名を返します( Type.getInternalName() を参照)。 |
int | readByte(int offset) b のバイト値を読み取ります。 |
java.lang.String | readClass(int offset, char[] charBuffer) b の CONSTANT_Class 定数プールエントリを読み取ります。 |
java.lang.Object | readConst(int constantPoolEntryIndex, char[] charBuffer) b の数値または文字列定数プールエントリを読み取ります。 |
int | readInt(int offset) b の signed int 値を読み取ります。 |
protected Label | readLabel(int bytecodeOffset, Label[] labels) 指定されたバイトコードオフセットに対応するラベルを返します。 |
long | readLong(int offset) b の符号付き long 値を読み取ります。 |
java.lang.String | readModule(int offset, char[] charBuffer) b の CONSTANT_Module 定数プールエントリを読み取ります。 |
java.lang.String | readPackage(int offset, char[] charBuffer) b の CONSTANT_Package 定数プールエントリを読み取ります。 |
short | readShort(int offset) b の符号付き short 値を読み取ります。 |
int | readUnsignedShort(int offset) b の符号なし short 値を読み取ります。 |
java.lang.String | readUTF8(int offset, char[] charBuffer) b の CONSTANT_Utf8 定数プールエントリを読み取ります。 |
public static final int SKIP_CODE
public static final int SKIP_DEBUG
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)
は呼び出されません)。public static final int SKIP_FRAMES
MethodVisitor.visitFrame(int, int, java.lang.Object[], int, java.lang.Object[])
は呼び出されません)。このフラグは、ClassWriter.COMPUTE_FRAMES
オプションが使用されている場合に役立ちます。無視されて最初から再計算されるフレームにアクセスするのを回避します。public static final int EXPAND_FRAMES
public final byte[] b
Attribute
サブクラスを対象としており、通常、クラスの訪問者は必要ありません。NOTE: ClassFile 構造体は、この配列内の任意のオフセットで開始できます。つまり、必ずしもオフセット 0 で開始する必要はありません。getItem(int)
および header
を使用して、このバイト配列内の正しい ClassFile 要素オフセットを取得します。
public final int header
b
単位のバイト単位のオフセット。public ClassReader(byte[] classFile)
ClassReader
オブジェクトを構築します。classFile
- 読み取る JVMS ClassFile 構造。public ClassReader(byte[] classFileBuffer, int classFileOffset, int classFileLength)
ClassReader
オブジェクトを構築します。classFileBuffer
- 読み取る JVMS ClassFile 構造を含むバイト配列。classFileOffset
- 読み取られる ClassFile の最初のバイトの byteBuffer 内のオフセット。classFileLength
- 読み取る ClassFile の長さ(バイト)。public ClassReader(java.io.InputStream inputStream) throws java.io.IOException
ClassReader
オブジェクトを構築します。inputStream
- 読み取る JVMS ClassFile 構造の入力ストリームこの入力ストリームには、ClassFile 構造自体のみを含める必要があります。現在の位置から最後まで読み取られます。java.io.IOException
- 読み込み中に問題が発生した場合。public ClassReader(java.lang.String className) throws java.io.IOException
ClassReader
オブジェクトを構築します。className
- 読み取るクラスの完全修飾名。ClassFile 構造体は、現在のクラスローダーの ClassLoader.getSystemResourceAsStream(java.lang.String)
で取得されます。java.io.IOException
- 読み取り中に例外が発生した場合。public int getAccess()
Opcodes
を参照)。バイトコードが 1.5 の前にあり、これらのフラグが属性で表されている場合、この値は非推奨フラグと合成フラグを反映しない場合があります。ClassVisitor.visit(int, int, String, String, String, String[])
public java.lang.String getClassName()
Type.getInternalName()
を参照)。ClassVisitor.visit(int, int, String, String, String, String[])
public java.lang.String getSuperName()
Type.getInternalName()
を参照)。インターフェースの場合、スーパークラスは Object
です。Object
クラスの場合は null。ClassVisitor.visit(int, int, String, String, String, String[])
public java.lang.String[] getInterfaces()
Type.getInternalName()
を参照)。ClassVisitor.visit(int, int, String, String, String, String[])
public void accept(ClassVisitor classVisitor, int parsingOptions)
ClassReader
のコンストラクターに渡された JVMS ClassFile 構造体を、指定された訪問者に訪問させます。classVisitor
- このクラスを訪問しなければならない訪問者。parsingOptions
- このクラスの解析に使用するオプション。SKIP_CODE
、SKIP_DEBUG
、SKIP_FRAMES
または EXPAND_FRAMES
の 1 つ以上。public void accept(ClassVisitor classVisitor, Attribute[] attributePrototypes, int parsingOptions)
ClassReader
のコンストラクターに渡された JVMS ClassFile 構造体を、指定された訪問者に訪問させます。classVisitor
- このクラスを訪問しなければならない訪問者。attributePrototypes
- クラスの訪問中に解析する必要がある属性のプロトタイプ。型がプロトタイプの型と等しくない属性は解析されません。そのバイト配列値は変更されずに ClassWriter に渡されます。 この値に定数プールへの参照が含まれている場合、またはリーダーとライター間のクラスアダプターによって変換されたクラス要素との構文リンクまたはセマンティックリンクがある場合、これにより破損する可能性があります。parsingOptions
- このクラスの解析に使用するオプション。SKIP_CODE
、SKIP_DEBUG
、SKIP_FRAMES
または EXPAND_FRAMES
の 1 つ以上。protected Label readLabel(int bytecodeOffset, Label[] labels)
bytecodeOffset
- メソッド内のバイトコードオフセット。labels
- すでに作成されたラベル。オフセットでインデックス付けされます。bytecodeOffset のラベルがすでに存在する場合、このメソッドは新しいラベルを作成してはいけません。それ以外の場合は、新しいラベルをこの配列に格納する必要があります。public int getItemCount()
public int getItem(int constantPoolEntryIndex)
b
の開始オフセットに 1 を加えたものを返します。 このメソッドは Attribute
サブクラスを対象としており、通常、クラスジェネレーターやアダプターには必要ありません。constantPoolEntryIndex
- クラスの定数プールテーブルの定数プールエントリのインデックス。b
の開始オフセットに 1 を加えたもの。public int getMaxStringLength()
public int readByte(int offset)
offset
- b
で読み取られる値の開始オフセット。public int readUnsignedShort(int offset)
offset
- b
で読み取られる値の開始インデックス。public short readShort(int offset)
offset
- b
で読み取られる値の開始オフセット。public int readInt(int offset)
offset
- b
で読み取られる値の開始オフセット。public long readLong(int offset)
offset
- b
で読み取られる値の開始オフセット。public java.lang.String readUTF8(int offset, char[] charBuffer)
offset
- b
の unsignedshort 値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Utf8 エントリのインデックスです。charBuffer
- 文字列の読み取りに使用されるバッファ。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。public java.lang.String readClass(int offset, char[] charBuffer)
offset
- b
の符号なしショート値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Class エントリのインデックスです。charBuffer
- アイテムの読み取りに使用されるバッファー。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。public java.lang.String readModule(int offset, char[] charBuffer)
offset
- b
の unsignedshort 値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Module エントリのインデックスです。charBuffer
- アイテムの読み取りに使用されるバッファー。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。public java.lang.String readPackage(int offset, char[] charBuffer)
b
の CONSTANT_Package 定数プールエントリを読み取ります。 このメソッドは Attribute
サブクラスを対象としており、通常、クラスジェネレーターやアダプターには必要ありません。offset
- b
の unsignedshort 値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Package エントリのインデックスです。charBuffer
- アイテムの読み取りに使用されるバッファー。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。public java.lang.Object readConst(int constantPoolEntryIndex, char[] charBuffer)
constantPoolEntryIndex
- クラスの定数プール内の CONSTANT_Integer、CONSTANT_Float、CONSTANT_Long、CONSTANT_Double、CONSTANT_Class、CONSTANT_String、CONSTANT_MethodType、CONSTANT_MethodHandle、CONSTANT_Dynamic エントリのインデックス。charBuffer
- 文字列の読み取りに使用されるバッファ。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。Integer
、Float
、Long
、Double
、String
、Type
、Handle
、ConstantDynamic
。