インタフェースCodeStackTracker

すべてのスーパー・インタフェース:
ClassFileTransformPREVIEW<CodeTransformPREVIEW,CodeElementPREVIEW,CodeBuilderPREVIEW>, CodeTransformPREVIEW

public sealed interface CodeStackTracker extends CodeTransformPREVIEW
CodeStackTrackerは、JavaプラットフォームのプレビューAPIです。
プレビュー機能が有効な場合のみ、プログラムでCodeStackTrackerを使用できます。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
CodeStackTrackerPREVIEWは、CodeTransformPREVIEWトラッキング・スタック・コンテンツであり、最大スタック・サイズを計算します。

サンプル使用:

    var stackTracker = CodeStackTracker.of();
    codeBuilder.transforming(stackTracker, trackedBuilder -> {
        trackedBuilder.aload(0);
        trackedBuilder.lconst_0();
        trackedBuilder.ifThen(...);
        ...
        var stack = stackTracker.stack().get();
        int maxStack = stackTracker.maxStackSize().get();
    });

導入されたバージョン:
22
  • メソッドの詳細

    • of

      static CodeStackTrackerPREVIEW of(TypeKindPREVIEW... initialStack)
      指定されたスタック・アイテムで初期化されるCodeStackTrackerPREVIEWの新しいインスタンスを作成します。
      パラメータ:
      initialStack - 初期スタック・コンテンツ
      戻り値:
      CodeStackTrackerPREVIEWの新しいインスタンス
    • stack

      現在のスタックを表すTypeKindPREVIEWCollectionを返します。 スタック・コンテンツが不明な(xRETURN, ATHROW, GOTO, GOTO_W, LOOKUPSWITCH, TABLESWITCH命令の直後)の場合、空のOptionalを返します。

      一時的な不明なスタック・コンテンツをリカバリするには、既知のスタック(分岐先ターゲット)を持つ既存のコードから分岐命令のターゲットとして使用されるLabelPREVIEWをバインドするか、例外ハンドラ(例外ハンドラ・コードの開始)を定義するLabelPREVIEWをバインドします。

      戻り値:
      実際のスタック・コンテンツ、または不明な場合は空のOptional
    • maxStackSize

      Optional<Integer> maxStackSize()
      追跡された最大スタック・サイズを返します。 最大スタック・サイズ・トラッキングが失われた場合、空のOptionalを返します。

      スタック命令が表示され、実際のスタック内容が不明な場合、最大スタック・サイズ・トラッキングは永続的に失われます。

      戻り値:
      トラッキングされた最大スタック・サイズ、またはトラッキングが失われた場合は空のOptional