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/06/21 06:35:00 UTC
[jira] [Resolved] (GROOVY-8627) Compile error using NamedParam with
value
[ https://issues.apache.org/jira/browse/GROOVY-8627?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King resolved GROOVY-8627.
-------------------------------
Resolution: Fixed
Assignee: Paul King
Fix Version/s: 2.5.1
Proposed PR merged. Thanks for spotting the issue.
> Compile error using NamedParam with value
> -----------------------------------------
>
> Key: GROOVY-8627
> URL: https://issues.apache.org/jira/browse/GROOVY-8627
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 2.5.0
> Reporter: Eric Milles
> Assignee: Paul King
> Priority: Major
> Fix For: 2.5.1
>
>
> {{NamedVariantASTTransformation}} has bug checking for presence of {{value}} member.
> {code:java}
> for (Parameter fromParam : fromParams) {
> if (AnnotatedNodeUtils.hasAnnotation(fromParam, NAMED_PARAM_TYPE)) {
> AnnotationNode namedParam = fromParam.getAnnotations(NAMED_PARAM_TYPE).get(0);
> boolean required = memberHasValue(namedParam, "required", true);
> if (getMemberValue(namedParam, "name") == null) {
> namedParam.addMember("value", constX(fromParam.getName()));
> }
> String name = getMemberStringValue(namedParam, "value");
> {code}
> Check here is for {{name}} and if not found, fill in {{value}} from name of annotated param. There are 2 problems with this:
> 1. {{NamedParam}} has no {{name}} member
> 2. {{NamedParam}} indicates {{value}} as required (no default value provided in declaration)
> Example that produces error:
> {code:groovy}
> import groovy.transform.*
> @ToString(includeNames=true)
> class Color {
> Integer r, g, b
> }
> @NamedVariant
> String m(@NamedDelegate Color color, @NamedParam(value='a', required=true) int alpha) {
> return [color, alpha].join(' ')
> }
> print m(r:1, g:2, b:3, a: 0)
> {code}
> Compiling this script results in this error because the {{@NamedParam}} annotation already has a {{value}} member when this line from the transform is executed: {{namedParam.addMember("value", constX(fromParam.getName()));}}.
> {code}
> 1. ERROR in Script.groovy (at line 1)\r\n
> import groovy.transform.*\r\n
> ^\n
> Groovy:Groovy compiler error: exception in phase 'semantic analysis' in source unit 'Script.groovy' Annotation member value has already been added @ line 1, column 0.
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)