APIdia Launch Partner
Top Description Fields Methods
jdk.internal.classfile.components

public sealed Interface CodeStackTracker

extends CodeTransform
permits CodeStackTrackerImpl
Known Direct Implementers
jdk.internal.classfile.impl.CodeStackTrackerImpl
Imports
java.lang.classfile.CodeTransform, .Label, .TypeKind, java.util.Collection, .Optional, jdk.internal.classfile.impl.CodeStackTrackerImpl

CodeStackTracker is a CodeTransform tracking stack content and calculating max stack size.

Sample use:

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(); });
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();
});

Field Summary

Inherited from java.lang.classfile.CodeTransform:
ACCEPT_ALL

Method Summary

Modifier and TypeMethod and Description
public Optional<Integer>

Returns:

tracked max stack size, or an empty Optional if tracking has been lost
maxStackSize
()

Returns tracked max stack size.

public static CodeStackTracker

Returns:

new instance of CodeStackTracker
of
(TypeKind...
initial stack content
initialStack
)

Creates new instance of CodeStackTracker initialized with provided stack items.

public Optional<Collection<TypeKind>>

Returns:

actual stack content, or an empty Optional if unknown
stack
()

Returns Collection of TypeKind representing current stack.

Inherited from java.lang.classfile.CodeTransform:
andThenendHandlerofStateful

Method Detail

maxStackSizeback to summary
public Optional<Integer> maxStackSize()

Returns tracked max stack size. Returns an empty Optional when max stack size tracking has been lost.

Max stack size tracking is permanently lost when a stack instruction appears and the actual stack content is unknown.

Returns:Optional<Integer>

tracked max stack size, or an empty Optional if tracking has been lost

ofback to summary
public static CodeStackTracker of(TypeKind... initialStack)

Creates new instance of CodeStackTracker initialized with provided stack items.

Parameters
initialStack:TypeKind[]

initial stack content

Returns:CodeStackTracker

new instance of CodeStackTracker

stackback to summary
public Optional<Collection<TypeKind>> stack()

Returns Collection of TypeKind representing current stack. Returns an empty Optional when the Stack content is unknown (right after xRETURN, ATHROW, GOTO, GOTO_W, LOOKUPSWITCH, TABLESWITCH instructions).

Temporary unknown stack content can be recovered by binding of a Label used as target of a branch instruction from existing code with known stack (forward branch target), or by binding of a Label defining an exception handler (exception handler code start).

Returns:Optional<Collection<TypeKind>>

actual stack content, or an empty Optional if unknown