You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Marcin Erdmann (Jira)" <ji...@apache.org> on 2022/11/10 16:37:00 UTC
[jira] [Created] (GROOVY-10821) Potential regression for isser/getter preference in classes with an isser and a not boolean getter for a property of the same name.
Marcin Erdmann created GROOVY-10821:
---------------------------------------
Summary: Potential regression for isser/getter preference in classes with an isser and a not boolean getter for a property of the same name.
Key: GROOVY-10821
URL: https://issues.apache.org/jira/browse/GROOVY-10821
Project: Groovy
Issue Type: Bug
Affects Versions: 4.0.0
Reporter: Marcin Erdmann
Given the following class:
{code}
class ClassWithConflictingAccessors {
boolean isConflictingProperty() {
true
}
String getConflictingProperty() {
"getter"
}
}
{code}
The following passes on Groovy 3
{code}
class AccessorsRegressionSpec extends Specification {
def "getter is preferred for accessors when there is an isser and non-boolean getter"() {
expect:
new ClassWithConflictingAccessors().conflictingProperty == "getter"
}
}
{code}
But fails on Groovy 4:
{noformat}
Condition not satisfied:
new ClassWithConflictingAccessors().conflictingProperty == "getter"
| | |
| true false
<Cl...@533b5d47>
{noformat}
I suspect that this is related to https://github.com/apache/groovy/pull/1599 but it is somewhat an edge case because the getter has a non-boolean return type. I understand that this would be considered a bad design to have such accessors in a Groovy class but there are examples of this out there in the wild ([{{JiraAuthenticationContext.getLoggedInUser()}}|https://docs.atlassian.com/software/jira/docs/api/9.3.0/com/atlassian/jira/security/JiraAuthenticationContextImpl.html#getLoggedInUser--] and [{{JiraAuthenticationContext.isLoggedInUser()}}|https://docs.atlassian.com/software/jira/docs/api/9.3.0/com/atlassian/jira/security/JiraAuthenticationContextImpl.html#isLoggedInUser--] as well as [{{Issue.getCreated()}}|https://docs.atlassian.com/software/jira/docs/api/9.3.0/com/atlassian/jira/issue/Issue.html#getCreated--] and [{{Issue.isCreated()}}|https://docs.atlassian.com/software/jira/docs/api/9.3.0/com/atlassian/jira/issue/Issue.html#isCreated--]) which are heavily used by users of the product I'm working on and this would be a massive breaking change for them.
I'm wondering if a PR with reverting this behaviour to what it was pre Groovy 4 only for the situation where the getter is non-boolean would be considered? I understand that this might been working like that not by design but it did and this can potentially be considered a regression.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)