インタフェースCodeBuilder

すべてのスーパー・インタフェース:
ClassFileBuilder<CodeElement, CodeBuilder>, Consumer<CodeElement>
既知のすべてのサブインタフェース:
CodeBuilder.BlockCodeBuilder

public sealed interface CodeBuilder extends ClassFileBuilder<CodeElement, CodeBuilder> permits CodeBuilder.BlockCodeBuilder (not exhaustive)
Code属性(メソッド本体)のビルダー。 MethodBuilder.withCode(Consumer)は、コード・ビルダーを取得するための基本的な方法です。ClassBuilder.withMethodBody(Utf8Entry, Utf8Entry, int, Consumer)はショートカットです。 また、コード・ブロックを処理するblock(Consumer)と、既存のハンドラで変換を実行するtransforming(CodeTransform, Consumer)から派生したコード・ビルダーもあります。これらの両方では、最初にコード・ビルダーを使用できるようにする必要があります。

classファイル形式の構造体に対するビルダーの使用に関する一般的なガイダンスおよび注意事項は、ClassFileBuilderを参照してください。 他のビルダーとは異なり、コード・ビルダーのメンバー要素の順序は重要です: 結果のバイトコードに影響します。 「多数のクラス・ファイルAPI」オプションはコード・ビルダーに影響: ClassFile.DeadCodeOptionおよびClassFile.ShortJumpsOptionは結果のバイトコードに影響し、ClassFile.DeadLabelsOptionClassFile.DebugElementsOptionClassFile.LineNumbersOptionClassFile.StackMapsOptionおよびClassFile.AttributesProcessingOptionは、ビルドされたCode属性の結果の属性に影響し、コード・ビルダーに送信される一部の要素は無視されます。

インストラクション・ファクトリ

CodeBuilderは、必要なオペランドを使用して、ニーモニックによって命令(「JVMS 6.5の手順」を参照してください)を作成する便利なメソッドを提供します。
  • オペランドを aload_<n>などのopcodeにエンコードする命令は、そのファクトリをaloadのような汎用バージョンと共有します。 iconst_1などの一部の定数命令には汎用バージョンがないため、独自のファクトリがあります。
  • ldc2_w wideなどのワイドオペランドを受け入れる命令は、そのファクトリを ldc(ConstantDesc)などの通常のバージョンと共有します。 goto_wには、「ショート・ジャンプ」を回避するための独自のファクトリがあります。
  • goto, instanceof, newおよびreturn命令のファクトリの名前は、それぞれgoto_instanceOfnew_およびreturn_です。これは、Javaプログラミング言語のキーワードと競合するためです。
  • jsrjsr_wretおよびwide retは、メジャー・バージョン51以上のクラス・ファイルでは使用できません。 (JVMS 4.9.1)は、引き続きClassFileBuilder.with(E)を介して提供できます。
導入されたバージョン:
24
関連項目: