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

Paul King commented on GROOVY-11153:
------------------------------------

Are you wanting pointers to the behavior? Your analysis above isn't far off. 
The missing piece is that includeSuperProperties is intentionally false so that 
public fields in the existing class are added before super properties/fields. 
The super properties/fields are picked up in getFields but it isn't looking at 
the allProperties attribute which brings in pseudo properties. We possibly need 
a call to BeanUtils#addPseudoProperties in a new getSuperPropertyFields method 
taking an extra allProperties flag.

> groovy.transform.builder.Builder does not create methods for super-class 
> setters
> --------------------------------------------------------------------------------
>
>                 Key: GROOVY-11153
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11153
>             Project: Groovy
>          Issue Type: Bug
>          Components: ast builder
>    Affects Versions: 4.0.13
>         Environment: Windows 10 x64, JDK 11
>            Reporter: Yuri Kudryavtsev
>            Priority: Major
>         Attachments: 2023-08-14_11-49-17.png
>
>
> Groovy version: 4.0.13
> I have two classes.
> First base class:
> {code:java}
> class BaseDto {
>     private String phone
>     String getPhone() {
>         return phone
>     }
>     void setPhone(String phone) {
>         this.phone = phone
>     }
> } {code}
> Second class, that extends first class:
> {code:java}
> @Builder(includeSuperProperties = true, useSetters = true, allProperties = 
> true, allNames = true)
> class ExtendedDto extends BaseDto {
>     String id
>     String getId() {
>         return id
>     }
>     void setId(String id) {
>         this.id = id
>     }
> } {code}
> I try to call builder like this:
> {code:java}
> ExtendedDto.builder().phone('123').build(){code}
> But exception has been thrown: 
> {code:java}
> groovy.lang.MissingMethodException: No signature of method: 
> ExtendedDto$ExtendedDtoBuilder.phone() is applicable for argument types: 
> (String) values: [123]
> Possible solutions: print(java.io.PrintWriter), print(java.lang.Object), 
> any(), find(), id(java.lang.String), any(groovy.lang.Closure)
>     at 
> org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321)
>     at ExtendedDto$ExtendedDtoBuilder.methodMissing(ExtendedDto.groovy){code}
> It seems, that method
> {code:java}
> org.codehaus.groovy.transform.BuilderASTTransformation.AbstractBuilderStrategy#getPropertyInfoFromClassNode(org.codehaus.groovy.transform.BuilderASTTransformation,
>  org.codehaus.groovy.ast.AnnotationNode, org.codehaus.groovy.ast.ClassNode, 
> java.util.List<java.lang.String>, java.util.List<java.lang.String>, boolean, 
> boolean){code}
> always calls method *BeanUtils.getAllProperties* with *includeSuperProperties 
> = false.*
> Imho, *getPropertyInfoFromClassNode* should call *BeanUtils.getAllProperties* 
> with *includeSuperProperties = true*, when DTO has annotation with 
> *includeSuperProperties = true*.



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

Reply via email to