Paul,

thanks for the explanation!

In my particular case I can do with protected or even public; it's just that 
the documentation quite explicitly says “You could have the annotated 
method/constructor private for instance but have the generated one be public” 
(https://docs.groovy-lang.org/latest/html/gapi/groovy/transform/NamedVariant.html),
 so I've tried that.

I guess in this case, the code's all right, and it's the documentation what 
needs a small fix :)

Thanks a lot,
OC

> On 28. 1. 2025, at 12:11, Paul King <pa...@asert.com.au> wrote:
> 
> It is more a case of the AST transforms running into a Groovy feature.
> Groovy doesn't let you compile this class:
> 
> class Foo {
>    private foo() {}
>    public foo(String s) {}
> }
> 
> It might seem strange but it has been that way for a long time.
> 
> Can you change "makeSense" to protected?
> 
> Paul.
> 
> On Tue, Jan 28, 2025 at 5:53 PM OCsite <o...@ocs.cz> wrote:
>> 
>> Hi there,
>> 
>> do I make some mistake not understanding properly those two ASTTs, or is 
>> this a Groovy bug?
>> 
>> Thanks!
>> OC
>> 
>> ===
>> 
>> 975 ocs /tmp> <nv.groovy
>> 
>> import groovy.transform.*
>> 
>> import groovy.transform.options.*
>> 
>> class Test {
>> 
>>  @NamedVariant @VisibilityOptions(Visibility.PUBLIC) private makeSense(int 
>> dollars, int cents) {
>> 
>>    "d:$dollars c:$cents"
>> 
>>  }
>> 
>> }
>> 
>> def t=new Test()
>> 
>> println t.makeSense(dollars: 2, cents: 50)
>> 
>> 976 ocs /tmp> /usr/local/groovy-4.0.24/bin/groovy nv
>> 
>> org.codehaus.groovy.control.MultipleCompilationErrorsException: startup 
>> failed:
>> 
>> /private/tmp/nv.groovy: 4: Mixing private and public/protected methods of 
>> the same name causes multimethods to be disabled and is forbidden to avoid 
>> surprising behaviour. Renaming the private methods will solve the problem.
>> 
>> @ line 4, column 3.
>> 
>>     @NamedVariant @VisibilityOptions(Visibility.PUBLIC) private 
>> makeSense(int dollars, int cents) {
>> 
>>     ^
>> 
>> 
>> /private/tmp/nv.groovy: -1: Mixing private and public/protected methods of 
>> the same name causes multimethods to be disabled and is forbidden to avoid 
>> surprising behaviour. Renaming the private methods will solve the problem.
>> 
>> @ line -1, column -1.
>> 
>> 2 errors
>> 
>> 
>> 977 ocs /tmp>
>> 
>> ===

Reply via email to