パッケージ org.springframework.asm

クラス ClassReader

java.lang.ObjectSE
org.springframework.asm.ClassReader

public class ClassReader extends ObjectSE
Java 仮想マシン仕様(JVMS)で定義されているように、ClassVisitor に ClassFile 構造を訪問させるパーサー。このクラスは、ClassFile コンテンツを解析し、発生したフィールド、メソッド、バイトコード命令ごとに、指定された ClassVisitor の適切な訪問メソッドを呼び出します。
作成者:
Eric Bruneton, Eugene Kuleshov
関連事項:
  • フィールドサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    final byte[]
    使用すべきではありません。
    代わりに readByte(int) およびその他の読み取り方法を使用してください。
    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 オブジェクトを構築します。
    新しい 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() を参照)。
    実装されたインターフェースの内部名を返します(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
    readLabel(int bytecodeOffset, Label[] labels)
    指定されたバイトコードオフセットに対応するラベルを返します。
    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 定数プールエントリを読み取ります。

    クラス java.lang.ObjectSE から継承されたメソッド

    clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
  • フィールドの詳細

  • コンストラクターの詳細

    • 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

      public ClassReader(InputStreamSE inputStream) throws IOExceptionSE
      新しい ClassReader オブジェクトを構築します。
      パラメーター:
      inputStream - 読み取る JVMS ClassFile 構造の入力ストリームこの入力ストリームには、ClassFile 構造自体のみを含める必要があります。現在の位置から最後まで読み取られます。
      例外:
      IOExceptionSE - 読み込み中に問題が発生した場合。
    • ClassReader

      public ClassReader(StringSE className) throws IOExceptionSE
      新しい ClassReader オブジェクトを構築します。
      パラメーター:
      className - 読み取るクラスの完全修飾名。ClassFile 構造は、現在のクラスローダーの ClassLoader.getSystemResourceAsStream(java.lang.String)SE で取得されます。
      例外:
      IOExceptionSE - 読み取り中に例外が発生した場合。
  • メソッドの詳細

    • getAccess

      public int getAccess()
      クラスのアクセスフラグを返します(Opcodes を参照)。バイトコードが 1.5 の前にあり、これらのフラグが属性で表されている場合、この値は非推奨フラグと合成フラグを反映しない場合があります。
      戻り値:
      クラスアクセスフラグ。
      関連事項:
    • getClassName

      public StringSE getClassName()
      クラスの内部名を返します(Type.getInternalName() を参照)。
      戻り値:
      内部クラス名。
      関連事項:
    • getSuperName

      public StringSE getSuperName()
      スーパークラスの内部名を返します ( Type.getInternalName() を参照)。インターフェースの場合、スーパークラスは ObjectSE です。
      戻り値:
      スーパークラスの内部名。ObjectSE クラスの場合は null。
      関連事項:
    • getInterfaces

      public StringSE[] getInterfaces()
      実装されたインターフェースの内部名を返します(Type.getInternalName() を参照)。
      戻り値:
      直接実装されたインターフェースの内部名。継承された実装インターフェースは返されません。
      関連事項:
    • accept

      public void accept(ClassVisitor classVisitor, int parsingOptions)
      この ClassReader のコンストラクターに渡された JVMS ClassFile 構造体を、指定された訪問者に訪問させます。
      パラメーター:
      classVisitor - このクラスを訪問しなければならない訪問者。
      parsingOptions - このクラスの解析に使用するオプション。SKIP_CODESKIP_DEBUGSKIP_FRAMES または EXPAND_FRAMES の 1 つ以上。
    • accept

      public void accept(ClassVisitor classVisitor, Attribute[] attributePrototypes, int parsingOptions)
      この ClassReader のコンストラクターに渡された JVMS ClassFile 構造体を、指定された訪問者に訪問させます。
      パラメーター:
      classVisitor - このクラスを訪問しなければならない訪問者。
      attributePrototypes - クラスの訪問中に解析する必要がある属性のプロトタイプ。型がプロトタイプの型と等しくない属性は解析されません。そのバイト配列値は変更されずに ClassWriter に渡されます。 この値に定数プールへの参照が含まれている場合、またはリーダーとライター間のクラスアダプターによって変換されたクラス要素との構文リンクまたはセマンティックリンクがある場合、これにより破損する可能性があります
      parsingOptions - このクラスの解析に使用するオプション。SKIP_CODESKIP_DEBUGSKIP_FRAMES または EXPAND_FRAMES の 1 つ以上。
    • readBytecodeInstructionOffset

      protected void readBytecodeInstructionOffset(int bytecodeOffset)
      accept(ClassVisitor,int) で次にアクセスする命令のバイトコードオフセットを処理します。このメソッドは、命令の直前、関連するラベルとスタックマップフレーム (存在する場合) の前に呼び出されます。このメソッドのデフォルトの実装では何も行われません。サブクラスは、このメソッドをオーバーライドして可変フィールドに引数を格納することができます。これにより、MethodVisitor インスタンスは、アクセスされた各命令のバイトコードオフセットを取得できます (その場合、可変データに関連する通常の並行性の課題に対処する必要があります)。
      パラメーター:
      bytecodeOffset - 次にアクセスされる命令のバイトコードオフセット。
    • readLabel

      protected Label readLabel(int bytecodeOffset, Label[] labels)
      指定されたバイトコードオフセットに対応するラベルを返します。このメソッドのデフォルトの実装は、指定されたオフセットがまだ作成されていない場合は、そのラベルを作成します。
      パラメーター:
      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

      public StringSE readUTF8(int offset, char[] charBuffer)
      この ClassReader の CONSTANT_Utf8 定数プールエントリを読み取ります。 このメソッドは Attribute サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。
      パラメーター:
      offset - この ClassReader の符号なしショート値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Utf8 エントリのインデックスです。
      charBuffer - 文字列の読み取りに使用されるバッファ。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。
      戻り値:
      指定された CONSTANT_Utf8 エントリに対応する文字列。
    • readClass

      public StringSE readClass(int offset, char[] charBuffer)
      この ClassReader の CONSTANT_Class 定数プールエントリを読み取ります。 このメソッドは Attribute サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。
      パラメーター:
      offset - この ClassReader の符号なしショート値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Class エントリのインデックスです。
      charBuffer - アイテムの読み取りに使用されるバッファー。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。
      戻り値:
      指定された CONSTANT_Class エントリに対応する文字列。
    • readModule

      public StringSE readModule(int offset, char[] charBuffer)
      この ClassReader の CONSTANT_Module 定数プールエントリを読み取ります。 このメソッドは Attribute サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。
      パラメーター:
      offset - この ClassReader の符号なしショート値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Module エントリのインデックスです。
      charBuffer - アイテムの読み取りに使用されるバッファー。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。
      戻り値:
      指定された CONSTANT_Module エントリに対応する文字列。
    • readPackage

      public StringSE readPackage(int offset, char[] charBuffer)
      この ClassReader の CONSTANT_Package 定数プールエントリを読み取ります。 このメソッドは Attribute サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。
      パラメーター:
      offset - この ClassReader の符号なしショート値の開始オフセット。この値は、クラスの定数プールテーブルの CONSTANT_Package エントリのインデックスです。
      charBuffer - アイテムの読み取りに使用されるバッファー。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。
      戻り値:
      指定された CONSTANT_Package エントリに対応する文字列。
    • readConst

      public ObjectSE readConst(int constantPoolEntryIndex, char[] charBuffer)
      この ClassReader の数値または文字列定数プールエントリを読み取ります。 このメソッドは Attribute サブクラスを対象としており、通常、クラスジェネレーターまたはアダプターには必要ありません。
      パラメーター:
      constantPoolEntryIndex - クラスの定数プール内の CONSTANT_Integer、CONSTANT_Float、CONSTANT_Long、CONSTANT_Double、CONSTANT_Class、CONSTANT_String、CONSTANT_MethodType、CONSTANT_MethodHandle、CONSTANT_Dynamic エントリのインデックス。
      charBuffer - 文字列の読み取りに使用されるバッファ。このバッファは十分に大きくなければなりません。自動的にサイズ変更されることはありません。
      戻り値:
      指定された定数プールエントリに対応する IntegerSEFloatSELongSEDoubleSEStringSETypeHandleConstantDynamic