パッケージ org.springframework.asm
クラス ClassWriter
java.lang.ObjectSE
org.springframework.asm.ClassVisitor
org.springframework.asm.ClassWriter
Java 仮想マシン仕様(JVMS)で定義されている、対応する ClassFile 構造を生成する
ClassVisitor。これを単独で使用して、「ゼロから」Java クラスを生成するか、1 つ以上の ClassReader およびアダプター ClassVisitor を使用して、1 つ以上の既存の Java クラスから変更されたクラスを生成できます。- 作成者:
- Eric Bruneton
- 関連事項:
フィールドのサマリー
フィールド修飾子と型フィールド説明static final intメソッドのスタックマップフレームを最初から自動的に計算するためのフラグ。static final intメソッドの最大スタックサイズとローカル変数の最大数を自動的に計算するためのフラグ。クラス org.springframework.asm.ClassVisitor から継承されたフィールド
api, cvコンストラクターの概要
コンストラクターコンストラクター説明ClassWriter(int flags) 新しいClassWriterオブジェクトを構築します。ClassWriter(ClassReader classReader, int flags) 新しいClassWriterオブジェクトを構築し、「ほとんど追加」するバイトコード変換の最適化を有効にします。メソッドのサマリー
修飾子と型メソッド説明protected ClassLoaderSEgetCommonSuperClass(String, String)のデフォルト実装で使用されるClassLoaderSE を返します。デフォルトでは、このClassWriterのランタイム型の実装です。protected StringSEgetCommonSuperClass(StringSE type1, StringSE type2) 指定された 2 つの型の共通のスーパー型を返します。booleanhasFlags(int flags) 指定されたすべてのフラグがコンストラクターに渡された場合は true を返します。intビルドされるクラスの定数プールにクラス参照を追加します。intビルドされるクラスの定数プールに数値または文字列定数を追加します。intnewConstantDynamic(StringSE name, StringSE descriptor, Handle bootstrapMethodHandle, ObjectSE... bootstrapMethodArguments) ビルドされるクラスの定数プールに動的定数参照を追加します。intビルドされるクラスの定数プールにフィールド参照を追加します。int使用すべきではありません。intビルドされるクラスの定数プールにハンドルを追加します。intnewInvokeDynamic(StringSE name, StringSE descriptor, Handle bootstrapMethodHandle, ObjectSE... bootstrapMethodArguments) ビルドされるクラスの定数プールに invokedynamic 参照を追加します。intビルドされるクラスの定数プールにメソッド参照を追加します。intnewMethodType(StringSE methodDescriptor) ビルドされるクラスの定数プールにメソッド型参照を追加します。intビルドされるクラスの定数プールにモジュール参照を追加します。intnewNameType(StringSE name, StringSE descriptor) ビルドするクラスの定数プールに名前と型を追加します。intnewPackage(StringSE packageName) ビルドされるクラスの定数プールにパッケージ参照を追加します。intビルドされるクラスの定数プールに UTF8 文字列を追加します。final voidsetFlags(int flags) 最大スタックサイズ、ローカル変数の最大数、フレームなどのメソッドプロパティの計算戦略を変更します。byte[]この ClassWriter によって構築されたクラスファイルの内容を返します。final voidvisit(int version, int access, StringSE name, StringSE signature, StringSE superName, StringSE[] interfaces) クラスのヘッダーにアクセスします。final AnnotationVisitorvisitAnnotation(StringSE descriptor, boolean visible) クラスのアノテーションにアクセスします。final voidvisitAttribute(Attribute attribute) クラスの非標準属性を訪問します。final voidvisitEnd()クラスの最後を訪問します。final FieldVisitorvisitField(int access, StringSE name, StringSE descriptor, StringSE signature, ObjectSE value) クラスのフィールドを訪問します。final voidvisitInnerClass(StringSE name, StringSE outerName, StringSE innerName, int access) 内部クラスに関する情報を訪問します。final MethodVisitorvisitMethod(int access, StringSE name, StringSE descriptor, StringSE signature, StringSE[] exceptions) クラスのメソッドを訪問します。final ModuleVisitorvisitModule(StringSE name, int access, StringSE version) クラスに対応するモジュールにアクセスしてください。final voidvisitNestHost(StringSE nestHost) クラスのネストホストクラスを訪問します。final voidvisitNestMember(StringSE nestMember) 巣のメンバーを訪問します。final voidvisitOuterClass(StringSE owner, StringSE name, StringSE descriptor) クラスの外側のクラスを訪問します。final voidvisitPermittedSubclass(StringSE permittedSubclass) 許可されたサブクラスにアクセスします。final RecordComponentVisitorvisitRecordComponent(StringSE name, StringSE descriptor, StringSE signature) クラスのレコードコンポーネントを訪問します。final voidvisitSource(StringSE file, StringSE debug) クラスのソースを訪問します。final AnnotationVisitorvisitTypeAnnotation(int typeRef, TypePath typePath, StringSE descriptor, boolean visible) クラスシグネチャーの型のアノテーションにアクセスします。クラス org.springframework.asm.ClassVisitor から継承されたメソッド
getDelegate
フィールドの詳細
COMPUTE_MAXS
public static final int COMPUTE_MAXSメソッドの最大スタックサイズとローカル変数の最大数を自動的に計算するためのフラグ。このフラグが設定されている場合、visitMethod(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])メソッドによって返されるMethodVisitorのMethodVisitor.visitMaxs(int, int)メソッドの引数は無視され、各メソッドのシグネチャーとバイトコードから自動的に計算されます。注意 : バージョンが
Opcodes.V1_7以上のクラスの場合、このオプションには有効なスタックマップフレームが必要です。次に、最大スタックサイズがこれらのフレームから、およびその間のバイトコード命令から計算されます。スタックマップフレームが存在しないか、再計算する必要がある場合は、代わりにCOMPUTE_FRAMESを使用してください。- 関連事項:
COMPUTE_FRAMES
public static final int COMPUTE_FRAMESメソッドのスタックマップフレームを最初から自動的に計算するためのフラグ。このフラグが設定されている場合、MethodVisitor.visitFrame(int, int, java.lang.Object[], int, java.lang.Object[])メソッドの呼び出しは無視され、スタックマップフレームはメソッドのバイトコードから再計算されます。MethodVisitor.visitMaxs(int, int)メソッドの引数も無視され、バイトコードから再計算されます。つまり、COMPUTE_FRAMESはCOMPUTE_MAXSを意味します。- 関連事項:
コンストラクターの詳細
ClassWriter
public ClassWriter(int flags) 新しいClassWriterオブジェクトを構築します。- パラメーター:
flags- このクラスのデフォルトの動作を変更するために使用できるオプションフラグ。COMPUTE_MAXSおよびCOMPUTE_FRAMESのゼロ以上である必要があります。
ClassWriter
新しいClassWriterオブジェクトを構築し、「ほとんど追加」するバイトコード変換の最適化を有効にします。これらの最適化は次のとおりです。- 元のクラスの定数プールおよびブートストラップメソッドは、新しいクラスにそのままコピーされるため、時間を節約できます。必要に応じて、新しい定数プールエントリと新しいブートストラップメソッドが最後に追加されますが、未使用の定数プールエントリまたはブートストラップメソッドは削除されません。
- 変換されないメソッドは、元のクラスのバイトコードから直接(つまり、すべてのメソッド命令の訪問イベントを発行せずに)新しいクラスにそのままコピーされるため、時間を大幅に節約できます。変換されていないメソッドは、
ClassReaderがClassWriter(および他のClassVisitorインスタンスからではない)からのMethodVisitorオブジェクトを受け取るという事実によって検出されます。
- パラメーター:
classReader- 元のクラスを読み取るために使用されたClassReaderこれは、元のクラスから定数プールとブートストラップメソッド全体をコピーするため、および該当する場合は元のバイトコードの他のフラグメントをコピーするために使用されます。flags- このクラスのデフォルトの動作を変更するために使用できるオプションフラグ。COMPUTE_MAXSおよびCOMPUTE_FRAMESのゼロ以上である必要があります。 これらのオプションフラグは、新しいクラスにそのままコピーされるメソッドには影響しません。つまり、これらのメソッドでは、最大スタックサイズもスタックフレームも計算されません。
メソッドの詳細
hasFlags
public boolean hasFlags(int flags) 指定されたすべてのフラグがコンストラクターに渡された場合は true を返します。- パラメーター:
flags- いくつかのオプションフラグ。COMPUTE_MAXSとCOMPUTE_FRAMESのゼロ以上である必要があります。- 戻り値:
- 指定されたすべてのフラグ、またはそれ以上がコンストラクターに渡された場合は true。
visit
public final void visit(int version, int access, StringSE name, StringSE signature, StringSE superName, StringSE[] interfaces) クラスからコピーされた説明:ClassVisitorクラスのヘッダーにアクセスします。- オーバーライド:
- クラス
ClassVisitorのvisit - パラメーター:
version- クラスのバージョン。マイナーバージョンは上位 16 ビットに格納され、メジャーバージョンは下位 16 ビットに格納されます。access- クラスのアクセスフラグ(Opcodesを参照)。このパラメーターは、クラスが非推奨のOpcodes.ACC_DEPRECATEDであるかレコードOpcodes.ACC_RECORDであるかも示します。name- クラスの内部名(Type.getInternalName()を参照)signature- このクラスの署名。クラスが総称クラスではなく、総称クラスまたはインターフェースを継承または実装しない場合、null になることがあります。superName- スーパークラスの内部名(Type.getInternalName()を参照)インターフェースの場合、スーパークラスはObjectSE です。null の可能性がありますが、ObjectSE クラスの場合のみです。interfaces- クラスのインターフェースの内部名(Type.getInternalName()を参照) null の可能性があります。
visitSource
クラスからコピーされた説明:ClassVisitorクラスのソースを訪問します。- オーバーライド:
- クラス
ClassVisitorのvisitSource - パラメーター:
file- クラスのコンパイル元のソースファイルの名前。null の可能性があります。debug- クラスのソース要素とコンパイル済み要素の間の対応を計算するための追加のデバッグ情報。null の可能性があります。
visitModule
クラスからコピーされた説明:ClassVisitorクラスに対応するモジュールにアクセスしてください。- オーバーライド:
- クラス
ClassVisitorのvisitModule - パラメーター:
name- モジュールの完全修飾名(ドットを使用)。access-ACC_OPEN、ACC_SYNTHETIC、ACC_MANDATEDの中で、モジュールアクセスフラグ。version- モジュールのバージョン、または null。- 戻り値:
- モジュールの値を訪問する訪問者。この訪問者がこのモジュールの訪問に興味がない場合は null。
visitNestHost
クラスからコピーされた説明:ClassVisitorクラスのネストホストクラスを訪問します。ネストは、プライベートメンバーへのアクセスを共有する同じパッケージのクラスのセットです。これらのクラスの 1 つは、ホストと呼ばれ、ネストの他のメンバーをリストします。次に、それらのメンバーは、ネストのホストにリンクする必要があります。このメソッドは、訪問したクラスがネストの非ホストメンバーである場合にのみ、一度だけ呼び出す必要があります。クラスは暗黙的に独自のネストであるため、訪問したクラス名を引数としてこのメソッドを呼び出すことは無効です。- オーバーライド:
- クラス
ClassVisitorのvisitNestHost - パラメーター:
nestHost- ネストのホストクラスの内部名 (Type.getInternalName()を参照)。
visitOuterClass
クラスからコピーされた説明:ClassVisitorクラスの外側のクラスにアクセスします。このメソッドは、このクラスがローカルクラスまたは匿名クラスである場合にのみ呼び出す必要があります。詳細については、JVMS 4.7.7 セクションを参照してください。- オーバーライド:
- クラス
ClassVisitorのvisitOuterClass - パラメーター:
owner- クラスを囲むクラスの内部名 (Type.getInternalName()を参照)。name- クラスを含むメソッドの名前。クラスがそれを囲むクラスのメソッドまたはコンストラクターに囲まれていない場合は null (たとえば、インスタンス初期化子、静的初期化子、インスタンス変数初期化子、クラス変数初期化子に囲まれている場合)。descriptor- クラスを含むメソッドの記述子。クラスがそれを囲むクラスのメソッドまたはコンストラクターに囲まれていない場合は null (たとえば、インスタンス初期化子、静的初期化子、インスタンス変数初期化子、クラス変数初期化子に囲まれている場合)。
visitAnnotation
クラスからコピーされた説明:ClassVisitorクラスのアノテーションにアクセスします。- オーバーライド:
- クラス
ClassVisitorのvisitAnnotation - パラメーター:
descriptor- アノテーションクラスのクラス記述子。visible- 実行時にアノテーションが表示される場合は true。- 戻り値:
- アノテーションの値を訪問する訪問者、またはこの訪問者がこのアノテーションを訪問することに興味がない場合は null。
visitTypeAnnotation
public final AnnotationVisitor visitTypeAnnotation(int typeRef, TypePath typePath, StringSE descriptor, boolean visible) クラスからコピーされた説明:ClassVisitorクラスシグネチャーの型のアノテーションにアクセスします。- オーバーライド:
- クラス
ClassVisitorのvisitTypeAnnotation - パラメーター:
typeRef- アノテーション付きの型への参照。この型参照の種類は、TypeReference.CLASS_TYPE_PARAMETER、TypeReference.CLASS_TYPE_PARAMETER_BOUNDまたはTypeReference.CLASS_EXTENDSでなければなりません。TypeReferenceを参照してください。typePath- 'typeRef' 内のアノテーション付き型引数、ワイルドカード境界、配列要素型、静的内部型へのパス。アノテーションが 'typeRef' 全体を対象とする場合は null になることがあります。descriptor- アノテーションクラスのクラス記述子。visible- 実行時にアノテーションが表示される場合は true。- 戻り値:
- アノテーションの値を訪問する訪問者、またはこの訪問者がこのアノテーションを訪問することに興味がない場合は null。
visitAttribute
クラスからコピーされた説明:ClassVisitorクラスの非標準属性を訪問します。- オーバーライド:
- クラス
ClassVisitorのvisitAttribute - パラメーター:
attribute- 属性。
visitNestMember
クラスからコピーされた説明:ClassVisitor巣のメンバーを訪問します。ネストは、プライベートメンバーへのアクセスを共有する同じパッケージのクラスのセットです。これらのクラスの 1 つは、ホストと呼ばれ、ネストの他のメンバーをリストします。次に、それらのメンバーは、ネストのホストにリンクする必要があります。このメソッドは、訪問したクラスがネストのホストである場合にのみ呼び出す必要があります。ネストホストは暗黙的にそれ自身のネストのメンバーであるため、訪問したクラス名を引数としてこのメソッドを呼び出すことは無効です。- オーバーライド:
- クラス
ClassVisitorのvisitNestMember - パラメーター:
nestMember- ネストメンバーの内部名 (Type.getInternalName()を参照)。
visitPermittedSubclass
クラスからコピーされた説明:ClassVisitor許可されたサブクラスにアクセスします。許可されたサブクラスは、現在のクラスで許可されているサブクラスの 1 つです。- オーバーライド:
- クラス
ClassVisitorのvisitPermittedSubclass - パラメーター:
permittedSubclass- 許可されたサブクラスの内部名 (Type.getInternalName()を参照)。
visitInnerClass
public final void visitInnerClass(StringSE name, StringSE outerName, StringSE innerName, int access) クラスからコピーされた説明:ClassVisitor内部クラスに関する情報にアクセスします。この内部クラスは、必ずしもアクセス対象のクラスのメンバーであるとは限りません。より正確には、このクラスによって参照され、パッケージメンバーではないすべてのクラスまたはインターフェース C は、このメソッドでアクセスする必要があります。このクラスは、ネストされたクラスまたはインターフェースメンバー、およびそれを囲むクラス (存在する場合) を参照する必要があります。詳細については、JVMS 4.7.6 セクションを参照してください。- オーバーライド:
- クラス
ClassVisitorのvisitInnerClass - パラメーター:
name- C の内部名 (Type.getInternalName()を参照)。outerName- C がメンバーであるクラスまたはインターフェースの内部名 (Type.getInternalName()を参照)。C がクラスまたはインターフェースのメンバーでない場合は null にする必要があります (たとえば、ローカルクラスまたは匿名クラスの場合)。innerName- C の (単純な) 名前。匿名内部クラスの場合は null でなければなりません。access- このクラスのコンパイル元のソースコードで最初に宣言された C のアクセスフラグ。
visitRecordComponent
public final RecordComponentVisitor visitRecordComponent(StringSE name, StringSE descriptor, StringSE signature) クラスからコピーされた説明:ClassVisitorクラスのレコードコンポーネントを訪問します。- オーバーライド:
- クラス
ClassVisitorのvisitRecordComponent - パラメーター:
name- レコードコンポーネント名。descriptor- レコードコンポーネント記述子(Typeを参照)signature- レコードコンポーネントの署名。レコードコンポーネント型がジェネリクス型を使用しない場合、null になることがあります。- 戻り値:
- このレコードコンポーネントのアノテーションと属性にアクセスする訪問者。このクラスの訪問者がこれらのアノテーションと属性にアクセスすることに関心がない場合は null。
visitField
public final FieldVisitor visitField(int access, StringSE name, StringSE descriptor, StringSE signature, ObjectSE value) クラスからコピーされた説明:ClassVisitorクラスのフィールドを訪問します。- オーバーライド:
- クラス
ClassVisitorのvisitField - パラメーター:
access- フィールドのアクセスフラグ(Opcodesを参照)このパラメーターは、フィールドが合成か非推奨か、あるいはその両方かを示します。name- フィールドの名前。descriptor- フィールドの記述子(Typeを参照)signature- フィールドの署名。フィールドの型がジェネリクス型を使用しない場合、null になることがあります。value- フィールドの初期値。このパラメーターは、フィールドに初期値がない場合は null になる可能性があり、IntegerSE、FloatSE、LongSE、DoubleSE、StringSE(それぞれint、float、longまたはStringフィールドの場合)でなければなりません。 このパラメーターは静的フィールドにのみ使用されます。非静的フィールドの場合、その値は無視されます。これは、コンストラクターまたはメソッドのバイトコード命令によって初期化する必要があります。- 戻り値:
- フィールドのアノテーションと属性にアクセスする訪問者。このクラスの訪問者がこれらのアノテーションと属性にアクセスすることに関心がない場合は null。
visitMethod
public final MethodVisitor visitMethod(int access, StringSE name, StringSE descriptor, StringSE signature, StringSE[] exceptions) クラスからコピーされた説明:ClassVisitorクラスのメソッドを訪問します。このメソッドは、呼び出されるたびに新しいMethodVisitorインスタンス(または null)を返す必要があります。つまり、以前に返されたビジターを返しません。- オーバーライド:
- クラス
ClassVisitorのvisitMethod - パラメーター:
access- メソッドのアクセスフラグ(Opcodesを参照)このパラメーターは、メソッドが合成であるか、非推奨であるかを示します。name- メソッドの名前。descriptor- メソッドの記述子(Typeを参照)signature- メソッドの署名。メソッドのパラメーター、戻り値の型、例外がジェネリクス型を使用しない場合、null になることがあります。exceptions- メソッドの例外クラスの内部名(Type.getInternalName()を参照) null の可能性があります。- 戻り値:
- メソッドのバイトコードを訪問するオブジェクト。このクラスビジターがこのメソッドのコードを訪問することに関心がない場合は null。
visitEnd
public final void visitEnd()クラスからコピーされた説明:ClassVisitorクラスの最後を訪問します。呼び出される最後のメソッドであるこのメソッドは、クラスのすべてのフィールドとメソッドが訪問されたことを訪問者に通知するために使用されます。- オーバーライド:
- クラス
ClassVisitorのvisitEnd
toByteArray
public byte[] toByteArray()この ClassWriter によって構築されたクラスファイルの内容を返します。- 戻り値:
- この ClassWriter によって構築された JVMS ClassFile 構造のバイナリコンテンツ。
- 例外:
ClassTooLargeException- クラスの定数プールが大きすぎる場合。MethodTooLargeException- メソッドのコード属性が大きすぎる場合。
newConst
ビルドされるクラスの定数プールに数値または文字列定数を追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。newUTF8
ビルドされるクラスの定数プールに UTF8 文字列を追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
value- 文字列値。- 戻り値:
- 新規または既存の UTF8 アイテムのインデックス。
newClass
ビルドされるクラスの定数プールにクラス参照を追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
value- クラスの内部名(Type.getInternalName()を参照)- 戻り値:
- 新規または既存のクラス参照アイテムのインデックス。
newMethodType
ビルドされるクラスの定数プールにメソッド型の参照を追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
methodDescriptor- メソッド型のメソッド記述子。- 戻り値:
- 新規または既存のメソッド型参照項目のインデックス。
newModule
ビルドされるクラスの定数プールにモジュール参照を追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
moduleName- モジュールの名前。- 戻り値:
- 新規または既存のモジュール参照アイテムのインデックス。
newPackage
ビルドされるクラスの定数プールにパッケージ参照を追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
packageName- 内部形式でのパッケージの名前。- 戻り値:
- 新規または既存のモジュール参照アイテムのインデックス。
newHandle
使用すべきではありません。このメソッドはnewHandle(int, String, String, String, boolean)に取って代わりました。ビルドされるクラスの定数プールにハンドルを追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
tag- このハンドルの種類。Opcodes.H_GETFIELD、Opcodes.H_GETSTATIC、Opcodes.H_PUTFIELD、Opcodes.H_PUTSTATIC、Opcodes.H_INVOKEVIRTUAL、Opcodes.H_INVOKESTATIC、Opcodes.H_INVOKESPECIAL、Opcodes.H_NEWINVOKESPECIAL、Opcodes.H_INVOKEINTERFACEである必要があります。owner- フィールドまたはメソッド所有者クラスの内部名 (Type.getInternalName()を参照)。name- フィールドまたはメソッドの名前。descriptor- フィールドまたはメソッドの記述子。- 戻り値:
- 新規または既存のメソッド型参照項目のインデックス。
newHandle
public int newHandle(int tag, StringSE owner, StringSE name, StringSE descriptor, boolean isInterface) ビルドされるクラスの定数プールにハンドルを追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
tag- このハンドルの種類。Opcodes.H_GETFIELD、Opcodes.H_GETSTATIC、Opcodes.H_PUTFIELD、Opcodes.H_PUTSTATIC、Opcodes.H_INVOKEVIRTUAL、Opcodes.H_INVOKESTATIC、Opcodes.H_INVOKESPECIAL、Opcodes.H_NEWINVOKESPECIAL、Opcodes.H_INVOKEINTERFACEである必要があります。owner- フィールドまたはメソッド所有者クラスの内部名 (Type.getInternalName()を参照)。name- フィールドまたはメソッドの名前。descriptor- フィールドまたはメソッドの記述子。isInterface- 所有者がインターフェースの場合は true。- 戻り値:
- 新規または既存のメソッド型参照項目のインデックス。
newConstantDynamic
public int newConstantDynamic(StringSE name, StringSE descriptor, Handle bootstrapMethodHandle, ObjectSE... bootstrapMethodArguments) ビルドされるクラスの定数プールに動的定数参照を追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
name- 呼び出されたメソッドの名前。descriptor- 定数型のフィールド記述子。bootstrapMethodHandle- ブートストラップメソッド。bootstrapMethodArguments- ブートストラップメソッド定数引数。- 戻り値:
- 新規または既存の動的定数参照アイテムのインデックス。
newInvokeDynamic
public int newInvokeDynamic(StringSE name, StringSE descriptor, Handle bootstrapMethodHandle, ObjectSE... bootstrapMethodArguments) ビルドされるクラスの定数プールに invokedynamic 参照を追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
name- 呼び出されたメソッドの名前。descriptor- invoke メソッドの記述子。bootstrapMethodHandle- ブートストラップメソッド。bootstrapMethodArguments- ブートストラップメソッド定数引数。- 戻り値:
- 新規または既存の invokedynamic 参照項目のインデックス。
newField
ビルドされるクラスの定数プールにフィールド参照を追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
owner- フィールドの所有者クラスの内部名(Type.getInternalName()を参照)。name- フィールドの名前。descriptor- フィールドの記述子。- 戻り値:
- 新規または既存のフィールド参照アイテムのインデックス。
newMethod
ビルドされるクラスの定数プールにメソッド参照を追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
owner- メソッドの所有者クラスの内部名(Type.getInternalName()を参照)。name- メソッドの名前。descriptor- メソッドの記述子。isInterface-ownerがインターフェースの場合は true。- 戻り値:
- 新規または既存のメソッド参照アイテムのインデックス。
newNameType
ビルドするクラスの定数プールに名前と型を追加します。定数プールにすでに同様のアイテムが含まれている場合は、何もしません。 このメソッドはAttributeサブクラスを対象としており、通常、クラスジェネレーターやアダプターでは必要ありません。- パラメーター:
name- 名前。descriptor- 型記述子。- 戻り値:
- 新規または既存の名前と型のアイテムのインデックス。
setFlags
public final void setFlags(int flags) 最大スタックサイズ、ローカル変数の最大数、フレームなどのメソッドプロパティの計算戦略を変更します。警告 :
setFlags(int)メソッドは、visitMethod(int, String, String, String, String[])から返される新しいメソッドビジターの動作を変更します。動作は、次のメソッドビジターが返された後にのみ変更されます。以前に返されたメソッドビジターはすべて、以前の動作を維持します。- パラメーター:
flags- このクラスのデフォルトの動作を変更するために使用できるオプションフラグ。COMPUTE_MAXSおよびCOMPUTE_FRAMESのゼロ以上である必要があります。
getCommonSuperClass
指定された 2 つの型の共通のスーパー型を返します。このメソッドのデフォルト実装は、指定された 2 つのクラスをロードし、java.lang.Class メソッドを使用して共通のスーパークラスを見つけます。他の方法で、特に実際にクラスをロードせずに、この共通のスーパー型を計算したり、この ClassWriter によって現在生成されているクラスを考慮に入れたりすることはオーバーライドできます。- パラメーター:
type1- クラスの内部名 (Type.getInternalName()を参照)。type2- 別のクラスの内部名 (Type.getInternalName()を参照)。- 戻り値:
- 指定された 2 つのクラスの共通スーパークラスの内部名 (
Type.getInternalName()を参照)。
getClassLoader
getCommonSuperClass(String, String)のデフォルト実装で使用されるClassLoaderSE を返します。デフォルトでは、このClassWriterのランタイム型の実装です。- 戻り値:
- ClassLoader
newHandle(int, String, String, String, boolean)に取って代わりました。