インタフェースCodeBuilder

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

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

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(java.lang.constant.ConstantDesc)のような通常のバージョンと共有します。 goto_wには、「ショート・ジャンプ」を回避するための独自のファクトリがあります。
  • goto, instanceof, newおよびreturn命令のファクトリの名前は、それぞれgoto_instanceOfnew_およびreturn_です。これは、Javaプログラミング言語のキーワードと競合するためです。
  • jsrjsr_wretおよびwide retは、メジャー・バージョン51以上のクラス・ファイルでは使用できません。 (JVMS 4.9.1)は、引き続きClassFileBuilder.with(E)を介して提供できます。
導入されたバージョン:
24
関連項目: