You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2022/02/27 13:05:00 UTC
[jira] [Commented] (GROOVY-10515) EqualsAndHashCode no longer access parent class
[ https://issues.apache.org/jira/browse/GROOVY-10515?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17498589#comment-17498589 ]
Paul King commented on GROOVY-10515:
------------------------------------
Actually, the code generated is almost the same for 2.4 and 2.5. I.e. both never use {{level0field}} directly in the {{Level1}} class. We just never bothered checking for the "unused" {{level0field}} name before but we have stricter checking and do this now. This lets you fix your bug. While that field is never used directly, it is accounted for in your {{equals}} and {{hashCode}} methods by virtue of the {{callSuper}} annotation attribute.
There is an {{includeSuperFields}} annotation attribute in {{MapConstructor}}, {{TupleConstrutor}} and {{ToString}}.
> EqualsAndHashCode no longer access parent class
> -----------------------------------------------
>
> Key: GROOVY-10515
> URL: https://issues.apache.org/jira/browse/GROOVY-10515
> Project: Groovy
> Issue Type: Bug
> Reporter: David Brown
> Priority: Minor
>
> It appears there is a breaking change between Groovy 2.4 and 2.5 to the EqualsAndHashCode() method. In 2.4, the includes attribute could reference properties of parent classes up the inheritance tree, however, in 2.5 an exception is thrown indicating the inherited field(s) do not exist.
> The following code demonstrates a simple inheritance relationship with reproducible exception that works correctly with Groovy 2.4.x
> {code:java}
> import groovy.transform.EqualsAndHashCode
> @EqualsAndHashCode(includes = ['level0field'], includeFields = true)
> abstract class Level0 {
> public String level0field
> }
> @EqualsAndHashCode(includes = ['level0field', 'level1field'], callSuper = true, includeFields = true)
> class Level1 extends Level0 {
> String level1field
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)