Prevent StackOverflowError
in JavaTemplateJavaExtension
#4443
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.
The use of
JavaTypeVisitor
inJavaTemplateJavaExtension
is what caused theStackOverflowError
, as theJavaType
graphs can contain cycles and don't provide any mechanism to guard against that.While I understand the reason for using a
JavaTypeVisitor
to also correct the references to that type in the graph, it won't fix all references in any case, so it seems a bit futile. Until OpenRewrite provides a mechanism to "globally" update a type attribution, I feel like the best option here is to do what other recipes typically do: Just update the reference at hand.The other alternative here would be to use the internal method
unsafeSet()
.StackOverflowError
on@java.lang.annotation.Documented
due to self reference #4161