- All Superinterfaces:
ClassFileTransform<CodeTransform,,CodeElement, CodeBuilder> CodeTransform
- All Known Implementing Classes:
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();
});
- Since:
- 22
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.glavo.classfile.ClassFileTransform
ClassFileTransform.ResolvedTransform<E extends ClassFileElement> -
Field Summary
Fields inherited from interface org.glavo.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 inherited from interface org.glavo.classfile.ClassFileTransform
accept, atEnd, atStartMethods inherited from interface org.glavo.classfile.CodeTransform
andThen, resolve
-
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
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:
- tracked max stack size, or an empty Optional if tracking has been lost
-