インターフェース CompilableIndexAccessor

すべてのスーパーインターフェース:
IndexAccessorOpcodesTargetedAccessor
すべての既知の実装クラス:
ReflectiveIndexAccessor

public interface CompilableIndexAccessor extends IndexAccessor, Opcodes
コンパイル可能な IndexAccessor は、インデックスを読み取る操作を表すバイトコードを生成できるため、アクセサーを使用する式のバイトコードへのコンパイルが容易になります。
導入:
6.2
作成者:
Sam Brannen
  • メソッドの詳細

    • isCompilable

      boolean isCompilable()
      この IndexAccessor が現在コンパイルに適しているかどうかを判断します。

      インデックスが読み取られた後にのみわかる場合があります。

      関連事項:
    • getIndexedValueType

      ClassSE<?> getIndexedValueType()
      インデックス値の型を取得します。

      たとえば、式 book.authors[0] が与えられた場合、インデックス値型は authors[0] の結果を表します。これは、Author オブジェクト、作成者の名前を表す String などになります。

      インデックスが読み取られた後にのみわかる場合があります。

      関連事項:
    • generateCode

      void generateCode(SpelNode indexNode, MethodVisitor methodVisitor, CodeFlow codeFlow)
      インデックスを読み取る操作を実行するバイトコードを生成します。

      必要に応じて、CodeFlow からのコンテキスト情報を使用して、提供された MethodVisitor にバイトコードを生成する必要があります。

      提供された indexNode は、インデックスをスタックにロードするための適切なバイトコードを生成するために使用する必要があります。例: 式 book.authors[0] が指定されている場合、codeFlow.generateCodeForArgument(methodVisitor, indexNode, int.class) を呼び出すと、インデックス (0) がスタック上でプリミティブ int として使用できるようになります。

      isCompilable() が true を返す場合にのみ呼び出されます。

      パラメーター:
      indexNode - アクセスされているインデックスを表す SpelNode
      methodVisitor - コードが生成される ASM MethodVisitor
      codeFlow - 式コンパイラーの現在の状態