パッケージ 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 ClassLoaderSE
getCommonSuperClass(String, String)
のデフォルト実装で使用されるClassLoader
SE を返します。デフォルトでは、このClassWriter
のランタイム型の実装です。protected StringSE
getCommonSuperClass
(StringSE type1, StringSE type2) 指定された 2 つの型の共通のスーパー型を返します。boolean
hasFlags
(int flags) 指定されたすべてのフラグがコンストラクターに渡された場合は true を返します。int
ビルドされるクラスの定数プールにクラス参照を追加します。int
ビルドされるクラスの定数プールに数値または文字列定数を追加します。int
newConstantDynamic
(StringSE name, StringSE descriptor, Handle bootstrapMethodHandle, ObjectSE... bootstrapMethodArguments) ビルドされるクラスの定数プールに動的定数参照を追加します。int
ビルドされるクラスの定数プールにフィールド参照を追加します。int
使用すべきではありません。int
ビルドされるクラスの定数プールにハンドルを追加します。int
newInvokeDynamic
(StringSE name, StringSE descriptor, Handle bootstrapMethodHandle, ObjectSE... bootstrapMethodArguments) ビルドされるクラスの定数プールに invokedynamic 参照を追加します。int
ビルドされるクラスの定数プールにメソッド参照を追加します。int
newMethodType
(StringSE methodDescriptor) ビルドされるクラスの定数プールにメソッド型参照を追加します。int
ビルドされるクラスの定数プールにモジュール参照を追加します。int
newNameType
(StringSE name, StringSE descriptor) ビルドするクラスの定数プールに名前と型を追加します。int
newPackage
(StringSE packageName) ビルドされるクラスの定数プールにパッケージ参照を追加します。int
ビルドされるクラスの定数プールに UTF8 文字列を追加します。final void
setFlags
(int flags) 最大スタックサイズ、ローカル変数の最大数、フレームなどのメソッドプロパティの計算戦略を変更します。byte[]
この ClassWriter によって構築されたクラスファイルの内容を返します。final void
visit
(int version, int access, StringSE name, StringSE signature, StringSE superName, StringSE[] interfaces) クラスのヘッダーにアクセスします。final AnnotationVisitor
visitAnnotation
(StringSE descriptor, boolean visible) クラスのアノテーションにアクセスします。final void
visitAttribute
(Attribute attribute) クラスの非標準属性を訪問します。final void
visitEnd()
クラスの最後を訪問します。final FieldVisitor
visitField
(int access, StringSE name, StringSE descriptor, StringSE signature, ObjectSE value) クラスのフィールドを訪問します。final void
visitInnerClass
(StringSE name, StringSE outerName, StringSE innerName, int access) 内部クラスに関する情報を訪問します。final MethodVisitor
visitMethod
(int access, StringSE name, StringSE descriptor, StringSE signature, StringSE[] exceptions) クラスのメソッドを訪問します。final ModuleVisitor
visitModule
(StringSE name, int access, StringSE version) クラスに対応するモジュールにアクセスしてください。final void
visitNestHost
(StringSE nestHost) クラスのネストホストクラスを訪問します。final void
visitNestMember
(StringSE nestMember) 巣のメンバーを訪問します。final void
visitOuterClass
(StringSE owner, StringSE name, StringSE descriptor) クラスの外側のクラスを訪問します。final void
visitPermittedSubclass
(StringSE permittedSubclass) 許可されたサブクラスにアクセスします。final RecordComponentVisitor
visitRecordComponent
(StringSE name, StringSE descriptor, StringSE signature) クラスのレコードコンポーネントを訪問します。final void
visitSource
(StringSE file, StringSE debug) クラスのソースを訪問します。final AnnotationVisitor
visitTypeAnnotation
(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()
を参照)インターフェースの場合、スーパークラスはObject
SE です。null の可能性がありますが、Object
SE クラスの場合のみです。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 になる可能性があり、Integer
SE、Float
SE、Long
SE、Double
SE、String
SE(それぞれ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)
のデフォルト実装で使用されるClassLoader
SE を返します。デフォルトでは、このClassWriter
のランタイム型の実装です。- 戻り値:
- ClassLoader
newHandle(int, String, String, String, boolean)
に取って代わりました。