You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Yuri Kudryavtsev (Jira)" <ji...@apache.org> on 2023/08/14 09:56:00 UTC
[jira] [Created] (GROOVY-11153) groovy.transform.builder.Builder does not create methods for super-class setters
Yuri Kudryavtsev created GROOVY-11153:
-----------------------------------------
Summary: 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
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)