You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "mgroovy (Jira)" <ji...@apache.org> on 2021/09/25 19:07:00 UTC
[jira] [Updated] (GROOVY-10261) @NamedVariant: Default parameters
on ctor/method are ignored when passing some named parameters
[ https://issues.apache.org/jira/browse/GROOVY-10261?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
mgroovy updated GROOVY-10261:
-----------------------------
Environment:
IntelliJ 2021.1.1 x64
AdoptOpenJDK-11.0.11+9
WIN 10
> @NamedVariant: Default parameters on ctor/method are ignored when passing some named parameters
> -----------------------------------------------------------------------------------------------
>
> Key: GROOVY-10261
> URL: https://issues.apache.org/jira/browse/GROOVY-10261
> Project: Groovy
> Issue Type: Bug
> Components: Compiler
> Affects Versions: 3.0.9
> Environment: IntelliJ 2021.1.1 x64
> AdoptOpenJDK-11.0.11+9
> WIN 10
> Reporter: mgroovy
> Priority: Major
>
> {code}
> import groovy.transform.NamedVariant
> import org.junit.Test
> import simple.groovy.helper.Foo
> import simple.groovy.helper.NamedVariantTestClass
> import static org.junit.Assert.assertEquals
> //@CompileStatic // compile-static or not does not matter
> class NamedVariantTest2 {
> @Test void namedVariantCtorBug_DefaultArgumentsAreIgnored() {
> final resultList = [
> new NamedVariantTestClass(),
> new NamedVariantTestClass(text:"cba"),
> new NamedVariantTestClass(text:"cba", foo:new Foo(8765,'Oof')),
> new NamedVariantTestClass(text:"cba", foo:new Foo(8765,'Oof'), number:4321),
> //new NamedVariantTestClass("cba", foo:new Foo(321,'foot'), number:7777)
> ]
> // Fails: all non-given ctor arguments are incorrectly set to null instead of being given their default value, unless all or no arguments are passed.
> assertEquals resultList.join('\n'),
> """
> NVTC(number=1234, text=abc, foo=Foo(5678,'Foo'))
> NVTC(number=1234, text=cba, foo=Foo(8765,'Oof'))
> NVTC(number=1234, text=cba, foo=Foo(8765,'Oof'))
> NVTC(number=4321, text=cba, foo=Foo(8765,'Oof'))
> """.trim()
> }
> @Test void namedVariantMethodBug_DefaultArgumentsAreIgnored() {
> final resultList = [
> namedVariantTestMethod(),
> namedVariantTestMethod(text:"cba"),
> namedVariantTestMethod(text:"cba", foo:new Foo(8765,'Oof')),
> namedVariantTestMethod(text:"cba", foo:new Foo(8765,'Oof'), number:4321)
> ]
> resultList.each { println it }
> // Fails: all non-given method arguments are incorrectly set to null instead of being given their default value, unless all or no arguments are passed.
> assertEquals resultList.join('\n'),
> """
> nvtm(number=1234, text=abc, foo=Foo(5678,'Foo'))
> nvtm(number=1234, text=cba, foo=Foo(8765,'Oof'))
> nvtm(number=1234, text=cba, foo=Foo(8765,'Oof'))
> nvtm(number=4321, text=cba, foo=Foo(8765,'Oof'))
> """.trim()
> }
> @NamedVariant String namedVariantTestMethod(Integer number = 1234, String text = "abc", Foo foo = new Foo(5678, 'Foo')) {
> "nvtm(number=$number, text=$text, foo=$foo)"
> }
> }
> {code}
> {code}
> class NamedVariantTestClass {
> final Integer number; final String text; final Foo foo
> @NamedVariant NamedVariantTestClass(Integer number = 1234, String text = "abc", Foo foo = new Foo(5678, 'Foo')) {
> this.number = number; this.text = text; this.foo = foo
> }
> @Override String toString() { "NVTC(number=$number, text=$text, foo=$foo)" }
> }
> {code}
> {code}
> class Foo {
> final Number x; final String s
> Foo(Number x, String s) { this.x = x; this.s = s }
> @Override String toString() { "Foo($x,'$s')" }
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)