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 CodeStackTrackerCreates new instance ofCodeStackTrackerinitialized with provided stack items.stack()Returns Collection of TypeKind representing current stack.Methods declared in interface java.lang.classfile.ClassFileTransform
accept, atEnd, atStartMethods declared in interface java.lang.classfile.CodeTransform
andThen
-
Method Details
-
of
Creates new instance ofCodeStackTrackerinitialized 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, TABLESWITCHinstructions).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
-