You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (JIRA)" <ji...@apache.org> on 2018/08/03 15:25:00 UTC

[jira] [Created] (GROOVY-8728) Verifier.addDefaultParameters erases metadata if run more than once

Eric Milles created GROOVY-8728:
-----------------------------------

             Summary: 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.5.1, 2.4.15
            Reporter: Eric Milles


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 message was sent by Atlassian JIRA
(v7.6.3#76005)