Make stack operations use AutoCloseable for safer usage with try-with-resources #1250
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Replaced the error-prone CallStack and Stack pop/push pattern with
AutoCloseable
so that pushing can be done usingtry-with-resources
.Added method
dangerouslyGetWithoutClosing()
to allow backward-compatibility with existing public methods.Migrated all of the prod code, and the test code using
CallStack
pushing. Many tests usingJinjavaInterpreter.pushCurrent()
still need/can be migrated.Using algebra Result for correct/explicit error handling.
New methods like
AutoCloseableSupplier<Result<String, TagCycleException>> closeablePush(...)
, and deprecated the old methods that don't return anAutoCloseableSupplier<T>
.The way that I designed
AutoCloseableSupplier
andAutoCloseableImpl
makes it so that you can use.map
to transform what the autocloseable is, and a custom consumer is supplied that tells how to "close" the thing. And in cases where no closing needs to occur (such as error cases where nothing is pushed to a stack), there'sAutoCloseableSupplier.of(value)