Ed T created GROOVY-11804:
-----------------------------
Summary: Groovy 5 doesn't handle implicit properties
Key: GROOVY-11804
URL: https://issues.apache.org/jira/browse/GROOVY-11804
Project: Groovy
Issue Type: Bug
Components: Compiler
Affects Versions: 5.0.2
Reporter: Ed T
The following code compiles and works find in Groovy 4 (tested with version
4.0.24 and 4.0.29). It no longer compiles with Groovy 5 (tested with version
5.0.2). All ran on JDK25.
{code:java}
interface CustomComparable<Owner extends Comparable, O> {
Owner getOwner()
default boolean isLessThan(O other) {
owner < other
}
default boolean isLessThanOrEqualTo(O other) {
owner <= other
}
default boolean isEqualTo(O other) {
owner == other
}
default boolean isGreaterThan(O other) {
owner > other
}
default boolean isGreaterThanOrEqualTo(O other) {
owner >= other
}
default isBetween(O left, O right) {
owner >= left && owner <= right
}
}
class MyString implements Comparable<Object>, CustomComparable<MyString,
String> {
private String str
MyString(String str) {
this.str = str
}
MyString getOwner() {
return this
}
@Override
int compareTo(Object o) {
String ostr
if (o instanceof MyString) {
ostr = ((MyString) o).str
} else if (o instanceof String) {
ostr = (String) o
} else {
throw new UnsupportedOperationException("can't compare with object of
class: ${o.class}")
}
return str.compareTo(ostr)
}
}
s = new MyString("abc")
println s.isEqualTo("abc")
{code}
When run, Groovy 5 compiler complains the following.
{code:java}
groovy.lang.MissingPropertyException: No such property: owner for class:
MyString at CustomComparable.isEqualTo(ConsoleScript0:14) at
ConsoleScript0.run(ConsoleScript0:60) {code}
Groovy 4.x works just fine.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)