You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (JIRA)" <ji...@apache.org> on 2018/08/14 08:06:02 UTC
[jira] [Closed] (GROOVY-8728) Verifier.addDefaultParameters erases
metadata if run more than once
[ https://issues.apache.org/jira/browse/GROOVY-8728?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King closed GROOVY-8728.
-----------------------------
> Verifier.addDefaultParameters erases metadata if run more than once
> -------------------------------------------------------------------
>
> Key: GROOVY-8728
> URL: https://issues.apache.org/jira/browse/GROOVY-8728
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 2.4.15, 2.5.1
> Reporter: Eric Milles
> Assignee: Paul King
> Priority: Minor
> Fix For: 2.5.2
>
>
> When processing sources with closure with parameter defaults, {{Verifier}} is wiping out the node metadata that contains the initial value expression. At the end of {{addDefaultParameters(DefaultArgsAction action, MethodNode method)}}, there is a for loop:
> {code:java}
> for (Parameter parameter : parameters) {
> // GRECLIPSE add
> if (!parameter.hasInitialExpression()) continue;
> // GRECLIPSE end
> // remove default expression and store it as node metadata
> parameter.putNodeMetaData(Verifier.INITIAL_EXPRESSION, parameter.getInitialExpression());
> parameter.setInitialExpression(null);
> }
> {code}
> This loop currently moves the initial expression to node metadata. However, when this method runs a second time, it takes null from {{getInitialExpression}} and puts that as the new metadata value, even if the node already has been processed.
> Adding a check {{hasInitialExpression}} solves this issue, making {{addDefaultParameters}} idempotent. This also prevent adding the metadata value in the first place for a parameter that never had a default value expression.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)