Interface CodeStackTracker
- All Superinterfaces:
ClassFileTransform<CodeTransform, CodeElement, CodeBuilder>
,CodeTransform
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();
});
- Since:
- 24
-
Field Summary
Fields declared in interface java.lang.classfile.CodeTransform
ACCEPT_ALL
-
Method Summary
Modifier and TypeMethodDescriptionReturns tracked max stack size.static CodeStackTracker
Creates new instance ofCodeStackTracker
initialized with provided stack items.stack()
Returns Collection of TypeKind representing current stack.Methods declared in interface java.lang.classfile.ClassFileTransform
accept, atEnd, atStart
Methods declared in interface java.lang.classfile.CodeTransform
andThen
-
Method Details
-
of
Creates new instance ofCodeStackTracker
initialized with provided stack items.- Parameters:
initialStack
- initial stack content- Returns:
- new instance of
CodeStackTracker
-
stack
Optional<Collection<TypeKind>> stack()Returns Collection of TypeKind representing current stack. Returns an empty Optional when the Stack content is unknown (right afterxRETURN, 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:
- actual stack content, or an empty Optional if unknown
-
maxStackSize
-