Remove AStoreable as an extendable node from the Painless user tree #54969
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.
This change removes the extendable AStoreable node from the Painless user tree. AStoreable was used to determine if a node was allowed to store a value. However, this was fragile and inflexible as the instanceof check was only 1-level deep so nodes still could throw errors under certain circumstances. This has been replaced by an expression input "write" to tell an expression node whether or not it is meant to store a value. This allows expressions nodes to determine the best course of action when asked to store a value and also gives better error messaging.
This also makes isDefOptimized an output of an expression as opposed to a mutable value on an expression. This is used to determine if a def method returning a value can change the returned value as part of the method signature as opposed to an extra cast.