[JENKINS-46163] Add support for spread and spread-map operators #613
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.
See JENKINS-46163. This PR is a copy of cloudbees/groovy-cps#123, which was based on cloudbees/groovy-cps#116.
We follow the same approach as regular Groovy for
SpreadMapExpression
(the expression gets turned into a specialSpreadMap
byInvokerHelper.spreadMap
, and then Map literals are constructed usingInvokerHelper.createMap
which detects this marker class and interpolates it).We use a similar approach for
SpreadExpression
, but this is not the approach that Groovy itself uses. Some reasoning behind this choice is given in the Javadoc forSpreadBlock
.This PR also includes various improvements to the test harness (565b1ca) which have been copied from
groovy-sandbox
. I used them in the new tests and adapted existing tests to use the new assertion methods. The two commits can be reviewed independently.