[ 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)