[ 
https://issues.apache.org/jira/browse/GROOVY-11451?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17873290#comment-17873290
 ] 

Eric Milles commented on GROOVY-11451:
--------------------------------------

Do you have a script to recreate?  I cannot get it to do this.  I see where 
named-arguments constructor call is processed for SC 
(org.codehaus.groovy.transform.sc.transformers.ConstructorCallTransformer.MapStyleConstructorCall).
  A direct setter call is not possible in the case of multiple setters without 
some additional logic.  Classgen falls back on dynamic property assignment: 
"entity.id = id"

I suppose it is possible that Spock might get in the way here.  Do you see this 
outside of a spec class?

> IncompatibleClassChange with map-style constructor and overloaded setters
> -------------------------------------------------------------------------
>
>                 Key: GROOVY-11451
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11451
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static compilation
>    Affects Versions: 4.0.22
>            Reporter: Christopher Smith
>            Assignee: Eric Milles
>            Priority: Critical
>
> I have a POJO that I use from Groovy code. After adding a setter overload, I 
> now get {{IncompatibleClassChange}} at runtime because the static compiler 
> generates {{ScriptBytecodeAdapter.setGroovyObjectProperty}} instead of a 
> plain setter call.
> {code}
> public class Entity {
>   public void setId(String id) {}
>   public void setId(UUID id) {}
> }
> class EntityTest extends Specification {
>   @CompileStatic
>   Entity createEntity(String id) {
>     new Entity(id: id) // uses ScriptBytecodeAdapter.setGroovyObjectProperty
>   }
> }
> {code}
> The error is not encountered when calling {{setId(id)}} or using {{entity.id 
> = id}}, without static compilation, or when the setter is not overloaded.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to